Rumah  >  Artikel  >  pangkalan data  >  Cara Mencegah Suntikan MySQL dengan Penyata Disediakan PDO: Adakah Terdapat PDO Bersamaan dengan `mysql_real_escape_string()`?

Cara Mencegah Suntikan MySQL dengan Penyata Disediakan PDO: Adakah Terdapat PDO Bersamaan dengan `mysql_real_escape_string()`?

DDD
DDDasal
2024-10-26 07:58:03922semak imbas

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

PDO Setara dengan mysql_real_escape_string()

Dalam pemindahan kod anda dari mysql_* ke PDO, anda sedang mencari yang setara untuk mysql_string(real_escape). Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa tiada persamaan langsung dalam PDO.

Secara teknikal, PDO::quote() wujud, tetapi ia tidak biasa digunakan dan tidak setanding dengan mysql_real_escape_string().

Pencegahan Suntikan MySQL yang Betul

Apabila menggunakan PDO dengan sewajarnya dengan pernyataan yang disediakan, anda mendapat perlindungan daripada suntikan MySQL. Penyata yang disediakan membersihkan input anda, menghapuskan keperluan untuk fungsi seperti mysql_real_escape_string().

Contoh Pertanyaan Pangkalan Data Selamat menggunakan Penyata Disediakan

Berikut ialah contoh pangkalan data selamat pertanyaan menggunakan pernyataan yang disediakan 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);

Seperti yang anda lihat, kami tidak melarikan diri atau membersihkan $_POST['color'], namun kod tersebut kekal selamat daripada suntikan MySQL terima kasih kepada PDO dan kuasa kenyataan yang disediakan.

Nota Tambahan

  • Sentiasa lulus charset=utf8 dalam DSN anda untuk keselamatan.
  • Dayakan PDO untuk memaparkan ralat sebagai pengecualian untuk pengendalian ralat yang lebih baik.
  • Untuk versi MySQL yang lapuk (<= 5.3.6), langkah berjaga-jaga tambahan mungkin diperlukan untuk pencegahan suntikan MySQL.

Kesimpulan

Menggunakan pernyataan yang disediakan seperti yang ditunjukkan di atas sentiasa lebih selamat daripada menggunakan fungsi mysql_*. Mekanisme perlindungan terbina dalam PDO menyediakan pendekatan yang lebih mantap dan selamat untuk mencegah suntikan MySQL.

Atas ialah kandungan terperinci Cara Mencegah Suntikan MySQL dengan Penyata Disediakan PDO: Adakah Terdapat PDO Bersamaan dengan `mysql_real_escape_string()`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn