Heim > Datenbank > MySQL-Tutorial > Wie kann ich einfache Anführungszeichen in PHP richtig umgehen, um MySQL-Abfragefehler zu verhindern?

Wie kann ich einfache Anführungszeichen in PHP richtig umgehen, um MySQL-Abfragefehler zu verhindern?

Barbara Streisand
Freigeben: 2024-12-18 16:51:10
Original
801 Leute haben es durchsucht

How Can I Properly Escape Single Quotes in PHP to Prevent MySQL Query Errors?

Einfache Anführungszeichen in PHP für MySQL-Abfragen maskieren

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

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!

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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage