我正在使用准备好的语句将一些旧代码移动到新的 msqli 接口(interface),但我在使用包含 IN 子句的 SQL 语句时遇到了问题。我通常会这样做:
$ids = '123,535,345,567,878'
$sql = "SELECT * FROM table WHERE id IN ($ids)";
$res = mysql_query($sql);
将其转换为 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();
上面的方法失败,计算数组中的元素数量、更改 SQL 字符串中的问号数量以及为数组中的每个元素调用 bind_parm 也失败。仅使用逗号分隔的字符串也会失败。
我在 Google 中找不到这方面的好文档,那么您是如何解决这个问题的?
最佳答案
不可能将可变长度列表绑定(bind)到单个绑定(bind)变量。
类似地,如果您要绑定(bind)字符串 $ids
您实际上最终会得到:
SELECT foo,blar FROM table WHERE id IN ('123,535,345,567,878')
(请注意 ID 列表周围的引号)。
使用正确数量的问号和绑定(bind)参数创建您自己的查询应该实际上有效 - 您可能需要再次尝试并报告实际错误。
或者,不幸的是,这可能是需要手工编写自己的 SQL 并且不使用绑定(bind)参数的情况之一。
关于php - 如何将 IN 子句与 mysqli 准备好的语句一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/772913/