簡體   English   中英

php pdo綁定多個值問題

[英]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()時進行計算。

由於$valforeach循環的每次迭代中都會更改,因此最終執行查詢時,每個占位符最終都是相同的。

暫無
暫無

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

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