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>
Faedah Penyata Disediakan
Pertimbangan Tambahan
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!