26. november 2019 - 11:19Der er
11 kommentarer og 1 løsning
UPDATE virker ikke.
Jeg har en mysql databasetabel medlemmer2, med et felt, der hedder M_kort_sendt og har datatypen TINYINT. Den kan jeg ikke få til at ændre værdi med UPDATE.
Koden er: $sql = "UPDATE ".$tabel." SET M_kort_sendt = 1 WHERE $tabel.id = ".$box." LIMIT 1 "; echo "sql: ".$sql."<br>"; if (mysqli_query($forbindelsen, $sql)) { echo "Posten updateret<br>"; } else { echo "Fejl ved upload af data: " . mysqli_error($forbindelsen)."<br>"; }
Det resulterer i følgende på skærmen: sql: UPDATE medlemmer2 SET M_kort_sendt = 1 WHERE medlemmer2.id = 159 LIMIT 1 Posten updateret
Men der er ikke ændret i feltet.
Jeg har prøvet med andre felter, stadig uden resultat. Ligeledes har jeg prøvet med andre datatyper uden positivt resultat. For at tjekke har jeg prøvet med forkerte feltnavne og det giver fejlmeldinger.
Jeg er ikke sikker på, at det er fejlen, men jeg undrer mig lidt over din "LIMIT 1". Har du flere medlemmer med samme id? Og hvis ja, hvordan sikrer du dig så, at det er det rigtige medlem, der får ændret status?
Nej, der er ikke flere medlemmer med samme id! LIMIT 1 er noget, som blev anbefalet i det hæfte, hvor jeg første gang lærte om databaser. Og det skulle ikke skade bortset fra de mikrosekunder det tager ekstra. Men jeg er kommet til at tænke på, at der engang var noget med, at man skulle opdatere alle felter for at det lykkedes. Har det været en betingelse engang?
Prøv at udskifte ".$tabel." med tabelnavnet og ".$box". med en fast værdi for at se om der mangler nogle tegn rundt om variablerne. Ellers prøv med et kopi af dette: Function opdater_via_id($mysqli,$tabel_navn,$kol1,$var1,$id,$var2) { if($stmt=$mysqli->prepare('UPDATE `'.$tabel_navn.'`SET `'.$kol1.'`=? WHERE`'.$id.'`=? ')) {$stmt->bind_param('si',$var1,$var2); if($stmt->execute()) {//echo '<br>STMT close i OPDATER_VIA_ID i '.$tabel_navn .'<br>'; $stmt->close();} else { //echo '<br>STMT dør i OPDATER_VIA_ID i '.$tabel_navn .'<br>'; die($stmt->error);} } else { echo '<br>MYSQL dør i OPDATER_VIA_ID i '.$tabel_navn .'<br>';die($mysqli- >error); }//$stmt->close();
ejvindh: At man skal opdatere alle felter, der er defineret i tabellen. Hvis der var defineret tre felter ( felt1, felt2 og felt3 ), så skulle man skrive $sql = "UPDATE ".$tabel." SET felt1 = 1, felt2 = 2, felt3 = 3 WHERE $tabel.id = ".$box." LIMIT 1 ";
tvilling53: Jeg har prøvet med faste værdier, det ændrer ikke noget. Dit forslag venter jeg lige lidt med, da jeg ikke kan gennemskue det!
arne_v: UPDATE medlemmer2 SET M_kort_sendt = 1 WHERE medlemmer2.id = 159 gør ingen forskel. Hvordan skal jeg helt nøjagtigt bruge SELECT * FROM medlemmer2 WHERE medlemmer2.id = 159
@KurtG: Ok, så forstår jeg bedre. Men nej, det tror jeg altså ikke har været krævet. Men grundlæggende tror jeg nok jeg går mere ind for ikke at skulle have brug for LIMIT-vedhæftningen, da jeg forestiller mig, at det netop kan give uforudsigelige resultater. Hvis der f.eks. skulle være mere end én række, der har ID 159, så kan det jo være, at din UPDATE faktisk gør som den skal, og du bare tjekker på den forkerte. Derfor er jeg også lidt spændt på, hvilket resultat arne_v's SELECT giver.
Jeg har dummet mig rigtig meget. Jeg skulle ikke bruge 'id' men i stedet medelemsnummeret, som ligger i 'Nr'. Jeg vil gerne give en stor undskyldning til jer, der har forsøgt at hjælpe mig. Mvh Kurt
Der er ikke noget usædvaneligt i at der er lavet en fejl.
Der er en gammel vittighed som oversat til dansk må lyde: Hvis fejlfinding af kode er at fjerne fejlene fra koden, så må det at skrive koden jo være at putte fejlene i koden.
:-)
Det man kan lære er processen.
Hvis:
$sql = "UPDATE ".$tabel." SET M_kort_sendt = 1 WHERE $tabel.id = ".$box." LIMIT 1 ";
ikke opdaterer noget, så prøver man uden variable og uden LIMIT:
UPDATE medlemmer2 SET M_kort_sendt = 1 WHERE medlemmer2.id = 159
hvis den heller ikke opdaterer så prøver man om en SELECT finder noget:
SELECT * FROM medlemmer2 WHERE medlemmer2.id = 159
hvis den ikke finder noget så checker man uden WHERE:
SELECT * FROM medlemmer2
Synes godt om
1 synes godt om dette
Ny brugerNybegynder
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.