Einfache Anführungszeichen in MySQL mit PHP umgehen
Stellen Sie sich das folgende Szenario vor, in dem zwei SQL-Anweisungen zum Bearbeiten von Daten verwendet werden. Die erste Anweisung fügt Informationen aus einem Formular in eine Datenbank ein, während die zweite Anweisung Daten aus der Datenbank abruft, eine E-Mail sendet und Transaktionsdetails protokolliert.
Problemidentifizierung
Das Problem tritt auf, wenn in der zweiten Anweisung aufgrund eines einfachen Anführungszeichens in einem Namensfeld, z. B. „O'Brien“, ein Fehler auftritt. Während die erste Anweisung ordnungsgemäß funktioniert, ohne dieses Zeichen zu maskieren, löst die zweite Anweisung einen MySQL-Fehler aus. Diese Ungleichheit kann zu Verwirrung führen.
Grundursache
Um dieses Problem zu beheben, ist es wichtig zu erkennen, dass Zeichenfolgen in PHP mit Escapezeichen versehen werden sollten, bevor sie in MySQL-Abfragen eingefügt werden . PHP bietet die Funktion mysql_real_escape_string(), die diese Zeichenfolgen effektiv maskiert und so eine ordnungsgemäße Einfügung und Fehlervermeidung gewährleistet.
Die Auswirkung von Magic Quotes
Das unterschiedliche Verhalten zwischen den beiden SQL -Anweisungen können auf die mögliche Aktivierung der PHP-Funktion magic_quotes_gpc zurückgeführt werden. Diese Funktion maskiert automatisch Zeichenfolgen, die aus Formularübermittlungen übernommen wurden (z. B. $_POST), sodass die Zeichenfolge „O'Brien“ in „O'Brien“ umgewandelt wird.
Wenn die Daten gespeichert und anschließend abgerufen werden, wird die Datenbank führt kein automatisches Escapen durch. Daher enthält die abgerufene Zeichenfolge „O'Brien“ das einfache Anführungszeichen ohne Escapezeichen, was bei Verwendung in Abfragen ein ordnungsgemäßes Escapen mit mysql_real_escape_string() erfordert, um Fehler zu vermeiden.
Überlegungen zum Escapen
Es ist wichtig, jede in SQL-Anweisungen verwendete Zeichenfolge zu maskieren, wie in der folgenden Überarbeitung gezeigt Beispiel:
$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', '$row->primary_email' ,'$row->secondary_email', '$subject', '".mysql_real_escape_string($message_content)."', '1')");
Durch die konsequente Anwendung dieses Escape-Mechanismus können Entwickler MySQL-Fehler wirksam verhindern, die durch unerwartete einfache Anführungszeichen in Zeichenfolgen verursacht werden.
Das obige ist der detaillierte Inhalt vonWie kann ich MySQL-Fehler verhindern, die durch einfache Anführungszeichen in PHP-Strings verursacht werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!