Avatar billede jb2000 Nybegynder
04. maj 2005 - 16:03 Der er 11 kommentarer

INSERT or UPDATE

Hej

Jeg skal ændre min database, men spørgsmålet er om jeg skal insert eller update. Dette kommer naturligvis an på om der findes ligende poster. Jeg roder lige med følgende:

@sql_2    = mysql_query("UPDATE tabel SET tlf = '$a' WHERE id = '$i'");

$sql_2_antal = mysql_num_rows($sql_2);

if ($sql_2_antal > 0 )    
  echo " ok<br>";
else
  echo " INSERT, kræves<br>";

Fejlen ligger nok i at man ikke kan bruge
mysql_num_rows($sql_2)

Hvordan tester jeg om der er indsat noget i min tabel??
Avatar billede barklund Nybegynder
04. maj 2005 - 16:07 #1
Først kan du jo udvælge med en SELECT for at se, om det er en id='$i' - men du kan også bruge REPLACE INTO, som netop indsætter, hvis rækken ikke findes og hvis den findes opdaterer i stedet:

mysql_query("REPLACE INTO tabel SET tlf = '$a' WHERE id = '$i'");

Men så vil alle eventuelle øvrige attributter blive sat til ingenting i samme ombæring - hvis der altså er flere attributter.

--
Morten Barklund
Avatar billede jb2000 Nybegynder
04. maj 2005 - 16:09 #2
Tak

Der er dog flere attributter. Så måske jeg bare skal teste med en SELECT.
Avatar billede sukos Juniormester
04. maj 2005 - 16:10 #3
$sql = "UPDATE tabel SET tlf = '$a' WHERE id = '$i'";
if(false == mysql_query($sql)) {
mysql_query("INSERT INTO tabel (tlf) VALUES ('". $a ."')") or die (mysql_error());
}

går så ud fra at dit felt id er autoincrement?
Avatar billede barklund Nybegynder
04. maj 2005 - 16:14 #4
mysql_query vil altid returnere true for en UPDATE hvis der ikke er en SQL-fejl i sætningen - uanset om der opdateres nogle rækker eller ej.

Alternativt kunne man bruge mysql_affected_rows(), men hvad nu hvis rækken findes men bare allerede har det telefonnummer, som man opdaterer til.

if (mysql_result(mysql_query("SELECT COUNT(1) FROM tabel WHERE id = '$i'"), 0) == 0) {
  // indsæt ny:
  mysql_query("INSERT INTO tabel SET tlf = '$a'");
} else {
  // opdater eksisterende
  mysql_query("UPDATE tabel SET tlf = '$a' WHERE id = '$i'");
}

--
Morten Barklund
Avatar billede sukos Juniormester
04. maj 2005 - 16:43 #5
hov ja sgu! Det var jeg ik' lige klar over!
Avatar billede coderdk Praktikant
04. maj 2005 - 16:46 #6
$sql_2_antal = mysql_affected_rows($sql_2);
Avatar billede barklund Nybegynder
04. maj 2005 - 16:52 #7
coderdk, hvad nu hvis rækken findes men har det rigtige telefonnummer allerede? Så vil affected rows være 0, men vi ønsker jo ikke en ny række indsat af denne årsag?
Avatar billede coderdk Praktikant
04. maj 2005 - 16:58 #8
Ja, men man må da antage at der bliver lavet en update fordi at telefonnummeret er ændret  - Sådan laver jeg i hvert tilfælde mine ting ;)
Avatar billede coderdk Praktikant
04. maj 2005 - 16:59 #9
I dit sidste forslag checker du jo heller ikke om telefonnummeret er ændret, kun på ID ;)
Avatar billede barklund Nybegynder
04. maj 2005 - 17:00 #10
coderdk, jeg tror det basalt set handler om, at hvis id'et findes skal denne række opdateres (muligvis med det samme telefonnummer, det er sagen fuldstændigt underordnet), men hvis det ikke findes, skal rækken indsættes.
Avatar billede coderdk Praktikant
04. maj 2005 - 17:05 #11
Tjah, ved nærmere eftersyn og -tanke giver hans oprindelige skitse til koden heller ikke så megen mening :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester