使用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?
答案 0 :(得分:1)
使用PHP 5.6,您可以在unpacking Operator(...$var
)的帮助下轻松完成此操作,并使用get_result()代替bind_result()。
$stmt->bind_param($types, ...$list);
$stmt->get_result();