[英]php pdo binding multiple values issue
我在php中有以下代碼,根據客戶端發送的數組查詢數據庫。
$limit = $_POST['limit'];
$userArray = json_decode($_POST['arr'], true);
$queryPlaceholders= implode(',', array_fill(0,count($userArray), '?'));
$stmt = $db->prepare("SELECT * FROM tableA
WHERE tableA.id IN (".$queryPlaceholders.")
LIMIT ?");
foreach($userArray as $k => $val){
$stmt->bindParam(($k+1), $val);
}
$stmt->bindValue(count($userArray) + 1, (int)trim($limit), PDO::PARAM_INT);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo $result;
此代碼似乎有錯誤。 如果我發送一個包含值11和17的數組,則查詢似乎只運行值17,而不是11和17。
如果我print_r($userArray)
我得到Array ( [0] => 11 [1] => 17 )
所以我知道php有正確的數組。 但是,使用上面的代碼運行此查詢,並在下面運行查詢會產生不同的答案:
SELECT * FROM tableA
WHERE tableA.id IN (11,17)
LIMIT 10
運行上面的代碼時,它似乎實際運行此查詢?
SELECT * FROM tableA
WHERE tableA.id IN (17)
LIMIT 10
我還在foreach
循環中放置了語句,告訴我數組(11和17)的兩個元素都綁定到$ stmt
問題是您使用的是bindParam()
:
將PHP變量綁定到用於准備語句的SQL語句中的相應命名或問號占位符。 與
PDOStatement::bindValue()
,變量被綁定為引用,並且僅在調用PDOStatement::execute()
時進行計算。
由於$val
在foreach
循環的每次迭代中都會更改,因此最終執行查詢時,每個占位符最終都是相同的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.