在PHP 中,使用PDO 來執行帶有參數數組和LIMIT 子句的資料庫查詢可能會帶子句來挑戰。讓我們探討一下如何有效地解決這種情況。
背景:
嘗試使用 LIMIT 子句執行查詢,同時利用陣列將參數傳遞給 PDOStatement 時,會出現此問題。預設情況下,LIMIT子句中的:limit1和:limit2佔位符如果使用bindParam()進行綁定,則無法正常發揮作用。
解決方案:
解決的關鍵此問題是停用預設的 PDO::ATTR_EMULATE_PREPARES 設定。啟用此設定後,PHP 會模擬準備好的語句,而不是真正使用它們。這意味著佔位符 (:limit1、:limit2) 不會被解釋為參數,從而導致觀察到的行為。
程式碼片段:
要解決此問題,請新增以下內容執行查詢之前的程式碼:
<code class="php">$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);</code>
這將停用預先準備語句模擬,讓您在有效利用LIMIT 子句的同時透過陣列傳遞參數。
<code class="php">$sql = "SELECT * FROM table WHERE id LIKE CONCAT('%', :id, '%') LIMIT :limit1, :limit2"; $stmt = $pdo->prepare($sql); $stmt->execute(array(5));</code>
額外效能注意事項:
停用 PDO::ATTR_EMULATE_PREPARES 可能會影響效能。準備好的語句通常比模擬語句更有效。但是,如果您遇到參數傳遞或 LIMIT 子句的問題,停用模擬可能是必要的權衡。
進一步閱讀:
了解更多深入資訊關於此主題,請參閱以下資源:
以上是如何在 PDO 中有效地使用帶有 LIMIT 子句的陣列參數的詳細內容。更多資訊請關注PHP中文網其他相關文章!