Als waarde bestaat Update anders Insert (opgelost)
Gewijzigd op 01/01/1970 01:00:00 door Raymond
mysql.com:
REPLACE works exactly like INSERT, except that if an old row in the table has the same value as a new row for a PRIMARY KEY or a UNIQUE index, the old row is deleted before the new row is inserted.
http://dev.mysql.com/doc/refman/5.0/en/replace.html
hij mag alleen niet de bestaande regel weggooien
$result=mysql_query($qstring);
if($result === false)
{
return mysql_error();
}
else
{
return $result;
}
}//einde functie
dit is de code die ik nu gebruik. ff ter verduidelijking
als de cat niet bestaat moet er dus een insert gemaakt worden.
Je kunt met de bijzondere MySQL-syntax aan de slag gaan, maar je zou ook een 2 standaard queries kunnen uitvoeren.
1) INSERT de gegevens die je wilt invoeren.
2) Controleer of de INSERT is mislukt en foutnummer 1062 (in MySQL) heeft opgelevert.
3) 1062? Dan bestaat het record blijkbaar al, er is een UNIQUE-constraint overtreden. Voer nu de UPDATE-query uit.
4) Controleer of de UPDATE correct is uitgevoerd en slechts 1 record heeft aangepast.
Deze opzet werkt in iedere database, dus niet alleen MySQL. Je zult bij andere databases alleen even moeten zoeken naar de specifieke foutmelding. PostgreSQL geeft bv. exact aan welke UNIQUE-constraints zijn overtreden, MySQL roept alleen maar dat er ergens iets is overtreden.
Overigens kun je dit soort zaken nog beter in een TRANACTION doen, zeker omdat je met een UPDATE werkt. In MySQL ben je dan wel verplicht om met innoDB te werken.
zoiets if ($result == iets){
}
raymond schreef op 28.09.2007 16:27:
Het zal ongetwijfeld aan mij liggen, maar ik heb geen idee wat je hier probeert te zeggen. Gokje: Heb je het over de foutafhandeling?ik d8 dat het ook met een sql comando kan.
zoiets if ($result == iets){
}
zoiets if ($result == iets){
}
In feite doet deze het precies andersom als wat jij aangeeft: eerst insert, als dat mislukt door een dubbele waarde, dan bestaande row updaten. Dit geeft hetzelfde resultaat.
Zie de handleiding
ik voor een simple check uit op de rijen en naar het resultaat van die check een update insert.
zie hieronder de code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?
function updateContentSfeer($cat, $name, $afbeelding, $tekst) {
include("conectPol.php");
$qstring="SELECT * FROM sfeerpages WHERE cat=".$cat."";
$result=mysql_query($qstring);
if (mysql_num_rows($result) == 1)
{
$qstring="UPDATE sfeerpages SET name='".$name."', afbeelding='".$afbeelding."', tekst='".$tekst."' WHERE cat=".$cat."";
$result=mysql_query($qstring);
if($result === false)
{
return mysql_error();
}
else
{
return $result;
}
}
else
{
$qstring="INSERT INTO sfeerpages (cat, name, afbeelding, tekst) VALUES (".$cat.", '".$name."', '".$afbeelding."', '".$tekst."')";
$result=mysql_query($qstring);
if($result === false)
{
return mysql_error();
}
else
{
return $result;
}
}
}
?>
function updateContentSfeer($cat, $name, $afbeelding, $tekst) {
include("conectPol.php");
$qstring="SELECT * FROM sfeerpages WHERE cat=".$cat."";
$result=mysql_query($qstring);
if (mysql_num_rows($result) == 1)
{
$qstring="UPDATE sfeerpages SET name='".$name."', afbeelding='".$afbeelding."', tekst='".$tekst."' WHERE cat=".$cat."";
$result=mysql_query($qstring);
if($result === false)
{
return mysql_error();
}
else
{
return $result;
}
}
else
{
$qstring="INSERT INTO sfeerpages (cat, name, afbeelding, tekst) VALUES (".$cat.", '".$name."', '".$afbeelding."', '".$tekst."')";
$result=mysql_query($qstring);
if($result === false)
{
return mysql_error();
}
else
{
return $result;
}
}
}
?>
bedankt allemaal voor de snelle hulp!!!
Hier heb je maar één query in plaats van 2. Hierbij is het wel nodig om het veld cat als UNIQUE te definiëren.
@Josh je mist SET
documentatie kan halen is SET niet benodigd in deze context
Klaasjan, voor zover ik uit de