首頁  >  文章  >  後端開發  >  為什麼 LIMIT 不能與 MySQL 中的預先準備語句一起使用?

為什麼 LIMIT 不能與 MySQL 中的預先準備語句一起使用?

Barbara Streisand
Barbara Streisand原創
2024-11-26 19:27:10797瀏覽

Why Doesn't LIMIT Work with Prepared Statements in MySQL?

MySQL 中預先準備語句的LIMIT 關鍵字

此問題解決了使用預備語句時LIMIT 子句無法如預期運作的問題使用MySQL 中的PDO 函式庫。

在提供的程式碼中snippet:

<pre class="brush:php;toolbar:false">
$comments = $db->prepare($query); 
/* where $db is the PDO object */ 
$comments->execute(array($post, $min, $max)); 

PDOStatement::execute 方法將參數 $min 和 $max 視為字串。因此,最終的 SQL 語句變成:

LIMIT '0', '10'

,這會導致語法錯誤,因為 MySQL 需要 LIMIT 子句的數值。

可能的解決方案:

要解決此問題,請考慮以下事項options:

  • 手動綁定參數:

    • 使用bindParam每個參數與適當的類型綁定。
    • For範例: $comments->bindParam(2, $min, PDO::PARAM_INT);
  • 使用字串插值:

    • 將$min 和$max數值直接嵌入查詢字串使用sprintf.
    • 範例:

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

    • 停用模擬準備:
    設定PDO::ATTR_EMULATE_PREPARES 屬性設定為 FALSE,以防止 MySQL 引用數字參數。
示例: $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE);


注意:這些方法將使您能夠正確使用LIMIT 子句和準備好的語句。

以上是為什麼 LIMIT 不能與 MySQL 中的預先準備語句一起使用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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