seba: SQL-Statement wird nicht richtig übergeben / ausgewertet

Ahoi!

Problem: Ich führe ein Suchskript in einer WAMP-Umgebung aus. Wenn ich das Skript mit dem Browser (FF 2) laufen lasse, werden 2 Datensätze nicht angezeigt. Das SQL-Statement wird dabei aber korrekt übergeben, resp. wenn ich das Statement ausgebe (echo $sql;) und mit copy&paste als SQL-Befehl in phpmyadmin eingebe, werden alle Datensätze korrekt angezeigt.

An unterschiedlichen Zeichensätzen sollte es nicht liegen, die Tabelle verwendet latin1, LiveHTTPheaders sagt mir, dass ich utf8 versende. Ich habe zur Kontrolle das Skript geändert, das Resultat bleibt jedoch dasselbe.

Hat jemand eine Idee, an was das liegen könnte?

PHP:
$sql .= " AND (ka.nachname LIKE '".$_SESSION['nachname']."' OR ka.nachname LIKE '".htmlentities($_SESSION['nachname'])."' ) ";

Oder (mit Zeichensatz):
$sql .= "AND (ka.nachname LIKE CONVERT( _utf8 '".$_SESSION['nachname']."' USING latin1 ) OR ka.nachname LIKE CONVERT( _utf8 '".htmlentities($_SESSION['nachname'])."' USING latin1 ) ) ";

--> 2 Datensätze fehlen

SQL:
AND (ka.nachname LIKE 'müller' OR ka.nachname LIKE 'müller' )

Oder Oder (mit Zeichensatz):
AND (ka.nachname LIKE CONVERT( _utf8 'müller' USING latin1 ) OR ka.nachname LIKE CONVERT( _utf8 'müller' USING latin1 ) COLLATE latin1_swedish_ci )

-->korrektes Resultat

  1. Servus,

    sind die fehlenden Datensätze abhängig von den Werten für die Where Kriterien, also, wenn du mit "Meier" versuchst, fehlt keiner, mit "Lehmann" fehlt auch keiner, mit Schuster fehlen 547? Ich hoffe, du verstehst, worauf ich hinauswill.

    Zweitens, vergleiche die Länge des Arrays, welches du in PHP über die MySQL-Funktion (fetcharray oder so) zurückbekommst.

    Drittens, wenn du mit dem ganzen PHP-Geschnipsel fertig bist, was steht dann in $sql. Nimm dessen Inhalt und führe ihn in PHPMyAdmin aus? Gibt es Unterschiede? (a) schon beim Inhalt des Strings; (b) erst bei den Rückgabewerten?

    Cheers,
    Frank

    1. Ahoi!

      Sorry, da habe ich mich wohl nicht so ganz klar ausgedrückt.

      sind die fehlenden Datensätze abhängig von den Werten für die Where Kriterien

      Nein, ich suche nur den Namen Müller. Diesen gibts in der Datenbank 3 Mal, jeweils mit einem anderen Datum und einer anderen Id. Das Such-Statement beschränkt sich nur auf den Nachnamen (plus einen kleinen Join, aber der stimmt schon).

      Das ganze wird korrekt übergeben (Länge stimmt), wenn ich $sql in phpmyadmin ausführe werden alle drei Müllers angezeigt. Der Unterschied ist also nur (b). Resp. in phpmyadmin werden mir alle drei Resultate angezeigt, in der php-Datei jedoch nur eins (while($row = mysql_fetch_array($result, MYSQL_ASSOC)) ). Ich schaue mir momentan die einzelnen Tupel an, ob Unterschiede in der Codierung bestehen.

      1. Hi,

        und was wäre, wenn du nach einem anderen Namen suchst?

        [1] die richtige Anzahl Ergebnisse in PHP Script und PHP Admin wird ausgegeben
        [2] unterschiedliche Ergebnismengen

        bei 1) liegt es wohl wahrscheinlich an der Codierung von "Müller" .. im speziellen an diesem komischen ü
        bei 2) liegt es wohl daran was letztendlich zur Ausführung in MySQL kommt, du hast also noch irgendwo ein Leck, was das Zusammenbauen des Strings anbelangt.

        Cheers, Frank

        1. Ahoi!

          Ich Depp - es lag an etwas komplett anderem (die Session wars!), aber immerhin ist das Problem gelöst.
          Vielen Dank, lieber Frank (DEN Reim hast du bestimmt noch nie gehört...).

          Adieu