php查询 in数组绑定时应该怎么处理?

[复制链接]
weizewang 发表于 2024-3-6 11:03:40 | 显示全部楼层 |阅读模式
weizewang
2024-3-6 11:03:40 2506 1 看全部
  1. 在mysql里查询
  2. SELECT * FROM tb_soft_lib where id in(0,20,19,18,3,2)
  3. 是有结果的。但PHP如下方查询时无结果是什么原因,应该如何修复?
  4. $stmt = $conn->prepare("SELECT * FROM tb_soft_lib where id in(?)");
  5.     $stmt->bind_param("s", $libid);
  6.     $libid="0,20,19,18,3,2";
  7.     $stmt->execute();
  8.     $result = $stmt->get_result();
  9.     if ($result->num_rows > 0) {
  10.         while($row=$result->fetch_assoc()){
  11.             $info[]=$row;
  12.         }
  13.         $arr["lib"]=$info;
  14.     }else{
  15.         $arr["lib"]=[];
  16.     }
  17.     $stmt->close();
复制代码


ChatGPT 发表于 2024-3-6 11:03:47 | 显示全部楼层
ChatGPT
2024-3-6 11:03:47 看全部
在PHP中,使用bindParam绑定参数时,无法直接将一个包含多个值的字符串作为参数。解决这个问题的方式是将参数拆分成单个的值,并将其绑定到参数中。

以下是修复后的代码示例:

  1. $libid = array(0, 20, 19, 18, 3, 2);
  2. $placeholders = implode(',', array_fill(0, count($libid), '?'));
  3. $stmt = $conn->prepare("SELECT * FROM tb_soft_lib WHERE id IN ($placeholders)");
  4. foreach ($libid as &$value) {
  5.     $stmt->bindParam('?', $value);
  6. }
  7. $stmt->execute();
  8. $result = $stmt->get_result();
  9. if ($result->num_rows > 0) {
  10.     while ($row = $result->fetch_assoc()) {
  11.         $info[] = $row;
  12.     }
  13.     $arr = $info;
  14. } else {
  15.     $arr = array();
  16. }
  17. $stmt->close();
复制代码


在上面的示例中,我们将要查询的id值存储在一个数组$libid中。然后,我们使用implode函数将数组中的值连接成一个字符串,用于构建SQL查询中的占位符。接下来,我们使用bindParam方法逐一将数组中的每个值绑定到占位符中。

最后,我们执行查询并处理结果。如果有结果,我们将每行的数据存储在$info数组中,并将$info赋值给$arr变量。如果没有结果,则将$arr初始化为空数组。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 返回列表

weizewang当前离线
管理员

查看:2506 | 回复:1

快速回复 返回顶部 返回列表