[英]MYSQL - PDO with multiple IN clause
我可以使用以下代碼在PDO預處理語句中成功實現IN子句。
in_array = array(1,2,3);
$in = str_repeat('?,', count($in_array) - 1) . '?';
$sql = "SELECT * FROM my_table WHERE my_value IN ($in)";
$stm = $db->prepare($sql);
$stm->execute($in_array);
$data = $stm->fetchAll();
如何為多個$ in做同樣的事情? 例如,我沒有成功嘗試以下方法:
in_array1 = array(1,2,3);
$in1 = str_repeat('?,', count($in_array) - 1) . '?';
in_array2 = array(4,5,1);
$in2 = str_repeat('?,', count($in_array) - 1) . '?';
$sql = "SELECT * FROM my_table WHERE (my_value1 IN ($in1)) AND (my_value2 IN ($in2))";
$stm = $db->prepare($sql);
$stm->execute($in_array1,$in_array2);
$data = $stm->fetchAll();
我認為它與stm->執行有關但不確定,幫助贊賞
您當前的查詢結果為
SELECT * FROM my_table WHERE (my_value1 IN (?,?,?)) AND (my_value2 IN (?,?,?))
因此,您的execute
用法不正確, http://php.net/manual/en/pdostatement.execute.php 。 它應該只傳遞一個包含值的數組。
一個值數組,其元素與正在執行的SQL語句中的綁定參數一樣多。 所有值都被視為PDO :: PARAM_STR。
我認為使用array_merge, http: //php.net/manual/en/function.array-merge.php,可以讓你完成你正在嘗試的
$stm->execute(array_merge($in_array1,$in_array2));
這樣執行就相當於
$stm->execute(array(1,2,3,4,5,1));
這可能看起來不正確,因為數組配對現在已經消失,但占位符1(第一個問號)將映射到1
,占位符4到4
,依此類推。
沒有意義。 看這個:
$query = $db->prepare("SELECT * FROM table WHERE value1 = ? AND value2 = ?");
$query ->execute(array($value1, $value2));
還有這個:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.