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

Code: Alles auswählen

if( $row = $db->sql_fetchrow($result) )
und

Code: Alles auswählen

if( !$db->sql_query($sql) )
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:

Code: Alles auswählen

while ($row = $db->sql_fetchrow($result))
{

}
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

Code: Alles auswählen

$db->sql_numrows($id)
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! ;-)