首頁 >後端開發 >php教程 >如何在具有 PDO 的 MySQL 準備語句中正確使用 LIMIT?

如何在具有 PDO 的 MySQL 準備語句中正確使用 LIMIT?

DDD
DDD原創
2024-11-27 15:57:14938瀏覽

How to Correctly Use LIMIT in MySQL Prepared Statements with PDO?

在MySQL 準備語句中使用LIMIT 關鍵字

在MySQL 中使用PDO 準備語句時,您可能會遇到LIMIT 關鍵字的問題。以下查詢:

SELECT id, content, date
FROM comment
WHERE post = ?
ORDER BY date DESC
LIMIT ?, ?

不適用於 PDO 準備好的語句,而將其更改為 LIMIT 0, 10 則可以。這個問題的根源在於 PDO 處理參數的方式。

PDO 參數綁定

PDOStatement::execute() 預設將所有輸入參數視為字串。因此,LIMIT 子句中的參數 $min 和 $max 將作為字串插入。然後 MySQL 會將查詢解析為:

LIMIT '0', '10'

導致解析錯誤。

有多種方法可以解決此問題:

  • 單獨綁定參數:指定參數使用bindParam()的每個參數的類型:
$comments->bindParam(1, $post, PDO::PARAM_STR);
$comments->bindParam(2, $min, PDO::PARAM_INT);
$comments->bindParam(3, $max, PDO::PARAM_INT);
  • 從查詢中排除參數:從查詢中刪除$min和$max參數並指定它們作為查詢:
$query = sprintf('SELECT id, content, date
    FROM comment
    WHERE post = ?
    ORDER BY date DESC
    LIMIT %d, %d', $min, $max);
  • 禁用模擬準備:在MySQL 驅動程式中停用模擬準備:
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE);

透過實作一個在這些解決方案中,您可以成功地將 LIMIT 關鍵字與 MySQL 中的預備語句結合使用。

以上是如何在具有 PDO 的 MySQL 準備語句中正確使用 LIMIT?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn