我正在使用预处理语句将一些旧代码移动到新的msqli接口,我在使用包含IN子句的SQL语句时遇到问题.我通常会这样做:
$ids = '123,535,345,567,878'
$sql = "SELECT * FROM table WHERE id IN ($ids)";
$res = mysql_query($sql);
Run Code Online (Sandbox Code Playgroud)
将其转换为mysqli和预处理语句我尝试了许多解决方案:
$ids = '123,535,345,567,878'
$ids = implode($ids,',');
$result = $msqli->prepare("SELECT foo,blar FROM table WHERE id IN (?));
$result->bind_param("i", $ids);
$result->execute();
Run Code Online (Sandbox Code Playgroud)
上面的操作失败并计算了数组中的元素数量并改变了SQL字符串中的问号数量,并且对数组中的每个元素调用bind_parm也失败了.仅使用逗号分隔的字符串也会失败.
我在谷歌上找不到好的文档,你怎么解决这个问题?
将可变长度列表绑定到单个绑定变量是不可能的.
同样,如果你要绑定$ids你实际上最终会得到的字符串:
SELECT foo,blar FROM table WHERE id IN ('123,535,345,567,878')
Run Code Online (Sandbox Code Playgroud)
(注意ID列表周围的引号).
使用正确数量的问号和绑定参数创建自己的查询应该已经实际工作 - 您可能需要再次尝试并报告实际错误.
或者,这可能是那些不幸地需要手工制作自己的SQL而不使用绑定参数的场合之一.
看看之前提到过的类似问题的答案(第二个代码示例):
我有一个整数数组,如何在mysql查询中使用每一个(在php中)?
归结为:
call_user_func_array()将数组绑定到查询字符串| 归档时间: |
|
| 查看次数: |
11524 次 |
| 最近记录: |