Rumah >pangkalan data >tutorial mysql >Mengapa Sisipan PHP MySQL Saya Gagal Secara Tidak Konsisten Semasa Mengendalikan Petikan Tunggal?

Mengapa Sisipan PHP MySQL Saya Gagal Secara Tidak Konsisten Semasa Mengendalikan Petikan Tunggal?

DDD
DDDasal
2024-12-02 07:16:12766semak imbas

Why Do My PHP MySQL Inserts Fail Inconsistently When Handling Single Quotes?

Melepaskan Petikan Tunggal dalam PHP MySQL Sisipan: Penyelaman Lebih Dalam ke dalam Pelaksanaan Pertanyaan

Semasa memasukkan data ke dalam pangkalan data MySQL, adalah penting untuk memastikan pengendalian yang betul bagi petikan tunggal ('). Walau bagaimanapun, kadangkala pembangun menghadapi situasi yang tidak dapat diterangkan di mana pertanyaan gagal disebabkan oleh petikan tunggal dalam sisipan kedua, manakala yang pertama berjaya dengan lancar.

Dalam senario ini, adalah penting untuk memahami kemungkinan sebab untuk tingkah laku tidak konsisten ini . Walaupun maklumat yang dimasukkan dalam borang sering diwakili sebagai rentetan, adalah penting untuk mempertimbangkan perkara berikut:

Pelaksanaan Pertanyaan dan Petikan Ajaib

  • Pertanyaan 1: Pertanyaan ini berfungsi tanpa melepaskan petikan tunggal kerana tetapan PHP magic_quotes_gpc dihidupkan. Tetapan ini secara automatik melepaskan rentetan yang diperoleh daripada input borang ($_GET, $_POST, $_COOKIES).
  • Pertanyaan 2: Apabila magic_quotes_gpc didayakan, data yang disimpan kekal tidak dilepaskan, menjadikannya terdedah kepada konflik dengan petikan tunggal. Oleh itu, pertanyaan gagal dengan mysql_error() apabila petikan tunggal ditemui.

Melepaskan diri dengan mysql_real_escape_string()

Penyelesaian terletak pada penggunaan mysql_string(real_escape ) berfungsi untuk melepaskan semua rentetan dengan sewajarnya tanpa mengira tetapan magic_quotes_gpc. Fungsi ini menyediakan rentetan untuk dimasukkan ke dalam MySQL, menghalang aksara berniat jahat daripada mengganggu pangkalan data. Dengan menggabungkan fungsi ini dalam kedua-dua pertanyaan, ketidakkonsistenan boleh diselesaikan:

$result = mysql_query("INSERT INTO job_log
(order_id, supplier_id, category_id, service_id, qty_ordered, customer_id, user_id, salesperson_ref, booking_ref, booking_name, address, suburb, postcode, state_id, region_id, email, phone, phone2, mobile, delivery_date, stock_taken, special_instructions, cost_price, cost_price_gst, sell_price, sell_price_gst, ext_sell_price, retail_customer, created, modified, log_status_id)
VALUES
('$order_id', '$supplier_id', '$category_id', '{$value['id']}', '{$value['qty']}', '$customer_id', '$user_id', '$salesperson_ref', '$booking_ref', '$booking_name', '$address', '$suburb', '$postcode', '$state_id', '$region_id', '" . mysql_real_escape_string($email) . "', '" . mysql_real_escape_string($phone) . "', '" . mysql_real_escape_string($phone2) . "', '" . mysql_real_escape_string($mobile) . "', STR_TO_DATE('$delivery_date', '%d/%m/%Y'), '$stock_taken', '" . mysql_real_escape_string($special_instructions) . "', '$cost_price', '$cost_price_gst', '$sell_price', '$sell_price_gst', '$ext_sell_price', '$retail_customer', '".date('Y-m-d H:i:s', time())."', '".date('Y-m-d H:i:s', time())."', '1')");

$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', '" . mysql_real_escape_string($row->primary_email) . "', '" . mysql_real_escape_string($row->secondary_email) . "', '" . mysql_real_escape_string($subject) . "', '" . mysql_real_escape_string($message_content) . "', '1')");

Dengan pengubahsuaian ini, kedua-dua pertanyaan akan beroperasi dengan betul walaupun apabila menemui petikan tunggal dalam data, memastikan interaksi pangkalan data yang konsisten.

Atas ialah kandungan terperinci Mengapa Sisipan PHP MySQL Saya Gagal Secara Tidak Konsisten Semasa Mengendalikan Petikan Tunggal?. 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