mysqli_num_rows funktioniert nicht?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Wenn du mysqli als Klasse deklarierst, musst du es auch entsprechend verwenden:

https://www.php.net/manual/de/class.mysqli.php

$result = $con->query("select id from users where fname='$fname'");
$row_count = $result->num_rows;
Woher ich das weiß:Berufserfahrung – Entwickle seit > 20 Jahren Anwendungen mit PHP.
Jakob265 
Fragesteller
 22.07.2021, 16:22

Danke aber nun wird mir diese meldung angezeigt

Fatal error: Uncaught TypeError: mysqli::query(): Argument #1 ($query) must be of type string, mysqli given in /mnt/web016/e0/16/511052116/htdocs/cgi-bin/Inventar/index.php:27 Stack trace: #0 /mnt/web016/e0/16/511052116/htdocs/cgi-bin/Inventar/index.php(27): mysqli->query() #1 {main} thrown in /mnt/web016/e0/16/511052116/htdocs/cgi-bin/Inventar/index.php on line 27
0
Babelfish  22.07.2021, 16:24
@Jakob265

Ich hatte deinen Code nur schnell kopiert und ein $con vergessen rauszunehmen. Jetzt sollte es passen.

Ansonsten bitte auch mal in die Doku schauen.

0
Jakob265 
Fragesteller
 22.07.2021, 16:32
@Babelfish

Danke auch dafür hat jetzt geklappt nur wurde nun eine neue Fehlermeldung angezeigt und wie du bestimmt schon gemerkt hast sind die nicht so mein ding.

Hier die Fehlermeldung

Attempt to read property "num_rows" on bool in /mnt/web016/e0/16/511052116/htdocs/cgi-bin/Inventar/index.php on line 28
0
Babelfish  22.07.2021, 16:42
@Jakob265

Deshalb auch mal die Doku lesen! Die Fehlermeldung sagt doch klar aus, dass $result offenbar ein Bool ist. In der Doku zu query steht beim Rückgabewert:

Returns false on failure.

Also schlägt dein QUERY fehl. Schau also mal, ob dir echo $con→error; was bringt.

0
Jakob265 
Fragesteller
 22.07.2021, 16:51
@Babelfish

Nein dass bringt mir nicht viel.

Dann bekomme ich nur einen HTTP ERROR 500

0

Der Fehler sagt, dass die Funktion mysqli_num_rows() als Parameter 1 ein Objekt des Typs mysqli_result erwartet, statt dessen jedoch einen Boolean erhalten hat.

Als Parameter 1 hast du das Ergebnis der mysqli_query() Funktion von einer Zeile oben drüber übergeben ($sql). Werfe man einmal einen Blick in die PHP-Dokumentation, sieht man im Abschnitt "Rückgabewerte", dass die mysqli_query() Funktion bei Erfolg das gewünschte mysqli_result zurückgibt (oder den booleschen Wert true bei Abfragen ohne Ergebnisliste), bei einem Fehler aber einen false Boolean.

Summa summarum ist etwas an dem Rückgabewert der mysqli_query() Funktion falsch. Entweder sind die Zugangsdaten für das $con-Objekt falsch (Zeile 2 bis 5), oder aber das SQL-Statement ist fehlerhaft.

Um zu prüfen, ob die Zugangsdaten korrekt sind, mit diesen einfach mal versuchen in phpMyAdmin o.Ä. (keine Ahnung, was Strato da anbietet) einzuloggen. Funktioniert das, ist wahrscheinlich das SQL-Statement ("select id from...") falsch. Du solltest das erstmal in phpMyAdmin testen.

Was jetzt genau in deinem Fall falsch ist, kann man nicht sagen. Es würde ansonsten auch helfen, zwischen Zeile 27 und 28 mal ein echo($sql) rein zu packen, um zu sehen, was die mysqli_query() Funktion ausspuckt. So könnte man den Fehler schon eingrenzen.

Übrigens: So, wie das da steht, baust du eine extrem kritische Sicherheitslücke ein (Platz 1 der OWASP Top 10...), nämlich eine SQL Injection. Du packst $fname, die aus einer Nutzereingabe stammt (aus $_POST) direkt ohne Escaping oder Sanitization in die SQL-Abfrage. Ein Angreifer könnte einfach etwas wie ' or '1'=='1 als "fname" schicken und du hättest ein Problem. Siehe auch hier.