liuqi67958 2024-12-18 09:32 采纳率: 100%
浏览 18
已结题

请教PHP怎么同时查询多个ID?


<?php
function GetID()
{
    $sid = $_GET['id'];
    $id = '0';
    #if(preg_match('/^\d{1,10}$/', $sid)) {#允许首位含0
    if(preg_match('/^[1-9][0-9]{0,9}$/', $sid)) {#不允许首位含0
        if(strlen($sid) < 10) { #如果输入的ID在10位以下
            $id = $sid; #直接赋值
        } elseif (strlen($sid) == 10) { #如果输入在ID是10位
            if(strcmp($sid, '4294967295') <= 0) #和最大数进行比较,小于或等于就赋值 
                $id = $sid;
        } 
    }
    return $id;
}

$link=db_connect();
$empire=new mysqlquery();
$id = GetID();


$r=$empire->fetch1('select id,dj_url,title from lxwqu where id in ("1,2")');
$djurl=''.$r['dj_url'].'';
$title =''.$r[title].'';

$title3 = urlencode('$r[title]');
$str=iconv('GBK','UTF-8',"$title"); 

echo '{"did":"'.$r[id].'","danceName":"'.$title.'","filePath":"'.$djurl.'","classId":"1"}';



db_close();
$empire=null;
?>

上面代码是只读取单个ID的
显示
XX.php?id=123

如果我要它显示多个ID的结果呢?
比如:xx.php?id=123,125,127

要怎么弄呢?

  • 写回答

21条回答 默认 最新

  • 问答-莫得感情 2024-12-18 09:47
    关注

    ️题主您好️,目前由我为您解答👇🏼
    🧡参考谷歌智能助手,由吾为汝整理提供🧡

    <?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;
    
    ?>
    

    主要改进点:

    1. GetID() 函数修改:

      • 使用 explode(',', $sid) 将逗号分隔的ID字符串拆分成数组。
      • 遍历数组,对每个ID进行验证,并将有效的ID存储到 $ids 数组中。
      • 返回一个包含所有有效ID的整数数组。
    2. 使用 IN 语句查询:

      • 使用 implode(',', $ids)$ids 数组转换为逗号分隔的字符串,用于构建 IN 语句。
      • 使用 $empire->query($sql) 执行SQL查询。
    3. 循环处理结果集:

      • 使用 while ($r = $empire->fetch($result)) 循环遍历结果集中的每一行。
      • 将每行数据格式化后存储到 $response 数组中。
    4. JSON 格式输出:

      • 使用 json_encode($response) 将结果数组转换为 JSON 格式输出,方便前端处理。
    5. 错误处理:

      • 添加了对没有有效ID情况的处理,返回一个错误信息。
    6. 类型转换: 将符合条件的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 类的具体实现进行调整。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(20条)

报告相同问题?

问题事件

  • 系统已结题 12月26日
  • 已采纳回答 12月18日
  • 创建了问题 12月18日