Heim > Artikel > Backend-Entwicklung > Wie vermeide ich MySQL-Fehler beim Einfügen von Daten mit einfachen Anführungszeichen in PHP?
Hintergrund:
Bei MySQL-Abfragen werden Zeichenfolgen verwendet, die Sonderzeichen enthalten können. wie einfache Anführungszeichen. Diese Sonderzeichen müssen maskiert werden, um zu verhindern, dass MySQL sie als Teil der Abfrage falsch interpretiert.
Problem:
Ein Entwickler stößt auf ein Problem beim Einfügen von Daten in eine MySQL-Datenbank schlägt aufgrund eines einfachen Anführungszeichens fehl und löst einen MySQL-Fehler aus. Das Problem tritt bei einer zweiten Abfrage auf, bei der Daten aus der Datenbank abgerufen und in einer E-Mail-Vorlage verwendet werden.
Ursache und Lösung:
Der Schuldige ist das Fehlen angemessener Informationen Escapezeichen beim Einfügen von Daten in MySQL. Die zweite Abfrage ruft Daten aus der Datenbank ab, die einfache Anführungszeichen enthalten können. Diese einfachen Anführungszeichen werden bei Verwendung in der E-Mail-Vorlage nicht maskiert, was zum MySQL-Fehler führt.
Um dieses Problem zu beheben, verwenden Sie mysql_real_escape_string(), um alle Zeichenfolgen zu maskieren, bevor Sie sie in MySQL einfügen. Diese Funktion maskiert Sonderzeichen, einschließlich einfacher Anführungszeichen. Durch die Verwendung dieser Funktion funktionieren beide Abfragen korrekt, unabhängig davon, ob in den Daten einfache Anführungszeichen vorhanden sind.
<code class="php">$escaped_order_id = mysql_real_escape_string($order_id); $escaped_message_content = mysql_real_escape_string($message_content); $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 ('$escaped_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', '$email', '$phone', '$phone2', '$mobile', STR_TO_DATE('$delivery_date', '%d/%m/%Y'), '$stock_taken', '$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 ('$escaped_order_id', '".date('Y-m-d H:i:s', time())."', '$email', '$from', '$row->supplier_id', '$row->primary_email' ,'$row->secondary_email', '$subject', '$escaped_message_content', '1')");</code>
Das obige ist der detaillierte Inhalt vonWie vermeide ich MySQL-Fehler beim Einfügen von Daten mit einfachen Anführungszeichen in PHP?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!