Rumah >pangkalan data >tutorial mysql >Mengapa Sisipan PHP MySQL Saya Gagal Secara Tidak Konsisten Semasa Mengendalikan Petikan Tunggal?
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
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!