MySql Abfrage liefert Ergebnis...

m0mo

m0mo

Aktives Mitglied
Thread Starter
Dabei seit
26.03.2005
Beiträge
478
Reaktionspunkte
2
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
 
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... :)
 
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.
 
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.
 
maceis schrieb:
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.

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
 
m0mo schrieb:
so viel besser gewesen waere.
Des Weiteren war ja nicht das query wichtig, sondern eher der umgang mit dem Ergebnis.

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.
 
m0mo schrieb:
...
Ich weiss nicht, ob es mit dem hier:
[...]
so viel besser gewesen waere.
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]
 
Ich kann mir das jetzt nicht verkneifen, aber ein kurzer Blick in die Doku hätte das Problem auch gelöst:
http://de.php.net/mysql_query schrieb:
Nur für SELECT, EXPLAIN, SHOW oder DESCRIBE Anweisungen liefert mysql_query() eine Ressourcen-Kennung oder FALSE, falls die Anfrage nicht korrekt ausgeführt wurde. Für alle anderen SQL Anweisungen ist der Rückgabewert von mysql_query() im Erfolgsfall TRUE, im Fehlerfall FALSE. Ein Rückgabewert ungleich FALSE bedeutet, dass die Anfrage gültig war und vom Server ausgeführt werden konnte. Das alleine sagt jedoch überhaupt nichts über die Anzahl veränderter oder gelieferter Datensätze aus. Es ist durchaus möglich, dass eine Anfrage erfolgreich war, ohne einen einzigen Datensatz zur verändern oder zu liefern.

Matt
 
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...
 
not Null in php
 
Zurück
Oben Unten