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);
我是 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);