簡體   English   中英

MYSQL - 具有多個IN子句的PDO

[英]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));

還有這個:

http://php.net/manual/en/pdo.prepare.php

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM