在 PHP 中,使用 PDO 執行具有參數陣列和 LIMIT 子句的資料庫查詢可能會帶來挑戰。讓我們探討一下如何有效地解決這種情況。
背景:
在利用陣列將參數傳遞給 PDO 語句時嘗試使用 LIMIT 子句執行查詢時會出現此問題。預設情況下,LIMIT子句中的:limit1和:limit2佔位符如果使用bindParam()進行綁定,則不會發揮預期作用。
解決方案:
解決的關鍵此問題是停用預設的 PDO::ATTR_EMULATE_PREPARES 設定。啟用此設定後,PHP 會模擬準備好的語句,而不是真正使用它們。這意味著佔位符 (:limit1、:limit2) 不會被解釋為參數,從而導致觀察到的行為。
程式碼片段:
要解決此問題,請新增下列內容執行查詢之前的程式碼:
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
這將停用預先準備語句模擬,讓您透過陣列傳遞參數有效利用LIMIT 子句。
$sql = "SELECT * FROM table WHERE id LIKE CONCAT('%', :id, '%')
LIMIT :limit1, :limit2";
$stmt = $pdo->prepare($sql);
$stmt->execute(array(5));
其他效能注意事項:
停用 PDO::ATTR_EMULATE_PREPARES 可能會影響效能。準備好的語句通常比模擬語句更有效。但是,如果您遇到參數傳遞或 LIMIT 子句的問題,則停用模擬可能是必要的權衡。
進一步閱讀:
以了解更多深入資訊關於此主題,請參閱以下資源:
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3