Antworten auf deine Fragen:
Neues Thema erstellen

Num_rows Frage

ladyray

Noch nicht viel geschrieben

Hi
Ich habe mal eine Frage, die sich um Mysqli dreht.
Bei einer Abfrage (num_rows) habe ich bei MySQL bisher immer für die Überprüfung ob eine Zeile gefunden wurde die Funktion „empty“ verwendet. Doch bei Mysqli springt das nicht an, dort muss ich > 0 oder != 0 nehmen.
Kann mir jemand sagen wieso das so ist? Es ist für mich nicht logisch nachvollziehbar.
Also z.B.
if(!empty($result->num_rows))….
Was ist dort das Problem? Ich habe das Gefühl das der mir da boolsche Werte liefert!?


Liebe Grüße
 

Robbyn-

PHP / Flex Programmierer

AW: Num_rows Frage

Selbst bei bool Werte sollte das Problem nicht auftauchen. Du solltest aber weg von num_rows, nimm lieber die COUNT Funktion.

PHP:
$query = mysqli_query("SELECT COUNT(*) as count FROM tabelle");
$data = mysqli_fetch_assoc($query);

echo $data['count'];
 

ladyray

Noch nicht viel geschrieben

AW: Num_rows Frage

Selbst bei bool Werte sollte das Problem nicht auftauchen. Du solltest aber weg von num_rows, nimm lieber die COUNT Funktion.

PHP:
$query = mysqli_query("SELECT COUNT(*) as count FROM tabelle");
$data = mysqli_fetch_assoc($query);

echo $data['count'];
Hi, danke aber ich gebe grundsätzlich an, welche Spalten ich auslesen möchte. So weiss ich später darüber Bescheid, was ich auslesen wollte und vielleicht (damit habe ich mich noch nicht auseinandergesetzt), hat es auch Performance-Vorteile.

Ich verstehe aber wirklich nicht, warum das mit empty nicht funktioniert, da empty auch FALSE anerkennt.
 

Robbyn-

PHP / Flex Programmierer

AW: Num_rows Frage

Du kannst auch sagen COUNT(feldname) das geht auch was aber performance technisch langsamer wäre als COUNT(*).

Warum dieses Problem auftaucht kann ich nicht sagen, du kannst aber mal versuchen mit folgenden Code herraus zu finden was in deinem num_rows enthalten ist.

PHP:
print_r($result->num_rows());

Ach ich sehe gerade, hast du vielleicht die () vergessen???
 

Duddle

Posting-Frequenz: 14µHz

AW: Num_rows Frage

Mehr Code würde hier wohl helfen. Im Handbuch zu mysqli_result::num_rows werden zwei verschiedene Stile vorgestellt, wie du dieses Objekt benutzen kannst und jeweils musst du die Zeilenanzahl unterschiedlich auslesen.

In empty() steht dann auch genau da, welche Werte als leer angesehen werden. Falls du nicht sicher bist, lass es dir vorher ausgeben, bevor du es in die Funktion wirfst.


Duddle
 

ladyray

Noch nicht viel geschrieben

AW: Num_rows Frage

Mehr Code würde hier wohl helfen/QUOTE]

Hi,

danke, alle geposteten Varianten bin ich schon durchgegangen, doch selbst wenn mir num_rows einen boolschen Wert zurückgibt, erkennt "empty" das an.

Mein Code ist folgender und das Problem ist darin enthalten:
PHP:
<?php


    $check = $db1->query("SELECT id FROM `database` WHERE email = '".$email."'");
        
    if(!empty($check->num_rows)){                                                                        
        echo "nicht leer";
    }

    // Bei Verwendung von if(empty($check_chkemail->num_rows())){ folgender Error:
    // Can't use method return value in write context in ...


?>
Ich hoffe es ist klar, was gemeint ist. Bei MySQL funktioniert es auf die gleiche Methode, doch hier nicht.
Aus reinem Interesse also die Frage: Wieso?
Einen schönen Abend :)
 

Robbyn-

PHP / Flex Programmierer

AW: Num_rows Frage

Hast du mal das $check->num_rows mit einem echo/print_r ausgeben lassen? Darauf habe ich und Duddle bereits angesprochen.
 

ladyray

Noch nicht viel geschrieben

AW: Num_rows Frage

Hast du mal das $check->num_rows mit einem echo/print_r ausgeben lassen? Darauf habe ich und Duddle bereits angesprochen.
Ja, die 0 oder 1 wird korrekt gesetzt! Doch die !empty Funktion springt nicht darauf an wenn ich frage if(!empty($blabla->num_rows)) dann gebe "nicht leer" aus.
Warum ist mir nicht bekannt. Wenn ich das ganz umformuliere, also mit Dezimalzahlen dann klappt´s.
Habt ihr das mal bei euch ausprobiert. Falls ja, funktionierts da?

PS: num_rows() ist keine Funktion, denn wenn ich die scheinbare Funktion mit print_r versuche auszugeben, bekomme ich die Fehlermeldung: call du undefined function
 

Refus

aka Noisy

AW: Num_rows Frage

Gibt mysqli_num_rows auch FALSE zurück? Oder einfach 0, wenn es keine Einträge gibt?
Nimm mal anstelle von print_r() var_dump() und guck mal nach was der typ bei 0 ist.
 

Refus

aka Noisy

AW: Num_rows Frage

Naja, mit empty() fragst du ab, ob das Ergebnis leer ist, und mit 0 also int, scheint er nicht zufrieden zu sein. Mit 0 als bool würde es gehen.
Mach also keine Abfrage mit empty(), sondern einfach
if($var != 0) { ...
 

Robbyn-

PHP / Flex Programmierer

AW: Num_rows Frage

Mit Empty fragst du auch boolische Werte ab. Also auch wenn er false zurück gibt interpretiert er dies als 0. Empty ist da so ne Sache die gut ist, aber nicht überall verwendung findet ;)
 

ladyray

Noch nicht viel geschrieben

AW: Num_rows Frage

Da muss noch also noch ein anderer Kniff dabei sein...

Ich denke es auch. Ich kann nicht mehr ruhig schlafen, bevor ich des Rätsels Antwort nicht kenne ;)
Könnte mir bitte mal jemand den Gefallen machen und das auf einem seiner Server auszuprobieren, um zu checken, ob das ein gängiges Problem ist (sofern Datenbank vorhanden)?

Ich möchte noch das im Laufe des Threads erwähnte Thema "Select" aufmischen. Ist es denn nun schneller SELECT * oder SELECT spaltenname1, spaltenname2 zu verwenden?

Und da ich gerade schon dabei bin, würde mich noch interessieren, ab wann ein Server nicht mehr mitspielt, z.B. bei welcher Anzahl von MySQL-Abfragen zu einem Zeitpunkt oder bei wievielen Zugriffen auf die Datenbank etc.?
Hat da jemand Erfahrung, wie leistungsstark ein Server sein muss, um großen Projekten gewachsen zu sein?
 

Refus

aka Noisy

AW: Num_rows Frage

Rufus, eigentlich sollte empty bei einem int=0 aber auch true liefern:

Richtig, ich hab das auch gelesen, und deshalb extra noch mal ausprobiert. Es funktioniert jedenfalls nicht wie beschrieben wenn $var (int)0 ist.
Darum bin ich auch zu dem Schluss gekommen einfach auf empty() zu verzichten.

Da spielt es auch keine Rolle, ob ich erst eine MySQL Abfrage mache und dabei (int)0 erhalte, oder ob ich $var direkt (int)0 zuweisen. (int)0 bleibt (int)0 ;)
Warum empty() jetzt nicht funktioniert wie es soll weiß ich leider auch nicht. Aber irgendwo macht es auch schon Sinn, denn 0 ist anders als null oder "" oder false ebene nicht empty (in meinem logischen Verstand :D).
 

Zampano_

Nicht mehr ganz neu hier

AW: Num_rows Frage

Merkwürdig, bei mir funktionier es wie es soll:
PHP:
$lala = (int) 0;
//$lala = (bool) $lala;

if (empty($lala)) {
    echo "leer<br>\n";
    var_dump($lala);
}else {
    echo "voll<br>\n";
    var_dump($lala);
}
Ergibt bei mir die Ausgabe:
leer<br>
int(0)

Abgesehen davon würde ich für num_rows dann aber auch auf >0 abfragen!

Aber irgendwo macht es auch schon Sinn, denn 0 ist anders als null oder "" oder false ebene nicht empty (in meinem logischen Verstand
biggrin.png
).
Würde für meine Logik auch mehr Sinn machen, ist aber bei mir nicht so ...;)
 
Zuletzt bearbeitet:
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.620
Beiträge
1.538.374
Mitglieder
67.544
Neuestes Mitglied
janusbarman
Oben