LastBoyScout: mysqli und COUNT(*)

Nabend,

Ich will mich gerade an mysqli gewöhnen, bleibe jedoch schon an einer einfachen SELECT COUNT(*) Abfrage stecken...

Mit mysql habe ich das Ergebnis immer mit mysql_result($query, 0); abgerufen, dass gibt es jedoch in der i-Variante ja nicht mehr.

Habe es daher nun folgendermaßen versucht, jedoch leider ohne Resultat:

$Datei = "Spilfilm.mp4";  
$db = mysqli_connect("localhost", "user", "pass", "filmindex");  
$query = mysqli_query($db, "SELECT COUNT(*) AS Count FROM filme WHERE Film = $Datei");  
$result = mysqli_fetch_object($query);  
$anzahl = $result->Count;  
echo ">" . $anzahl . "<";

Kann den Fehler einfach nicht finden!?

Gruß
LBS

  1. Tach!

    Ich will mich gerade an mysqli gewöhnen,

    Sehr löblich. Probier doch auch mal Prepared Statements damit.

    Mit mysql habe ich das Ergebnis immer mit mysql_result($query, 0); abgerufen, dass gibt es jedoch in der i-Variante ja nicht mehr.

    Das geht ähnlich mit mysqli_fetch_array($query, MYSQLI_NUM)[0]. $query ist aber ein unzutreffender Variablenname. Das Ergebnis eines mysqli_query-Aufrufs ist keine Query sondern ein Resultset/Result. Wenn du davon etwas fetchst, bekommst du zwar auch ein Ergebnis, aber das lässt sich genauer als Zeile/Row oder Datensatz/Record benennen.

    Habe es daher nun folgendermaßen versucht, jedoch leider ohne Resultat:

    Glaub ich nicht, denn in dem gezeigten Code steckt ein Syntaxfehler. Das Resultat wäre erstens ein false statt eines mysqli_result-Objekts. Zweitens kann man von diesem false nichts fetchen, und mysqli_fetch_object() müsste sich über das false als Parameter beschweren. Zudem ist in Variablen immer ein konkreter Wert drin. Frag diesen bitte mit var_dump() ab. Das hat mehr Wert für die Suche als ein allgemeines "funktioniert nicht"/"bekomme kein Ergebnis".

    [code lang=php]$Datei = "Spilfilm.mp4";
    $db = mysqli_connect("localhost", "user", "pass", "filmindex");
    $query = mysqli_query($db, "SELECT COUNT(*) AS Count FROM filme WHERE Film = $Datei");

    Wie lautet die fertige Query? Bau sie dir zunächst in einer eigenen Variable zusammen, dann kannst du diese ausgeben lassen. Fällt dir dabei der Syntaxfehler auf?

    $result = mysqli_fetch_object($query);

    Wo ist deine Fehlerbehandlung? Schau dir die Beispiele im PHP-Handbuch an. Da ist wenigstens ein rudimentäres Reagieren auf Fehler enthalten. Selbst wenn du denkst, dass du nun alle Syntaxfehler beseitigt hast, gibt es noch genügend andere Gründe, warum eine Query oder auch eine nahezu beliebige mysqli-Funktion misslingen kann. Schau immer im Handbuch nach, was im Gut- und was im Fehlerfall für ein Ergebnis geliefert wird. Reagiere im Fehlerfall angemessen im Sinne deines Anwendungsfalls. Denk dabei an den Nutzer, was der vorhatte und wie er ans Ziel kommt. In zweiter Linie solltest du erst an dich denken und dir Informationen zur Fehlersuche aufheben oder zukommen lassen.

    dedlfix.

    1. Sehr löblich. Probier doch auch mal Prepared Statements damit.

      Du meinst Objektorientiert anstatt Procedural!?

      Glaub ich nicht, denn in dem gezeigten Code steckt ein Syntaxfehler. Das Resultat wäre erstens ein false statt eines mysqli_result-Objekts.

      Ist richtig, er bringt statt eines Resultat ein False. PHPEdit zeigt mir jedoch keinen Syntaxfehler an und auch das SQL- Query funktioniert in pma... entweder ist es schon zu spät oder ich hab vom Abendessen noch Tomaten auf den Augen!?

      1. Tach!

        Sehr löblich. Probier doch auch mal Prepared Statements damit.
        Du meinst Objektorientiert anstatt Procedural!?

        Nein, ich meine schon Prepared Statements. Ob du die objektorientiert oder prozedural abhandelst, ist mir egal.

        Glaub ich nicht, denn in dem gezeigten Code steckt ein Syntaxfehler. Das Resultat wäre erstens ein false statt eines mysqli_result-Objekts.
        Ist richtig, er bringt statt eines Resultat ein False. PHPEdit zeigt mir jedoch keinen Syntaxfehler an und auch das SQL- Query funktioniert in pma... entweder ist es schon zu spät oder ich hab vom Abendessen noch Tomaten auf den Augen!?

        Dann verwendest du zwei verschiedene Statements. Oder du zeigst hier eins mit einem offensichtlichen syntaktischen Fehler und arbeitest aber in Wirklichkeit mit einem anderen. Erzeug doch mal, wie schon empfohlen, den Statement-String komplett in einer eigenen Variable und lass dir diese ausgeben. Und dann schau dir auch mal die Kontextwechsel-Problematik an.

        dedlfix.