問題:
嘗試使用以下方式將參數綁定到WHERE IN 子句時PDO,結果計數始終為1,這與手動插入未經參數化的值不同。造成這種差異的原因是什麼?
程式碼:
$myArray = implode($myArray, ','); $sth = $dbh->prepare('SELECT foo FROM bar WHERE ids IN (:ids)'); $sth->bindParam(':ids', $myArray); $sth->execute(); $result = $sth->fetch(); echo $sth->rowCount();
答案:
不幸的是,PHP 資料物件(PDO) 不支援直接綁定IN 子句參數。 $myArray 陣列被視為單一字串,類似於以下 SQL:
SELECT foo FROM bar WHERE ids IN ('1,2,3')
儘管存在多個逗號分隔值,資料庫仍將它們解釋為一個字串值。
為了實現所需的行為,必須將IN 子句手動插入到查詢中,如下所示:
'SELECT foo FROM bar WHERE ids IN (' . $myArray .')'
不幸的是,有目前沒有替代PDO 的IN 子句中的參數綁定機制。
以上是將參數綁定到 WHERE IN 子句時,為什麼 PDO 只回傳一行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!