php - 如何将 IN 子句与 mysqli 准备好的语句一起使用

标签 php mysqli sql-in

我正在使用准备好的语句将一些旧代码移动到新的 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/

相关文章:

sql - "select ... where in"相等并加入

ssis - 通过 SSIS 的 DB2 中的 WHERE 列 IN 参数

php - docker + xdebug + 原子 : Breakpoints won't fire

PHP - mPDF 设置分辨率

php - 插入、获取id、同时插入

PHP + MySql + 存储过程,如何访问 "out"值?

sql - 重写大型 IN 子句的最有效方法是什么?

php - 表的 FMDB 结果到 JSON 对象,遵循列的顺序。

php - jquery tokeninput 插件错误为 "TypeError: term is undefined"

php - 如何将数组中包含的参数列表传递给bind_param?