| 

.NET C# Java Javascript Exception

1
Hallo,

ich hänge in einer eigentlich einfachen SQL Namenssuche unter PHP fest:

SELECT vorname,nachname FROM adresse WHERE vorname LIKE '%$vorname%' AND nachname LIKE '%$nachname%' ORDER BY nachname


Die Abfrage ist Teil einer AJAX Rückgabe und soll natürlich auch Umlaute erkennen. Nach einigem Googlen habe ich

SELECT vorname,nachname FROM adresse WHERE BINARY vorname LIKE '%$vorname%' AND BINARY nachname LIKE '%$nachname%' ORDER BY nachname

und

SELECT vorname,nachname FROM adresse WHERE BINARY vorname LIKE '%$vorname%' AND BINARY nachname LIKE '%$nachname%' COLLATE utf8_unicode_ci ORDER BY nachname


probiert - leider ohne den gewünschten Erfolg (das Suchergebnis ist leer).

Ich nutze PHP 5.3 & MySQL 5.1. Die DB "adresse" hat die Kollation utf8_unicode_ci. Die per jQuery übergebenen Suchparameter werden dem Skript korrekt übergeben.

Was mache ich falsch?
07.01.2012
doublem 683 1 1 9
3
Moin, eine Antwort auf deine eigentliche Frage habe ich jetzt nicht - aber eine Anmerkung zu deinen SQL-Statements.
Überprüfst du eigentlich was du in den Variablen stehen hast. Das ist ja die schönste Quelle für SQL Injection. Ein $vorname = " 'Karl%' OR 1 = 1 --" reicht schon um mir alle Personen zu aufzulisten.
Probiere es mal mit Prepared Statements - die können auch super wiederverwendet werden.
Gruß Karl
Karl 07.01.2012
Vielen Dank für Eure Hinweise. Damit werde ich mich mal auf die Suche begeben, denn ich dachte wirklich, wo UTF8 drauf steht ist auch UTF8 drin ;-)

PS: Und ja, natürlich werden die Variablen geprüft und escaped. Hatte ich nur nicht weiter erwähnt, weil es nicht im Zusammenhang mit meinem Problem steht.
doublem 09.01.2012
Gerne immer wieder
XJenso 15.01.2012
2 Antworten
2
Liegt dein Problem tatsächlich bei der Abfrage an die dB? Wenn, wie du schreibst, die Kollation stimmt und die Daten korrekt übergeben werden, machst du es im Grundsatz richtig. Bis auf die Anmerkung von Karl. Es ist fahrlässig die Datenbank so anzusprechen (SQL Injection lässt Grüßen)!!!

Ich würde hier mal auf die Codierung der Daten tippen. Vielleicht vergleichst du Äpfel mit Birnen. Ich denke du wirst ansci oder iso-Xy in der Datenbank eingetragen haben ohne das vor dem Import in die dB konvertiert zu haben. Jetzt versuchst du mit UTF-8 darauf zu suchen. Das kann nicht klappen. Prüft mal die tatsächliche Codierung des Schriftsatzes.

Nur weil UTF-8 dran steht muss es nicht drin stecken. Wenn du was in die Datenbank einträgst wird nicht automatisch zu dem Schriftsatz konvertiert, das musst du schon veranlassen.

Beispiel du hast ein Webform mit der ISO-8859-1 Codierung mit dem du die Daten an die Datenbank überträgst. Somit trägst du KEINE UTF-8 Daten in die dB ein sonder ISO-8859-1.

Gruß Jens
07.01.2012
XJenso 322 7
0
Liegt bestimmt an unterschiedlicher Kodierung (@ Jens). Falls du die Kodierung der DB nicht beeinflussen kannst, kannst du die Variablen durch einen Converter laufen lassen, um mit dem korrekten Zeichensatz die Abfrage zu starten.

--> http://www.php.net/manual/de/function.utf8-encode.php

Grüße
Sai
07.01.2012
Sai 73 1 5
Sai 73 1 5

Stelle deine Php-Frage jetzt!