首頁  >  文章  >  資料庫  >  如何使用 PDO 預先準備語句防止 MySQL 注入:是否存在與 mysql_real_escape_string() 等效的 PDO?

如何使用 PDO 預先準備語句防止 MySQL 注入:是否存在與 mysql_real_escape_string() 等效的 PDO?

DDD
DDD原創
2024-10-26 07:58:03922瀏覽

How to Prevent MySQL Injection with PDO Prepared Statements: Is There a PDO Equivalent to `mysql_real_escape_string()`?

mysql_real_escape_string() 的PDO 等效項

在從mysql_* 到PDO 的程式碼遷移中,您正在尋找等效項。然而,需要注意的是,PDO 中沒有直接等效的函數。

從技術上講,PDO::quote() 是存在的,但它並不常用,並且與 mysql_real_escape_string() 不具有可比性。

正確的 MySQL 注入預防

當適當地將 PDO 與準備好的語句一起使用時,您可以獲得針對 MySQL 注入的保護。準備好的語句可以清理您的輸入,無需使用 mysql_real_escape_string() 等函數。

使用準備好的語句的安全資料庫查詢範例

這是一個安全資料庫的範例使用PDO 準備好的語句進行查詢:

$db = new PDO(
    "mysql:host=localhost;dbname=xxx;charset=utf8",
    "xxx",
    "xxx",
    [
        PDO::ATTR_EMULATE_PREPARES => false,
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
    ]
);

// Prepared statement
$stmt = $db->prepare("SELECT id, name, color FROM Cars WHERE color = ?");

// Execute statement
$stmt->execute(array($_POST['color']));

// Fetch result
$cars = $stmt->fetchAll(PDO::FETCH_ASSOC);

如您所見,我們沒有轉義或清理$_POST['color'],但由於PDO 和準備好的語句。

附加說明

  • 為了安全起見,請務必在 DSN 中傳遞 charset=utf8。
  • 啟用 PDO 將錯誤顯示為異常為了更好的錯誤處理。
  • 對於過時的 MySQL 版本(

結論

使用上面示範的準備好的語句總是比訴諸 mysql_* 函數更安全。 PDO 的內建保護機制提供了更強大、更安全的方法來防止 MySQL 注入。

以上是如何使用 PDO 預先準備語句防止 MySQL 注入:是否存在與 mysql_real_escape_string() 等效的 PDO?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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