MySql Abfrage liefert Ergebnis...

Dieses Thema im Forum "Datenbanksysteme für das Web" wurde erstellt von m0mo, 19.12.2005.

  1. m0mo

    m0mo Thread Starter MacUser Mitglied

    Beiträge:
    479
    Zustimmungen:
    2
    MacUser seit:
    26.03.2005
    obwohl dieses gar nicht existiert.

    Folgendes Sachlage:

    ich moechte etwas aus der Datenbank auslesen lassen:

    SELECT sonstwas FROM files WHERE f_id = 33 AND kat_id =12

    das ist mein query, danach kommt dann das:

    $query ="...";
    $resultat = mysql_query($query, $conn);

    ob die Abfrage ein Ergebnis geliefert hat, moechte ich nun so testen:

    if($resultat) {}


    nun sollte meine Abfrage oben kein Ergebnis liefern, da ein Datensatz mit den beim WHERE Teil angegebenen Bedingungen gar nicht existiert.
    Dennoch gibt mir die $resultat abfrage an, dass ein Ergebnis vorliegt. (Der If Teil wird ausgefuhert...)

    Woran kann das liegen?
    Wie wuerdet ihr diese Problematik bearbeiten?

    danke schonmal

    mfg
    m0mo
     
  2. simusch

    simusch MacUser Mitglied

    Beiträge:
    2.221
    Zustimmungen:
    186
    MacUser seit:
    27.09.2004
    in deinem Fall bedeutet "if($resultat)" nur, dass die Abfrage ausgeführt werden konnte, es zeigt noch nicht, ob auch ein Ergebnis vorliegt...

    dazu brauchst du:

    PHP:
    $query "SELECT sonstwas FROM files WHERE f_id = 33 AND kat_id =12";

    $resultat mysql_query($query$conn);

    $ergebnis mysql_num_rows($resultat);

    if(
    $ergebnis 0)
    {
         echo 
    "jetzt sollte dieser Text nur noch erscheinen, wenn auch ein Ergebnis vorliegt";
    }

    mysql_num_rows gibt die Anzahl Ergebniszeilen aus... :)
     
  3. maceis

    maceis MacUser Mitglied

    Beiträge:
    16.645
    Zustimmungen:
    596
    MacUser seit:
    24.09.2003
    In welcher Sprache sprechen wir hier?
    Perl, PHP, $wasanderes?

    Es wäre einfacher, wenn Du Originalcode posten würdest.
    Was Du da angibst ist teilweise die "Sprache" des mysql CLI Clients und teilweise was anderes - das passt schon mal nicht zusammen.
     
  4. scope

    scope MacUser Mitglied

    Beiträge:
    4.081
    Zustimmungen:
    301
    MacUser seit:
    24.01.2005
    Noch geschickter wäre es eventuell mit
    PHP:
    $query "SELECT sonstwas FROM files WHERE f_id = 33 AND kat_id =12"

    $resultat mysql_query($query$conn);

    if( 
    $ergebnis mysql_fetch_object$resultat ) )
    {
        
    print_r($ergebnis);
    }
    Ergebnis erhält jetzt im Erfolgsfall direkt das Ergebnis
    der Abfrage.
     
  5. m0mo

    m0mo Thread Starter MacUser Mitglied

    Beiträge:
    479
    Zustimmungen:
    2
    MacUser seit:
    26.03.2005
    ja, das hast du recht, ich benutze php und hab die Sprachsachen gemischt, damit man gleich den Sinn des queries sehen kann.

    Ich weiss nicht, ob es mit dem hier:

    $query = "SELECT kat_id FROM ".$value['db']." WHERE (".$value['id']." = ".$_GET[$value['var_name']]." AND kat_id =".$_SESSION['kat_id'].")";

    so viel besser gewesen waere.
    Des Weiteren war ja nicht das query wichtig, sondern eher der umgang mit dem Ergebnis.

    Vielen Dank an simusch! das merk ich mir :)

    mfg
    m0mo
     
  6. wegus

    wegus MacUser Mitglied

    Beiträge:
    15.039
    Zustimmungen:
    1.316
    MacUser seit:
    13.09.2004
    Da hast Du auch durchaus recht! Allerdings ist hier und da schon bei dieser Abstraktion so mancher Fehler verlorengegangen! Da sucht man dann an Stellen nach Fehlern bei denen es Garkeine mehr gibt; eben weil der Fehler in der Implementierung in der Sprache lag.
    Daher ist es meist sinnvoller den gekürzten Originalcode zu postn ( in PHP-Tags). Es hat ja aber in Deinem Fall problemlos so geklappt. Das Problem ist ja gelöst.
     
  7. maceis

    maceis MacUser Mitglied

    Beiträge:
    16.645
    Zustimmungen:
    596
    MacUser seit:
    24.09.2003
    Nein, sicher nicht.
    Im Idealfall postet man ein kleines Skript, welches das Problem demonstriert, aber jeden unnötigen Balast beiseite lässt.
    Wenn man die PHP Tags verwendet, wird es auch gleich lesbarer.

    Im Grunde ist das Eigeninteresse, denn je übersichtlicher und präziser Du Dein Problem darstellst um so größer ist die Chance, dass Dir jemand helfen kann und möchte.
    Außerdem tut es der Community gut, da andere dann auch leichter von den bearbeiteten Themen profitieren können.

    Aber nichts für ungut, das ist nur mal so ne Anregung.

    [edit]wegus war wieder mal schneller ;)[/edit]
     
  8. msslovi0

    msslovi0 MacUser Mitglied

    Beiträge:
    2.713
    Zustimmungen:
    115
    MacUser seit:
    20.03.2005
    Ich kann mir das jetzt nicht verkneifen, aber ein kurzer Blick in die Doku hätte das Problem auch gelöst:
    Matt
     
  9. Der Graf

    Der Graf MacUser Mitglied

    Beiträge:
    389
    Zustimmungen:
    17
    MacUser seit:
    02.06.2004
    Vielleicht interessiert Dich folgendes:
    Ich habe mir mal eine kleine PHP-Klasse geschrieben, die kannst Du überall einbinden und dann auf Deine Datenbank zugreifen, ohne große Verrenkungen zu vollführen:

    http://stinfwww.informatik.uni-leipzig.de/~mai03aow/db_main.zip

    Funktioniert folgendermassen:
    In dem Zip-Paket findest Du zwei Dateien, eine ist die Datenbank-Klasse, die andere ist die Datei mit den Datenbank-Einstellungen. In dieser zweiten Datei passt Du einfach mal die Datenbank-Zugangsdaten an Deine eigene Datenbank an.
    Die beiden Dateien in Deinen Webspace, und dort in einem Skript folgendes machen:
    PHP:
    include("db_main.inc.php");
    $db=new db_main();
    Nun hast Du das Skript eingebunden und ein Datenbank-Objekt in der Variablen $db instanziiert. Dieses kannst Du nun benutzen, in andere Funktionen übergeben und auch dort benutzen. Und zwar auf zwei Weisen:

    PHP:
    // 1. Möglichkeit: Kein Rückgabewert
    $db->query("INSERT INTO tabelle SET spalte='Wert' ");

    // 2. Möglichkeit: Mit Rückgabewert
    $ergebnis $db->query("SELECT spalte FROM tabelle WHERE bedingung");
    Im ersten Fall hast Du nun in die angegebene Datenbank-Tabelle in der Spalte einen Wert gespeichert.
    Im zweiten Fall eine Abfrage, die ihr Ergebnis in $ergebnis als assoziatives Array speichert.
    Lässt sich mittels for each oder ganz banaler for-Schleife auslesen:

    PHP:
    for($i=0$i<sizeof($ergebnis); $i++) {
        echo(
    $ergebnis[$i]['spalte']);
    }
    Hier ist spalte der Name der Spalte in der Datenbank die Dich interessiert. Anstatt echo kannst Du natürlich auch anders mit der Variablen arbeiten.

    Ich benutze dieses Skript immer, da mir der ganze Overhead auf den Keks geht, der nötig ist, wenn man von PHP aus auf Datenbanken zugreifen möchte...
    Vielleicht hilft es Dir ja auch...
     
  10. ThaHammer

    ThaHammer MacUser Mitglied

    Beiträge:
    3.276
    Zustimmungen:
    13
    MacUser seit:
    01.06.2004
    not Null in php
     
Die Seite wird geladen...

Diese Seite empfehlen