• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Problem mit mysqli

bodo92

Aktives Mitglied
Abend, eigentlich will ich das Ergebnis meiner MySQL Abfrage in einen Array legen was mir aber nicht gelingt.

Vorerst bitte ich aber um Erklärung weshalb die eine Methode funktioniert und die andere nicht..

Funktioniert: (Es wurden 3 Zeilen gefunden.)
Code:
            $user_id = $_SESSION['user_id'];
            $query = "
                SELECT  `r`.`recht`
                FROM  `benutzer_rechte` AS  `br`
                LEFT OUTER JOIN  `rechte` AS  `r` ON  `r`.`id` =  `br`.`recht_id`
                WHERE  `br`.`benutzer_id` =  '$user_id'
            ";
            if ($result = $mysqli->query($query)) {
                echo "Es wurden ", $result->num_rows ." Zeilen gefunden.<br/>";
                $result->close();
            }

Funktioniert nicht: (Es wurden 0 Zeilen gefunden.)
Code:
            $user_id = $_SESSION['user_id'];
            $query = "
                SELECT  `r`.`recht`
                FROM  `benutzer_rechte` AS  `br`
                LEFT OUTER JOIN  `rechte` AS  `r` ON  `r`.`id` =  `br`.`recht_id`
                WHERE  `br`.`benutzer_id` =  ?
            ";
            if ($stmt = $mysqli->prepare($query)) {
                $stmt->bind_param("i", $user_id);
                $stmt->execute();
                echo "Es wurden ", $stmt->num_rows ." Zeilen gefunden.<br/>";
                $stmt->close();
            }

Würde lieber mit prepare arbeiten dann muss ich mir keine gedanken um injection machen..
Ich bin den Code 5 mal durchgegangen das müsste doch so stimmen.
 
Zuletzt bearbeitet:
Werbung:
Werbung:
Hi.

Problem hat sich erledigt bin auf PDO umgestiegen ;)
Oder eher Problem umgangen? Gelöst ist das aus Beitrag 1 ja noch nicht.

So sollte es auch sein. So kannst du auch mit anderen DBMS arbeiten.
Auf Grund der Unterstützung anderer Datenbanksysteme ist PDO klar der Favorit. Aber wenn der TE sowieso nur MySQL einsetzt, was wohl 90% der php-Entwickler tun, darf ruhig auch mysqli verwendet werden, was einige Erweiterungen mitbringt, das PDO nicht hat. Hier dazu ein Vergleich.

Abend, eigentlich will ich das Ergebnis meiner MySQL Abfrage in einen Array legen was mir aber nicht gelingt.

Vorerst bitte ich aber um Erklärung weshalb die eine Methode funktioniert und die andere nicht..

Funktioniert: (Es wurden 3 Zeilen gefunden.)
Code:
            $user_id = $_SESSION['user_id'];
            $query = "
                SELECT  `r`.`recht`
                FROM  `benutzer_rechte` AS  `br`
                LEFT OUTER JOIN  `rechte` AS  `r` ON  `r`.`id` =  `br`.`recht_id`
                WHERE  `br`.`benutzer_id` =  '$user_id'
            ";
            if ($result = $mysqli->query($query)) {
                echo "Es wurden ", $result->num_rows ." Zeilen gefunden.<br/>";
                $result->close();
            }

Funktioniert nicht: (Es wurden 0 Zeilen gefunden.)
Code:
            $user_id = $_SESSION['user_id'];
            $query = "
                SELECT  `r`.`recht`
                FROM  `benutzer_rechte` AS  `br`
                LEFT OUTER JOIN  `rechte` AS  `r` ON  `r`.`id` =  `br`.`recht_id`
                WHERE  `br`.`benutzer_id` =  ?
            ";
            if ($stmt = $mysqli->prepare($query)) {
                $stmt->bind_param("i", $user_id);
                $stmt->execute();
                echo "Es wurden ", $stmt->num_rows ." Zeilen gefunden.<br/>";
                $stmt->close();
            }

Würde lieber mit prepare arbeiten dann muss ich mir keine gedanken um injection machen..
Ich bin den Code 5 mal durchgegangen das müsste doch so stimmen.

Damit PHP mit dem Ergebnis umgehen kann und die gelieferten Datensätze zählen kann, musst du diese nach der Ausführung noch Zwischenspeichern: $stmt->store_result();
 
@Mutschas:

Du hast natürlich recht das ich ausschließlich mit MySQL Arbeite aber ich habe mich auch aufgrund der bindParam unterschiede für PDO entschieden da man hier in Prepared Statements statt Platzhalter (?) auch einen Namen vergeben kann was den Bezug klarer darstellt.

Zum anderen finde ich die fetch Methode wesentlich besser.

Trotzdem danke für deine Antwort :)
 
Werbung:
Zurück
Oben