fritz85: PHP + Mysql (COUNT(*))

Hallo zusammen,

ich möchte gerne prüfen ob ein Eintrag in der Datenbank schon vorhanden ist oder nicht.

Jedoch verarscht mich glaubich der Code :D

  
mysql_connect("localhost", "XX", "XX") or die ("Konnte die Datenbank nicht waehlen.");  
mysql_select_db("XXX");  
  
$einlesen = mysql_query("SELECT COUNT(*) FROM tabelle WHERE id ='$id'");  
  
if(mysql_num_rows($einlesen)==1)  
{  
   echo "Eintrag vorhanden";  
}  
else  
{  
   echo "Eintrag nicht vorhanden";  
}  

Ich bekomme jetzt non stop den Wert: 1 zurück... in der Tabelle ist kein Datensatz mehr vorhanden - jedoch erhalte ich noch immer 1 zurück. Warum?

gruss
fritz85

  1. Ich bekomme jetzt non stop den Wert: 1 zurück... in der Tabelle ist kein Datensatz mehr vorhanden - jedoch erhalte ich noch immer 1 zurück. Warum?

    Unterscheide zwischen "Dataset" und "Result Set"

    1. Ich bekomme jetzt non stop den Wert: 1 zurück... in der Tabelle ist kein Datensatz mehr vorhanden - jedoch erhalte ich noch immer 1 zurück. Warum?

      Unterscheide zwischen "Dataset" und "Result Set"

      Hmm - Ich möchte eig nur abfragen... ist der Eintrag mit der ID: 666 vorhanden => Ja oder Nein?

      1. Mahlzeit fritz85,

        Hmm - Ich möchte eig nur abfragen... ist der Eintrag mit der ID: 666 vorhanden => Ja oder Nein?

        Dann frage doch auch genau das ab:

        SELECT foo  
        ,      bar  
          FROM tabelle  
         WHERE id = 666
        

        Wenn Du einen Datensatz bekommst, ist er offenbar vorhanden - wenn die Ergebnismenge leer ist, offenbar nicht.

        Was genau ist Dein Problem?

        MfG,
        EKKi

        --
        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
        1. Hi!

          Hmm - Ich möchte eig nur abfragen... ist der Eintrag mit der ID: 666 vorhanden => Ja oder Nein?
          Dann frage doch auch genau das ab:
          SELECT foo, bar FROM tabelle WHERE id = 666

          Der Unterschied zwischen deiner Empfehlung und deinem Code ist, dass du nicht nach dem "ob" sondern nach den Daten selbst fragst. Um dann eine Antwort zu bekommen musst du erst die Metadaten zum Abfrageergebnis auswerten. Und wenn dich die Feldinhalte gar nicht interessieren, hast du sie zwar umsonst aber nicht kostenlos zum Client transportieren lassen.

          Lo!

          1. Der Unterschied zwischen deiner Empfehlung und deinem Code ist, dass du nicht nach dem "ob" sondern nach den Daten selbst fragst. Um dann eine Antwort zu bekommen musst du erst die Metadaten zum Abfrageergebnis auswerten. Und wenn dich die Feldinhalte gar nicht interessieren, hast du sie zwar umsonst aber nicht kostenlos zum Client transportieren lassen.

            das ist halt die Frage, ob die Daten angezeigt werden sollen oder nicht. Wenn ja, ist EKKis Vorschlag OK, ansonsten ist natürlich COUNT() mit der richtigen Logik vorzuziehen.

      2. Hmm - Ich möchte eig nur abfragen... ist der Eintrag mit der ID: 666 vorhanden => Ja oder Nein?

        Tust du aber nicht - aktuell zählst du die alle Datensätze. Wie dedlfix schon sagt - COUNT() liefert immer ein Ergebnis.

  2. Hi!

    ich möchte gerne prüfen ob ein Eintrag in der Datenbank schon vorhanden ist oder nicht.
    $einlesen = mysql_query("SELECT COUNT(*) FROM tabelle WHERE id ='$id'");

    COUNT() ist eine Aggregatfunktion, die stets ein Ergebnis liefert, und wenn es 0 ist. (Beim Gruppieren liefert es COUNT() pro Gruppe eins.)

    if(mysql_num_rows($einlesen)==1)

    Das ist der Ergebnisdatensatz mit dem COUNT-Ergebnis, was du da siehst. Du musst nun noch das Ergebnis wie bei "normalen" Abfragen abholen.

    P.S. SELECT */feldliste FROM ... und dann darauf nur mysql_num_rows() anenden, ohne die selektierten Datensätze zu verarbeiten ist zwar einfacher als der nach dem COUNT() benötigte Abfrage-Code, aber es ist Ressourcenverschwendung. mysql_query() holt bereits im Hintergrund die Ergebnismenge und lagert sie zwischen. Nur deshalb können Funktionen wie mysql_num_rows() ein richtiges Ergebnis liefern.

    Lo!

  3. Mahlzeit fritz85,

    ich möchte gerne prüfen ob ein Eintrag in der Datenbank schon vorhanden ist oder nicht.

    Dann tu das doch. :-)

    Jedoch verarscht mich glaubich der Code :D

    Nein, Du verarscht Dich eher selbst ...

    $einlesen = mysql_query("SELECT COUNT(*) FROM tabelle WHERE id ='$id'");

    Führe die entsprechende Abfrage mal direkt in MySQL (bzw. so etwas wie phpMyAdmin o.ä.) aus ... was fällt Dir auf?

    .

    ..

    ...

    Richtig - Du bekommst *IMMER* ein Ergebnis zurück ... und zwar die Anzahl der Datensätze, deren Spalte namens "id" einen bestimmten Wert hat (wobei ich mich frage, was diese Abfrage überhaupt soll: einerseits sollte es maximal einen entsprechenden Datensatz gelten, sofern es sich bei der Spalte "id" um den Primärschlüssel handelt, andererseits ist es erstaunlich, dass dieser Primärschlüssel offenbar ein alphanumerischer Wert ist, und drittens solltest Du Dich schleunigst zum Thema "SQL Injection" und über mysql_real_escape_string() informieren) - und diese Anzahl kann auch 0 sein.

    Ich bekomme jetzt non stop den Wert: 1 zurück... in der Tabelle ist kein Datensatz mehr vorhanden - jedoch erhalte ich noch immer 1 zurück. Warum?

    Aus o.g. Gründen: works as designed.

    MfG,
    EKKi

    --
    sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|