如何使用mysqli prepare语句动态使用IN

时间:2015-08-07 18:59:11

标签: php mysqli prepared-statement

我试图使用IN与mysqli准备法则

   if output.find("No records were found that matched the search criteria") == -1:
TypeError: 'str' does not support the buffer interface

但上述方法无法获取任何结果集

1 个答案:

答案 0 :(得分:1)

占位符代表SINGLE值。如果您有一个变量和占位符使用查询:

$var = '1,2,3';
SELECT ... WHERE foo IN (?)

然后查询将按照SQL实际上

执行
SELECT ... WHERE foo IN ('1,2,3')

并且您的3个单独的csv值将被视为单个整体字符串。

IN子句是占位符有些无用的地方,因为你动态地建立了一个包含尽可能多的占位符的字符串,例如。

$vals = array(1,2,3);
$placeholders = '?' . str_repeat(',?', count($vals) - 1);


$stmt = $db->prepare("SELECT ... WHERE foo IN ($placeholders)");
foreach($vals as $i => $val) {
    $stmt->bind($i, $vals[$i]);
}

然后