️题主您好️,目前由我为您解答👇🏼
🧡参考谷歌智能助手,由吾为汝整理提供🧡
<?php
function GetID(){
$sid = $_GET['id'];
$ids = [];
if (!empty($sid)) {
$id_array = explode(',', $sid); // 将逗号分隔的字符串转换为数组
foreach ($id_array as $id_str) {
if (preg_match('/^[1-9][0-9]{0,9}$/', $id_str)) { // 检查每个ID是否符合规则
if (strlen($id_str) < 10 || (strlen($id_str) == 10 && strcmp($id_str, '4294967295') <= 0)) {
$ids[] = (int)$id_str; // 将符合条件的ID转换为整数并添加到数组
}
}
}
}
return $ids;
}
$link=db_connect();
$empire=new mysqlquery();
$ids = GetID();
if (!empty($ids)) {
$id_string = implode(',', $ids); // 将ID数组转换为逗号分隔的字符串
// 使用IN语句查询多个ID
$sql = 'select id,dj_url,title from lxwqu where id in (' . $id_string . ')';
$result = $empire->query($sql); // 执行查询
$response = []; // 存储所有结果的数组
while ($r = $empire->fetch($result)) { // 循环获取每一行结果
$djurl = $r['dj_url'];
$title = $r['title'];
$title3 = urlencode($r['title']);
$str = iconv('GBK','UTF-8', $title); // 如果需要转换编码
// 将每条记录的数据添加到响应数组中
$response[] = [
"did" => $r['id'],
"danceName" => $title,
"filePath" => $djurl,
"classId" => "1"
];
}
echo json_encode($response); // 将结果数组转换为JSON格式输出
} else {
// 处理没有有效ID的情况
echo '{"error": "No valid IDs provided"}';
}
db_close();
$empire=null;
?>
主要改进点:
-
GetID() 函数修改:
- 使用
explode(',', $sid) 将逗号分隔的ID字符串拆分成数组。 - 遍历数组,对每个ID进行验证,并将有效的ID存储到
$ids 数组中。 - 返回一个包含所有有效ID的整数数组。
-
使用 IN 语句查询:
- 使用
implode(',', $ids) 将 $ids 数组转换为逗号分隔的字符串,用于构建 IN 语句。 - 使用
$empire->query($sql) 执行SQL查询。
-
循环处理结果集:
- 使用
while ($r = $empire->fetch($result)) 循环遍历结果集中的每一行。 - 将每行数据格式化后存储到
$response 数组中。
-
JSON 格式输出:
- 使用
json_encode($response) 将结果数组转换为 JSON 格式输出,方便前端处理。
-
错误处理:
- 添加了对没有有效ID情况的处理,返回一个错误信息。
-
类型转换: 将符合条件的ID转换为整数 (int)$id_str,避免潜在的SQL注入风险。
使用方法:
访问 xx.php?id=123,125,127 即可查询多个ID对应的记录,并以 JSON 格式返回结果。
关于 mysqlquery 类:
代码中使用了 mysqlquery 类,这可能是自定义的数据库操作类。请确保该类已经正确定义,并且 fetch()、fetch1() 和 query() 方法的功能符合预期。如果使用的是其他的数据库扩展,例如 MySQLi 或 PDO,需要相应地修改数据库操作代码。 强烈建议使用 MySQLi 或 PDO,因为 mysql_* 函数已经过时且不安全。
安全性提示:
尽管代码中已经进行了一些输入验证,但仍然建议使用参数化查询或预处理语句来防止 SQL 注入攻击。 如果使用的是 MySQLi 或 PDO,可以很容易地实现参数化查询。
这个改进后的代码可以处理多个ID的查询,并将结果以 JSON 格式返回,更方便前端处理数据。 记住要根据你的实际数据库连接和 mysqlquery 类的具体实现进行调整。