Kai: mySQL Abfrage WHERE

Hallo zusammen

Ich bin mySQL Anfänger und werde aus der Doku nicht so recht schlau. Ich habe mir eine DB und möchte nun folgende Abfrage machen:

Alle Spalten von der Tabelle "kunden" als Ausgabe jedoch nur die Zeile mit dem Kunden XY.

Diese Abfrage müsste meiner meinung so ausssehen:
$query = "SELECT * FROM kunden WHERE kundennr = $kdnr";

Das klappt auch soweit weil "kundennr" auch das ID-Feld der DB ist. Jecoh möchte ich genau das selbe machen mit dem Nachnamen.

Ich dachte das müsste dann so aussehen:
$query = "SELECT * FROM kunden WHERE name = $name";

Jedoch liefert mir diese Abfrage rein gar nichts zurück. Was mache ich falsch? Oder geht WHERE nur mit der Tabellen-ID?

PS: Die DB Spreche ich mit Perl und den DBI-Modulen an.

Danke für eure Hilfe.

KAI

  1. yo,

    Ich dachte das müsste dann so aussehen:
    $query = "SELECT * FROM kunden WHERE name = $name";

    es macht immer sinn, eine abfrage ohne variablen auszuprobieren, falsch was schieft läuft. mach mal:

    $query = "SELECT * FROM kunden WHERE name = '$name'";

    Ilja

    1. Hey danke für den Tipp!

      Eine direkte Abfrage funktioniert. Ich habe da irgend wo einen Fehler im Perl-Code.

      Schnell noch eine andere Frage:

      Ich möchte zwei unterschiedliche Suchmuster verwenden. Wenn die variabel eine Zahl ist folgender String:
      $query = "SELECT * FROM kunden WHERE kundennr = $customer";

      Wenn keine Zahl folgenden String:
      $query = "SELECT * FROM kunden WHERE URL_KA = $customer";

      Die Abfrage in Perl is kein Problem. Aber kann ich an die DB-Abfrage eine Variabel übergeben welche das Suchmuster beinhaltet?

      also zB. bei einer Zahl:
      $searchfor = "WHERE kundennr = $customer";

      Die DB-Abfrage würde dann so aussehen:
      $query = "SELECT * FROM kunden $searchfor";

      Geht so was?

      1. yo,

        Eine direkte Abfrage funktioniert. Ich habe da irgend wo einen Fehler im Perl-Code.

        ob die abfrage so funktioniert, überprüft man am besten, indem man die abfrage in perl auf den bildschrim ausgeben läßt, kopiert und dann an einer konsole oder phpmyadmin eingibt und sich anschaut, was passiert. meiner meinung fehlten die einfachen anführungszeichen, da es sich um einen string handelt.

        Ich möchte zwei unterschiedliche Suchmuster verwenden. Wenn die variabel eine Zahl ist folgender String:
        $query = "SELECT * FROM kunden WHERE kundennr = $customer";

        Wenn keine Zahl folgenden String:
        $query = "SELECT * FROM kunden WHERE URL_KA = $customer";

        auch hier das gleich, da fehlen die einfachen anfürhungszeichen um den string. man kann diese auch bei zahlen einsetzen, damit vergisst man sie nie.

        Die Abfrage in Perl is kein Problem. Aber kann ich an die DB-Abfrage eine Variabel übergeben welche das Suchmuster beinhaltet?

        grundsätzlich solltest du in perl die abfrage zusammenbauen, sprich dort eine verzweigung, die abfrage, ob es sich um eine zahl oder einem string handelt. in der entsprechenden verzweigung setzte du dann die sql abfrage.

        es gibt dbms die das auch direkt können, zum beispiel mit pl/sql in oracle.

        Ilja

  2. Hallo

    Vielleicht hast Du eine Spalte versehentlich als unique deklariert und irgendwo zwei identische Werte?
    tschüs

    --
    cogito ergo akro
  3. echo $begrüßung;

    $query = "SELECT * FROM kunden WHERE name = $name";

    Jedoch liefert mir diese Abfrage rein gar nichts zurück. Was mache ich falsch? Oder geht WHERE nur mit der Tabellen-ID?

    "Rein gar nichts" ist sicher nicht richtig. Beachte, dass die mysql_*-Funktionen von PHP im Fehlerfall meist ein false zurückgeben statt des sonst erwarteten Ergebnisses. Unterscheide dies in deinem Programmablauf. Desweiteren kann die MySQL-Fehlermeldung dann mit mysql_error() abgefragt werden. Eine beispielhafte Abfrage mit Fehleranzeige findest du im MySQL-Kapitel des PHP-Handbuchs.

    Gab es denn gar keine Fehlermeldung von PHP, das sich über einen falschen Parametertyp bei einer mysql_fetch_*-Funktion beklagte?

    echo "$verabschiedung $name";

    1. yo,

      Gab es denn gar keine Fehlermeldung von PHP, das sich über einen falschen Parametertyp bei einer mysql_fetch_*-Funktion beklagte?

      ich befürchte, in diesem fall gibt php wirklich nichts zurück, da es sich um perl handelt ?

      Ilja

      1. Genau so ist es Ilja :-).
        Es handelt sich hier um Perl und das Modul DBI. Perl ist halt nicht immer ganz so gesprächig ;-).

      2. echo $begrüßung;

        ich befürchte, in diesem fall gibt php wirklich nichts zurück, da es sich um perl handelt ?

        Ach... das P.S. nicht gelesen. Aber in Perl sollte das prinzipiell genauso gehen. Es wird ja die gleiche MySQL-API verwendet.

        echo "$verabschiedung $name";