db Abfrage mit leerem Ergebnis
jürgen
- datenbank
Hallo,
wie gehe ich mit einem leeren Ergebnis einer db Abfrage um, d.h es gibt zu den datenanfrage leider keinen Datensatz.
Ich hätte gerne das etwas kommt wie "daten nicht vorhanden"
das hier ist mein php code:
if (!$erg2 = mysql_query("SELECT id_versand FROM taschenraum_rechnungen WHERE ebay_art_nr='$zeile[5]' "))
{
mysql_log(__FILE__,__LINE__);
}
while ($zeile2 = mysql_fetch_array($erg2))
{
// das hier wird ingnoriert,wie geht es korrekt
if ($zeile2[0]==""){
echo "id_taschenraum_versand nicht vorhanden ";
}
$id_taschenraum_versand=$zeile2[0];
echo "id_taschenraum_versand".$id_taschenraum_versand."<br>";
Statt meinem echo "id_taschenraum_versand nicht vorhanden " kommt aber gar nix.
Wer kann mir weiterhelfen?
danke jürgen
Hello,
wie gehe ich mit einem leeren Ergebnis einer db Abfrage um, d.h es gibt zu den datenanfrage leider keinen Datensatz.
Ich hätte gerne das etwas kommt wie "daten nicht vorhanden"
das hier ist mein php code:if (!$erg2 = mysql_query("SELECT id_versand FROM taschenraum_rechnungen WHERE ebay_art_nr='$zeile[5]' "))
Erstmal solltest Du den SQL-String vorher aufbauen lassen und zwischenspeichern, damit Du ihn dier ansehen kannst im Fehlerfalle.
$sql = "SELECT id_versand FROM taschenraum_rechnungen WHERE ebay_art_nr='$zeile[5]' ";
(ich habe den Fehler jetzt absichtlich nicht beseitigt)
$erg = mysqli_query($con, $sql);
if (!$erg)
{
mysql_log(__FILE__, __LINE__, $sql, $mysqli_error($con));
$usertext = "was auch immer Du dem User mitteilen willst nebst Link zum Weiterarbeiten";
}
else
{
while ($zeile2 = mysql_fetch_array($erg))
{
#...
}
}
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hi,
(ich habe den Fehler jetzt absichtlich nicht beseitigt)
Und die eigentliche Frage ebenso absichtlich nicht beantwortet ...? :-)
@jürgen: Du suchst mysql_num_rows.
MfG ChrisB
Hello,
(ich habe den Fehler jetzt absichtlich nicht beseitigt)
Und die eigentliche Frage ebenso absichtlich nicht beantwortet ...? :-)
Nö, so schnell bin ich nicht mehr. Das ist ja erst Teil Zwei der Frage. Ich bin ja nicht mehr der Jüngste ;-P
@jürgen: Du suchst mysql_num_rows.
Und wie muss er das jetzt anwenden?
$sql = "SELECT id_versand FROM taschenraum_rechnungen WHERE ebay_art_nr= ". intval($zeile[5]);
$erg = mysqli_query($con, $sql);
if (!$erg)
{
mysql_log(__FILE__, __LINE__, $sql, $mysqli_error($con));
$usertext = "was auch immer Du dem User mitteilen willst nebst Link zum Weiterarbeiten";
}
else
{
if ($num = mysql_num_rows($erg))
{
$usertext = "<p>Es gab $num Treffer für Ihre Suche</p>";
$_table = array(); ## Eine leere Liste bereitstellen
while ($_zeile = mysql_fetch_array($erg))
{
$_table[] = $_zeile; ## den Datensatz an die Liste anhängen
}
$usertext .= html_table($_table, .. ,.. );
}
else
{
$usertext = "Es gab leider keine Treffer zu Ihrer Suche";
}
}
echo $usertext;
html_table ist eine Funktion, die Du (Jürgen) Dir selber schreiben musst für die Ausgabe eines Daten-Arrays in einer HTML-Tabelle. Sie gehört zur Abteilung "View".
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Moin!
# Baue den SQL-String immer sauber außerhalb der Abfrage. Du erwartest ein Integer? Liefere es.
$sql='SELECT `id_versand`
FROM `taschenraum_rechnungen`
WHERE `ebay_art_nr`=' . intval($zeile[5]);
# Notiere auch das SQL syntaktisch sauber. Macht sich beim Debuggen
# oder Umzug auf weniger tolerante Systeme besser.
# Du willst eventuell Fehler finden? Nutze aus, dass Zeilenumbrüche drin sein dürfen.
$erg2 = mysql_query($sql, $DB); # $DB enthält Deine Verbindungskennung.
# Ich schreib es groß, weil ein vergleichbares "Ding" in Perl
# "Datenbankhandler" heißt.
if (false===erg2) { # Vergleiche genau...
# Fehlerbehandlung. Fürs Testen(sic!) genügt:
die (mysql_error($DB).'<pre>'.$sql.'</pre>'); # Deshalb die Zeilenumbrüche!
}
if (0 < mysql_num_rows($erg2)) { # Liefert die Anzahl der mit Select gelieferten "Zeilen"
while ($row=mysql_fetch_array($erg2, MYSQL_ASSOC)) { # "Fetchen" in ein assoziatives Array;
#Macht wonach es klingt.
echo "id_versand in taschenraum: " . htmlspecialchars(row['id_versand'])."<br>"; # Lucks like a test.
# Du hast nach id_versand gefragt.
# Das wird mit MYSQL_ASSOC auch geliefert und keine Phantasievariable.
}
} else { # Nichts gefunden, nichts geliefert
echo "[link:http://www.duesselrad.de/Hamwanich.55.0.html@title=Hamwanich!]<br>";
}
Gleich meckert jemand, weil ich mal wieder Code geliefert habe.
Was solls.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix
// das hier wird ingnoriert,wie geht es korrekt
if ($zeile2[0]==""){
Das ist eine Unsitte die auch in JS Code zu finden ist.
Es wird immer und überall mit einem Leerstring verglichen, um zu testen ob eine Funktion einen gültigen Wert zurückgegeben hat oder nicht.
Das ist Murks!
Entweder prüfe auf den entsprechenden Typ, bzw. das gegenteil davon (also ein Leerstring, wenn die Funktion einen String zurückgibt, eine Null, wenn du eine Zahl erwartest, null bei einem Objekt und false bei einem bool'schen Rückgabewert) oder wenn du unbedingt die Typumwandlung einer Skriptsprache nutzen möchtest, dann mach es einfach so: if($zeile2) oder if(!$zeile2)
Struppi.