Rumah > pangkalan data > tutorial mysql > Bagaimana Saya Boleh Mencegah Ralat MySQL Disebabkan oleh Petikan Tunggal dalam Rentetan PHP?

Bagaimana Saya Boleh Mencegah Ralat MySQL Disebabkan oleh Petikan Tunggal dalam Rentetan PHP?

DDD
Lepaskan: 2024-12-07 11:11:13
asal
572 orang telah melayarinya

How Can I Prevent MySQL Errors Caused by Single Quotes in PHP Strings?

Melepaskan Petikan Tunggal dalam MySQL dengan PHP

Pertimbangkan senario berikut di mana dua pernyataan SQL digunakan untuk memanipulasi data. Penyataan pertama memasukkan maklumat daripada borang ke dalam pangkalan data, manakala pernyataan kedua mendapatkan semula data daripada pangkalan data, menghantar e-mel dan mencatat butiran transaksi.

Pengenalpastian Masalah

Isu ini timbul apabila pernyataan kedua menghadapi ralat disebabkan petikan tunggal dalam medan nama, seperti "O'Brien." Walaupun penyataan pertama berfungsi dengan betul tanpa melepaskan watak ini, penyataan kedua mencetuskan ralat MySQL. Perbezaan ini boleh menyebabkan kekeliruan.

Punca Punca

Untuk menangani isu ini, adalah penting untuk mengetahui bahawa rentetan dalam PHP harus dilepaskan sebelum memasukkannya ke dalam pertanyaan MySQL . PHP menawarkan fungsi mysql_real_escape_string() yang melepaskan diri dari rentetan ini dengan berkesan, memastikan pemasukan dan pencegahan ralat yang betul.

Kesan Petikan Ajaib

Gelagat yang berbeza antara kedua-dua SQL kenyataan boleh dikaitkan dengan potensi pengaktifan ciri magic_quotes_gpc PHP. Ciri ini secara automatik melepaskan rentetan yang diperoleh daripada penyerahan borang (cth., $_POST), jadi rentetan "O'Brien" diubah menjadi "O'Brien."

Apabila data disimpan dan kemudiannya diambil semula, pangkalan data tidak melakukan sebarang pelarian automatik. Oleh itu, rentetan "O'Brien" yang diperolehi mengandungi petikan tunggal yang tidak dapat dilepaskan, memerlukan pelarian yang betul dengan mysql_real_escape_string() apabila digunakan dalam pertanyaan untuk mengelakkan ralat.

Melepaskan Pertimbangan

Adalah penting untuk melepaskan setiap rentetan yang digunakan dalam pernyataan SQL, seperti yang ditunjukkan dalam yang berikut contoh yang disemak:

$query = mysql_query("INSERT INTO message_log
(order_id, timestamp, message_type, email_from, supplier_id, primary_contact, secondary_contact, subject, message_content, status)
VALUES
('$order_id', '".date('Y-m-d H:i:s', time())."', '$email', '$from', '$row->supplier_id', '$row->primary_email' ,'$row->secondary_email', '$subject', '".mysql_real_escape_string($message_content)."', '1')");
Salin selepas log masuk

Dengan menggunakan mekanisme melarikan diri ini secara konsisten, pembangun boleh menghalang ralat MySQL yang disebabkan oleh petikan tunggal yang tidak dijangka dalam rentetan dengan berkesan.

Atas ialah kandungan terperinci Bagaimana Saya Boleh Mencegah Ralat MySQL Disebabkan oleh Petikan Tunggal dalam Rentetan PHP?. 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