Einfache Anführungszeichen in PHP-MySQL-Einfügungen umgehen: Ein tieferer Einblick in die Abfrageausführung
Beim Einfügen von Daten in eine MySQL-Datenbank ist es wichtig, dies sicherzustellen der korrekte Umgang mit einfachen Anführungszeichen ('). Manchmal geraten Entwickler jedoch in eine unerklärliche Situation, in der eine Abfrage aufgrund eines einfachen Anführungszeichens in der zweiten Einfügung fehlschlägt, während die erste nahtlos erfolgreich ist.
In diesen Szenarien ist es wichtig, die möglichen Gründe für dieses inkonsistente Verhalten zu verstehen . Obwohl die in Formularen eingegebenen Informationen häufig als Zeichenfolgen dargestellt werden, ist es wichtig, Folgendes zu berücksichtigen:
Abfrageausführung und Magic Quotes
Escape mit mysql_real_escape_string()
Die Lösung liegt in der Verwendung von mysql_real_escape_string( )-Funktion, um alle Zeichenfolgen unabhängig von der magic_quotes_gpc-Einstellung entsprechend zu maskieren. Diese Funktion bereitet Zeichenfolgen für das Einfügen in MySQL vor und verhindert so, dass bösartige Zeichen die Datenbank stören. Durch die Integration dieser Funktion in beide Abfragen können die Inkonsistenzen behoben werden:
$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')");
Mit dieser Änderung funktionieren beide Abfragen korrekt, selbst wenn in den Daten einfache Anführungszeichen auftreten, wodurch konsistente Datenbankinteraktionen gewährleistet werden.
Das obige ist der detaillierte Inhalt vonWarum schlagen meine PHP-MySQL-Einfügungen beim Umgang mit einfachen Anführungszeichen inkonsistent fehl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!