Heim > Datenbank > MySQL-Tutorial > Warum schlagen meine PHP-MySQL-Einfügungen beim Umgang mit einfachen Anführungszeichen inkonsistent fehl?

Warum schlagen meine PHP-MySQL-Einfügungen beim Umgang mit einfachen Anführungszeichen inkonsistent fehl?

DDD
Freigeben: 2024-12-02 07:16:12
Original
763 Leute haben es durchsucht

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

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

  • Abfrage 1: Diese Abfrage funktioniert, ohne das einfache Anführungszeichen zu maskieren, da die PHP-Einstellung magic_quotes_gpc aktiviert ist. Diese Einstellung maskiert automatisch Zeichenfolgen, die aus Formulareingaben ($_GET, $_POST, $_COOKIES) stammen.
  • Abfrage 2: Wenn magic_quotes_gpc aktiviert ist, bleiben die gespeicherten Daten ohne Escapezeichen, was sie anfällig für Konflikte mit einfachen Anführungszeichen macht. Daher schlägt die Abfrage mit mysql_error() fehl, wenn ein einfaches Anführungszeichen auftritt.

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')");
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage