Bagaimana untuk Menggantikan mysql_real_escape_string dalam PDO: Penyata Disediakan sebagai Penyelesaian?

DDD
Lepaskan: 2024-10-26 05:05:02
asal
696 orang telah melayarinya

How to Replace mysql_real_escape_string in PDO: Prepared Statements as the Solution?

Menggantikan mysql_real_escape_string dalam PDO

Dalam proses peralihan daripada mysql_* kepada PDO, anda mungkin menghadapi dilema dengan ketiadaan setara langsung dengan mysql_real_escape_string.

Tiada Setara Langsung

Secara teknikal, terdapat PDO::quote(), tetapi penggunaannya adalah terhad. Penyelesaian sebenar terletak pada pelaksanaan yang betul bagi pernyataan yang disediakan.

Pernyataan Disediakan Lindungi terhadap Suntikan

PDO, apabila digunakan dengan pernyataan yang disediakan, secara semula jadi melindungi daripada suntikan MySQL tanpa keperluan untuk melarikan diri tambahan. Penyata yang disediakan mengikat parameter input kepada ruang letak, menghalang input berniat jahat daripada ditafsirkan sebagai arahan SQL.

Contoh: Menggunakan Penyata Disediakan dalam PDO

Kod berikut menunjukkan pangkalan data yang selamat pertanyaan menggunakan pernyataan yang disediakan:

<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>
Salin selepas log masuk

Faedah Penyata Disediakan

  • Meloloskan diri secara automatik dari input
  • Pencegahan suntikan SQL
  • Keselamatan dan prestasi yang dipertingkatkan

Pertimbangan Tambahan

  • Gunakan charset=utf8 dalam atribut DSN untuk keselamatan tambahan.
  • Dayakan pengecualian PDO (PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION) untuk pengendalian ralat.
  • Pertimbangkan langkah tambahan apabila menggunakan versi MySQL yang lapuk (mysql < 5.3.6).

Kesimpulan

Penyata yang disediakan dalam PDO menyediakan mekanisme yang teguh dan selamat untuk pertanyaan pangkalan data tanpa memerlukan fungsi seperti mysql_real_escape_string. Dengan menerima pendekatan ini, anda boleh menghalang suntikan SQL dengan berkesan dan mengekalkan integriti data anda.

Atas ialah kandungan terperinci Bagaimana untuk Menggantikan mysql_real_escape_string dalam PDO: Penyata Disediakan sebagai Penyelesaian?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!