WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   SQL UPDATE (https://www.wn.se/forum/showthread.php?t=16397)

Micke_ 2006-09-22 10:42

Jag har ett enkelt UPDATE script men får det inte att funka. Hur kan lägga in felhantering för att se exakt vad problemet är?

Kod:

function insert_ordernr($ordernr)
{
  global $db, $host, $user, $pass;

  mysql_connect("$host","$user","$pass");
 
  $sql="UPDATE ordernr SET order='$ordernr'";
 
  mysql_db_query("$db", "$sql");
  mysql_close();
}


DeSoto 2006-09-22 10:48

Lägg din db-koppling i en egen fil så att du bara har raden mysql_connect() på ett ställe.

Använd inte mysql_db_query, eftersom den är föråldrad, och kommer förmodligen försvinna om några versioner. Använd mysql_query() istället.

När du skriver din sql-fråga på det sättet, så uppdateras alla poster och får det ordernumret. Så ska det väl inte vara? Du ska nog ha en where där någonstans också.

Felmeddelanden hittar du i mysql_error(). T.ex:

if( !mysql_query( $sql ) )
{
return mysql_error();
}
else
{
return true;
}

mersault 2006-09-22 10:51

Vill du bara kolla det just här, lägg in ett "echo mysql_error;" direkt efter queryn. Generellt är det väl annars alltid bra att kolla så att mysql_db_query returnerar en resource. Det är inte helt fel att ha en snygg wrapper-klass som sköter anslutningarna och frågorna, och loggar fel i en logg automatiskt...

Micke_ 2006-09-22 11:15

Citat:

När du skriver din sql-fråga på det sättet, så uppdateras alla poster och får det ordernumret. Så ska det väl inte vara? Du ska nog ha en where där någonstans också.
tabellen "ordernr" innehåller bara en kolumn: "order" som ska uppdateras. Man måste väl inte ha ett WHERE också?
Citat:

Felmeddelanden hittar du i mysql_error(). T.ex:

if( !mysql_query( $sql ) )
{
return mysql_error();
}
else
{
return true;
}

mysql_error returnerar:
Citat:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'order = '2222'' at line 1

mersault 2006-09-22 11:23

Micke>> Att ha en tabell som bara innehåller en enda kolumn "order" låter väldigt mysko. Vad behöver du den till? Det känns som att den tabellen antagligen är onödig, databaser handlar ju om relationer och om du bara har ett värde finns det inte mycket att relatera till? Något mer än självordernumret lär du ju vilja spara?

Med det upplägget finns det ju inte ens någon anledning att "uppdatera" ordernumret.
För att "uppdatera" borde du ju som sagt använda vad ordernumret var tidigare också,
tex. UPDATE ordernr SET order= någonting WHERE order = gammalt värde,
men det blir lite meningslöst som sagt.

Micke_ 2006-09-22 11:34

jag vill skapa ett ordernummer som skickas med beställningen i ett email. jag hämtar därför senaste ordernumret, adderar med 1, och skickar tillbaka till databasen. jag är inte intresserad av att lagra alla ordrar i databasen, därav bara en rad i databasen.

kanske finns det ett enklare sätt att lösa det på?

mersault 2006-09-22 11:48

Micke>> OK, så du har inte bara en kolumn utan även bara en rad! Då är jag med. Trodde du hade en lång lista på ordernr: 1,2,3,4,5,6,7,8,9... osv

Lättast möjliga är väl annars att bara lagra det i en liten fil. Men eftersom du var inne på mysql:

UPDATE ordernr SET ordernr= ordernr+1
ska funka varje gång du vill öka ordernumret.
ORDER är ett keyword i mysql så det ska du inte använda. Ändra alltså kolumnnamnet till ordernr eller ngt annat som i min fråga.

Micke_ 2006-09-22 12:05

Citat:

ORDER är ett keyword i mysql så det ska du inte använda. Ändra alltså kolumnnamnet till ordernr eller ngt annat som i min fråga.
Det var alltså detta som var hemligheten! Snacka om att höll på att slita av mig håret över detta, hade dock mina aningar att det hade något att göra med databasen..

tusen tack!

mersault 2006-09-22 12:19

Micke>> Hehe, kan trösta dig med att jag ju inte upptäckte det direkt heller.
Det har hänt mig själv flera gånger och det tar alltid lika lång tid innan poletten trillar ner...


Alla tider är GMT +2. Klockan är nu 20:35.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson