PHP 使用 IN 和 WHERE 运算符的 PDO 准备语句

PHP PDO Prepared Statements with IN and WHERE Operators

我是 PDO 的新手(来自 mysqli),我已经搜索了几个小时,但似乎无法弄清楚如何将 WHERE 和 IN 运算符与 PDO 准备好的语句结合起来。

简单的 WHERE(工作正常):

$value1 = 'val1';
$value2 = 'val2';
$stmt = $pdo->prepare('SELECT * FROM mytable WHERE val1 = ? AND val2 = ?');
$stmt->bindParam(1, $value1);
$stmt->bindParam(2, $value2);
$stmt->execute();

IN 语句(工作正常)

$myArr = ['NY', 'PARIS', 'ROME'];
$q  = str_repeat('?,', count($myArr) - 1) . '?';
$sql = "SELECT * FROM myTable WHERE cities IN ($q)";
$stmt = $db->prepare($sql);
$stmt->execute($myArr);

合并(无效):

$value1 = 'val1';
$myArr = ['NY', 'PARIS', 'ROME'];
$q  = str_repeat('?,', count($myArr) - 1) . '?';
$sql = "SELECT * FROM myTable WHERE column = ? AND cities IN ($q)";
$stmt = $db->prepare($sql);
$stmt->bindParam(1, $value1);
$stmt->execute($myArr);

提前致谢!

我认为这不起作用的原因是您同时使用了两者

$stmt->bindParam(1, $value1); $stmt->execute($myArr);

要使用数组并使其工作,请执行以下操作:

prepare($sql);

execute($myArr);

$myArr 中,你应该包含任何 columns = ? 应该是的东西,你可以使用 array_unshift() 将其添加到数组的开头,就像这样 array_unshift($myArr, 'X'); http://php.net/manual/en/function.array-unshift.php

调用 array_unshift() 后,变量 $myArr 的值如下:

[myArr] => Array
        (
            [0] => X
            [1] => NY
            [2] => PARIS
            [3] => ROME
        )

现在可以正确调用PDO语句了:

prepare($sql);
execute($myArr);