Seite 1 von 1
MYSQL Rückgaben
Verfasst: 17.08.2007 10:03
von phillip
Hallo
Ich würde gerne ein bisschen über die SQL Rückgaben aufgeklährt werden, bzw. wie Frage ich, ob der Eintrag schon vorhanden ist oder ob ein bestimmter Wert schon irgendwo ist?
ich brauch ein bisschen Erklärung mit den
und
etc.
Verfasst: 17.08.2007 14:13
von S2B
$db->sql_query() gibt false zurück, wenn ein Fehler bei der Ausführung des Queries aufgetreten ist (z.B. ein Syntax-Fehler im Query). $db->sql_fetchrow() gibt false zurück, wenn die aktuelle Zeile nicht existiert.
Diese Scheife:
läuft also so lange weiter, bis keine weitere Zeile mehr vorhanden ist, da bei jedem sql_fetchrow()-Aufruf eine Zeile weiter "gesprungen" wird.
Verfasst: 17.08.2007 18:31
von phillip
mhh ok
sagen wir ich möchte etwas machen (if), wenn mein Verlangtes nicht existiert.
Code: Alles auswählen
$sql = "SELECT * FROM " . TABLE . "
WHERE user_id = $buddy_id AND buddy_id = $self_id AND active = 0 ";
if ( !$row = $db->sql_fetchrow($sql) )
{
$message = 'Ist vorhanden';
}
Dann heissts ja:
Code: Alles auswählen
wenn $row nicht = falsch (also richtig) ist, dann $message.
Stimmt das?
Verfasst: 17.08.2007 18:36
von PhilippK
Nicht ganz. Außerdem kann man das noch etwas optimieren:
Code: Alles auswählen
$sql = "SELECT * FROM " . TABLE . "
WHERE user_id = $buddy_id AND buddy_id = $self_id AND active = 0
LIMIT 1";
if ( $db->sql_fetchrow($sql) )
{
$message = 'Ist vorhanden';
}
Wenn sql_fetchrow FALSE zurückgibt, ist kein Datensatz vorhanden. LIMIT 1 spart SQL die Prüfung weiterer Zeilen, wenn eine gültige gefunden wurde. Und wenn du das Ergebnis nicht auswerten willst, brauchst du es nicht erst zu speichern.
Gruß, Philipp
Verfasst: 17.08.2007 18:46
von phillip
gut vielen Dank.
ich habe jetzt das Ganze ein wenig verschachtelt:
Code: Alles auswählen
$mode = ( isset($HTTP_GET_VARS['mode']) ) ? $HTTP_GET_VARS['mode'] : $HTTP_POST_VARS['mode'];
if ($mode == 'decline')
{
$buddy_id = ( isset($HTTP_GET_VARS['u']) ) ? intval($HTTP_GET_VARS['u']) : 0;
$self_id = $userdata['user_id'];
$sql = "SELECT * FROM " . BUDDIES_TABLE . "
WHERE user_id = $buddy_id AND buddy_id = " . $userdata['user_id'] . " AND active = 0
LIMIT 1";
if ( $db->sql_fetchrow($sql) )
{
$message = 'Ist vorhanden';
}
else
{
$message = 'ist nicht vorhanden';
}
message_die(GENERAL_MESSAGE, $message);
}
Leider bringt er immer die message, es sei nicht vorhanden...
Dabei ist die user_id = 4 und die buddy_id = 2. active ist = 0.
Dann müsste er ja die andere message ausgeben. rein theoretisch ^^
Verfasst: 17.08.2007 19:07
von punkface
ersetzte
Code: Alles auswählen
if ( $db->sql_fetchrow($sql) )
{
$message = 'Ist vorhanden';
}
else
{
$message = 'ist nicht vorhanden';
}
mit
Code: Alles auswählen
if (!($id = $db->sql_query($sql))) {
message_die(GENERAL_ERROR, 'bla bla bla', '', __LINE__, __FILE__, $sql);
}
if ($db->sql_numrows($id)) {
$message = 'Ist vorhanden';
} else {
$message = 'Ist nicht vorhanden';
}
Verfasst: 17.08.2007 19:10
von phillip
ooh, sehr schön!
kannst du mir vielleicht noch erklären, wie du auf die
gekommen bist, und was genau
bewirkt?
Verfasst: 17.08.2007 19:23
von punkface
In $id wird der von sql_db::sql_query zurückgegeben Wert gespeichert. Wie die Variable heißt - ob $result, $id oder $bla - ist egal.
Die Methode sql_db::sql_numrows verwendet, wenn du MySQL verwendest, die PHP Funktion [PHP:mysql_num_rows]. Die Erklärung steht im PHP Handbuch
Verfasst: 17.08.2007 19:25
von phillip
ok, vielen Dank, das hat mir echt geholfen!
