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

时间:2018-03-31 00:58:14

标签: php mysql mysqli

使用MySQLi我想准备,执行并从带有IN函数的SQL语句中获取结果,例如:

SELECT id FROM records WHERE isbn IN ( 'aaa', 'bbb', 'ccc' );

IN的参数实际上是动态的,因此它们将在一个数组中,每次运行的长度不同。

对于一次运行,假设数组是:

$list = array('aaa', 'bbb', 'ccc');

所以准备好的陈述必须看起来像这样,有三个问号:

SELECT id FROM records WHERE isbn IN ( ?, ?, ? );

以下是我所拥有的:

$question_marks = str_repeat('?, ', count($list));
$question_marks = preg_replace('/, $/', '', $question_marks);

$stmt = $linkID->prepare("SELECT id FROM records WHERE isbn IN ($question_marks)");

$types = str_repeat('s', count($list));

$stmt->bind_param($types, $list); // this is not working (error below)

我得到的错误是:

  

mysqli_stmt :: bind_param():类型定义字符串中的元素数量与绑定变量的数量不匹配

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

1 个答案:

答案 0 :(得分:1)

使用PHP 5.6,您可以在unpacking Operator...$var)的帮助下轻松完成此操作,并使用get_result()代替bind_result()

$stmt->bind_param($types, ...$list);
$stmt->get_result();