首頁 > 後端開發 > php教程 > 如何在 MySQL 中正確使用 LIMIT 和預先準備語句?

如何在 MySQL 中正確使用 LIMIT 和預先準備語句?

Linda Hamilton
發布: 2024-11-28 14:05:14
原創
628 人瀏覽過

How to Correctly Use LIMIT with Prepared Statements in MySQL?

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

MySQL 中的LIMIT 子句用於限制SELECT 查詢傳回的行數。但是,在將 LIMIT 與預準備語句 (PDO) 結合使用時,如果使用者以字串形式提供參數值,則可能會遇到問題。

問題識別:

發生錯誤因為PDO的execute()方法自動將所有參數視為字串,而不管它們的實際資料類型如何。如果 LIMIT 子句中需要數字值,這可能會導致解析錯誤。

例如,以下查詢將失敗並出現解析錯誤:

SELECT id, content, date
FROM comment
WHERE post = ?
ORDER BY date DESC
LIMIT ?, ?
登入後複製

如果參數($min和$max) 作為字串傳遞,產生的SQL 語句將是:

LIMIT '0', '10'
登入後複製

這是MySQL 中的無效語法,因為LIMIT的值應該是

解:

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

  1. 一一綁定參數:

將參數明確綁定到語句,指定它們的各自的資料類型:

$comments->bindParam(1, $post, PDO::PARAM_STR);
$comments->bindParam(2, $min, PDO::PARAM_INT);
$comments->bindParam(3, $min, PDO::PARAM_INT);
登入後複製
  1. 不傳遞參數:

不要將LIMIT的值作為參數傳遞,而是手動將它們附加到查詢字串:

$query = sprintf('SELECT id, content, date
    FROM comment
    WHERE post = ?
    ORDER BY date DESC
    LIMIT %d, %d', $min, $max);
登入後複製
  1. 停用模擬準備:

MySQL 驅動程式具有在準備好的語句中引用數字參數的功能。可以透過將 ATTR_EMULATE_PREPARES 屬性設為 FALSE 來停用此功能:

$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE);
登入後複製

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板