MYSQL Rückgaben

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
phillip
Mitglied
Beiträge: 933
Registriert: 20.03.2005 12:00

MYSQL Rückgaben

Beitrag 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.
Benutzeravatar
S2B
Ehemaliges Teammitglied
Beiträge: 3258
Registriert: 10.08.2004 22:48
Wohnort: Aachen
Kontaktdaten:

Beitrag 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.
Gruß, S2B
Keinen Support per ICQ/PM!
Hier kann man meine PHP-Skripte und meine MODs für phpBB runterladen.
phillip
Mitglied
Beiträge: 933
Registriert: 20.03.2005 12:00

Beitrag 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?
Zuletzt geändert von phillip am 17.08.2007 18:39, insgesamt 1-mal geändert.
PhilippK
Vorstand
Vorstand
Beiträge: 14662
Registriert: 13.08.2002 14:10
Wohnort: Stuttgart
Kontaktdaten:

Beitrag 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
Kein Support per PN!
Der Sozialstaat ist [...] eine zivilisatorische Errungenschaft, auf die wir stolz sein können. Aber der Sozialstaat heutiger Prägung hat sich übernommen. Das ist bitter, aber wahr. (Horst Köhler)
Meine Mods
phillip
Mitglied
Beiträge: 933
Registriert: 20.03.2005 12:00

Beitrag 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 ^^
Benutzeravatar
punkface
Mitglied
Beiträge: 3579
Registriert: 12.08.2004 23:37

Beitrag 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';
}
phillip
Mitglied
Beiträge: 933
Registriert: 20.03.2005 12:00

Beitrag 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?
Benutzeravatar
punkface
Mitglied
Beiträge: 3579
Registriert: 12.08.2004 23:37

Beitrag 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
Zuletzt geändert von punkface am 17.08.2007 19:26, insgesamt 1-mal geändert.
phillip
Mitglied
Beiträge: 933
Registriert: 20.03.2005 12:00

Beitrag von phillip »

ok, vielen Dank, das hat mir echt geholfen! ;-)
Antworten

Zurück zu „Coding & Technik“