在從 mysql_* 轉換到 PDO 的過程中,您可能會遇到缺少與 my_real_esqlscape_string 直接等效項的困境。
沒有直接等價物
從技術上講,有 PDO::quote(),但它的使用是有限的。真正的解決方案在於正確實現準備好的語句。
準備好的語句防止注入
PDO 與準備好的語句一起使用時,本質上可以防止 MySQL 注入,而無需需要額外的轉義。準備好的語句將輸入參數綁定到佔位符,防止惡意輸入被解釋為 SQL 指令。
範例:在PDO 中使用準備好的語句
以下程式碼示範了一個安全的資料庫使用預備語句進行查詢:
<code class="php"><?php $db = new \PDO("mysql:host=localhost;dbname=xxx;charset=utf8", "xxx", "xxx", [ PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ]); if ($_POST && isset($_POST['color'])) { $stmt = $db->prepare("SELECT id, name, color FROM Cars WHERE color = ?"); $stmt->execute(array($_POST['color'])); $cars = $stmt->fetchAll(\PDO::FETCH_ASSOC); var_dump($cars); } ?></code>
預備語句的好處
其他注意事項
結論
PDO 中的準備語句為資料庫查詢提供了強大且安全的機制,而不需要像 mysql_real_escape_string 這樣的函數。透過採用這種方法,您可以有效防止 SQL 注入並保持資料的完整性。
以上是如何取代 PDO: 準備好的語句中的 mysql_real_escape_string 作為解決方案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!