Dag allemaal

Ik heb de volgende code:


<?php
foreach($this->alle_gegevens as $key => $value)
{
	if(!eregi('naar', $key))
	{
		if(is_array($value))
		{
			$value = $value['mc'];
			$mc = 1;
		}
		else
		{
			$mc = 0;
		}
		
		$query_check = mysql_query("SELECT
										id
									FROM
										antwoorden
									WHERE
										gebruiker = 1
										AND
										vraag = '".$key."'");
		
		if(mysql_num_rows($query_check) == 0)
		{
			$query = mysql_query("INSERT INTO
									antwoorden
									(
										vraag,
										antwoord,
										gebruiker,
										mc
									)
								  VALUES
								  (
								  	'".$key."',
								  	'".$value."',
								  	1,
								  	".$mc."
								  )");
		}
		else
		{
			$query = mysql_query("UPDATE
									antwoorden
								SET
									antwoord = '".$value."',
									mc = ".$mc."
								WHERE
									gebruiker = 1
									AND
									vraag = '".$key."'");
		}
		
	}
}
?>


Hiet zitten dus 2 dingen in die me niet zinnen:
- Ik moet eerst een SELECT doen, en daarna kiezen of ik wil UPDATEN of INSERTEN
- Die foreach

Dit moet netter kunnen denk ik.. iemand sugesties?

Groet
Newb
Zet de juiste UNIQUE op de juiste (combinatie van) kolom (-men) en gebruik de syntaxINSERT ... ON DUPLICATE KEY UPDATE om de boel te inserten of te updaten. De database zal dan zelf kiezen wat er moet gebeuren.

Maar let dus goed op de UNIQUE, die bepaalt of er een INSERT of UPDATE moet plaatsvinden.

Edit: I.p.v. 3 queries kun je dus met 1 query uit de voeten. En scheelt ook nog weer in de PHP-code. Dat ruimt lekker op!
Je zou er ook voor kunnen kiezen om de multi_query van Mysqli te gebruiken.
zie de tut van Blanche
http://www.phphulp.nl/php/tutorials/8/533/

en hier een klein voorbeeldje:
<?php
$mysqli = new mysqli('host', 'user', 'password', 'database');
if(mysqli_connect_errno())
{
trigger_error('Fout bij verbinding: '.$mysqli->error);
}

$sql = "
INSERT INTO gegevens (naam, email)
VALUES ('Piet', '[email protected]')
;
UPDATE inserts
SET last_insert = NOW()
WHERE naam = 'Piet'
";

if(!$mysqli->multi_query($sql))
{
trigger_error('Fout in query: '.$mysqli->error);
}
else
{
do
{
if($mysqli->affected_rows > 0)
{
echo 'Query gelukt <br>';
}
}
while($mysqli->next_result());
}
?>
@Mark: Leuk dat je iets roept over mysqli(), maar dat is het probleem niet. Het is namelijk de bedoeling dat er een keuze wordt gemaakt uit een INSERT of UPDATE, zie de logica. Dan kun je dus niet zowel een INSERT áls een UPDATE naar de database gaan sturen...
pgFrank schreef op 28.07.2007 20:14
@Mark: Leuk dat je iets roept over mysqli(), maar dat is het probleem niet. Het is namelijk de bedoeling dat er een keuze wordt gemaakt uit een INSERT of UPDATE, zie de logica. Dan kun je dus niet zowel een INSERT áls een UPDATE naar de database gaan sturen...


dat is waar maar het zo wel een stuk korter zijn dan de oude methode..

Edit:
het is Marco i.p.v Mark..... :P
dat is waar maar het zo wel een stuk korter zijn dan de oude methode..
Maarja wat heb je aan een kortere code als die niet werkt? ;)

De oplossing die Frank aandraagt is de netste oplossing.
Mark is korter dan Marco... Slaat nergens op, maar dat is ook met jouw verhaal over mysqli het geval. Dat heeft gewoon niks met het probleem te maken, het draait om de SQL en niet om de manier waarop je de SQL naar de database stuurt.

Ps. Sorry dat ik je naam verkeerd schreef, heb daar zelf altijd een hekel aan. Zal beter opletten.
Bedankt Frank, want nu kan ook die loop weg en kan ik het vervangen door 1 query. heele rg bedankt ;-)

Reageren