2016-08-30 2 views
1

Beim Einfügen von Namen in eine Kundendatenbank habe ich die MySQLi-Funktion real_escape_string verwendet, um die Daten zu bereinigen. Beispiel für einen Eintrag mit einem einfachen Anführungszeichen sieht nun wie folgt aus:Abfrage nach gesäuberten einfachen Anführungszeichen in der MySQL-Datenbank.

Baker\'s Pharmacy 

aber wenn ich versuche, für den Namen abfragen mit einer Abfrage wie:

$search = "Baker's Pharmacy"; 
$searchName = $db->real_escape_string($search); 
$query = "SELECT Name FROM Customers WHERE Name = '$searchName'"; 

ich keine Treffer zurückgeben, was die richtige ist Möglichkeit, nach einfachen Anführungszeichen zu suchen?

Jede Hilfe wird sehr geschätzt!

+0

versuchen '$ search =" Bäcker \ 's Apotheke ";' und nicht 'real_escape_string' – JustOnUnderMillions

+2

Die * korrekte * Weg wäre, die tatsächlichen Daten und nicht eine modifizierte Version der Daten zu speichern, und suchen die tatsächlichen Daten, nach denen Sie suchen. Sie sollten Abfrageparameter verwenden, um Eingaben als Werte zu behandeln, anstatt Eingaben manuell zu bereinigen, bevor sie als Code ausgeführt werden. – David

+1

Es sollte "Baker's Pharmacy" ohne Schrägstriche sein. Es scheint, dass Sie Ihre Daten zweimal entkamen. –

Antwort

3

Es gibt zwei falsche Annahmen, die geklärt werden müssen.

  1. Unabhängig *escape_string Funktion nicht sanieren nichts. Das ist nur ein ekliges Gerücht, dass PHP-Leute besser sind, endlich loszuwerden.
  2. Wie auch immer, mit dieser Funktion formatieren Sie Ihre Daten nicht für eine Datenbank, sondern nur für die SQL-Abfrage. Alle Schrägstriche werden von einer Datenbank entfernt und die Daten werden unverändert gespeichert.

Statt „Hygienisierung“ Sie mysqli vorbereitete Anweisungen für beide Einsatz verwenden und Abfragen auswählen, und Sie werden ein einziges Problem zu Anführungszeichen im Zusammenhang sehen nicht (es sei denn, es magic_quotes oder ihre selbstgebrauten äquivalent sind, rumhängen).

+0

Ich verwende sowohl vorbereitete Abfragen als auch esacpe_string für die Dateneingabe, um den umgekehrten Schrägstrich in der Datenbank zu erklären. Gibt es eine Abfrage, die ich ausführen kann, um die vorhandenen Schrägstriche aus der Datenbank zu entfernen, da zu viele manuell entfernt werden müssen. –

+0

Nun, das ist der Fall. esacpe_string ist hier überflüssig und die Ursache Ihres Problems. Leider kenne ich keine fertige Abfrage zur Bereinigung Ihrer Daten. kann eine andere Frage in diesem Zusammenhang –

+0

Ich habe es geschafft, ein kleines PHP-Skript zu schreiben, um das Problem zu beheben, danke für die Hilfe! Ein Fall von zu vorsichtig sein. –

Verwandte Themen