Das Problem verstehen
Beim Versuch, Daten mit PHP in MySQL einzufügen , kann ein einzelnes Anführungszeichen einen Fehler in nachfolgenden Abfragen verursachen, die auf die eingefügten Daten zugreifen. Obwohl die erste Abfrage korrekt zu funktionieren scheint, führt die zweite Abfrage zu einem MySQL-Fehler, wenn die Daten ein einfaches Anführungszeichen enthalten.
Das Problem lösen
Die Lösung ist: Escapezeichen für einfache Anführungszeichen in den eingefügten Zeichenfolgen mithilfe der Funktion mysql_real_escape_string(). Diese Funktion ersetzt einfache Anführungszeichen durch ihre maskierten Gegenstücke (') und stellt so sicher, dass sie als Literalzeichen und nicht als Teil der Abfragesyntax interpretiert werden.
Grund für die Ungleichheit
Der Grund dafür, dass sich die beiden Abfragen unterschiedlich verhalten, liegt wahrscheinlich in der Einstellung des Konfigurationsparameters magic_quotes_gpc. Wenn diese Einstellung aktiviert ist, werden von $_GET, $_POST und $_COOKIES erhaltene Zeichenfolgen automatisch mit Escapezeichen versehen, einschließlich einfacher Anführungszeichen.
Sobald die Daten jedoch in der Datenbank gespeichert und erneut abgerufen wurden, ist dies nicht der Fall automatisch entkommen. Wenn die zweite Abfrage versucht, auf die Daten zuzugreifen, stößt sie daher auf einfache Anführungszeichen, die nicht maskiert sind, und löst einen Fehler aus.
Überarbeitete Abfragen
Um das Problem zu beheben, Escapen Sie die einfachen Anführungszeichen in beiden Abfragen mit mysql_real_escape_string():
$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', mysql_real_escape_string('$booking_name'), mysql_real_escape_string('$address'), mysql_real_escape_string('$suburb'), mysql_real_escape_string('$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', mysql_real_escape_string('$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')");
By Durch die Umgehung der einfachen Anführungszeichen verarbeiten beide Abfragen nun Daten, die einfache Anführungszeichen enthalten, korrekt, ohne MySQL-Fehler zu verursachen.
Das obige ist der detaillierte Inhalt vonWie kann ich einfache Anführungszeichen in PHP richtig umgehen, um MySQL-Abfragefehler zu verhindern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!