DonatelloMedlem sedan jan. 2005108 inlägg
Ny dag, nya tag... För er. Själv tänkte jag nanna snart. :)
Något att klura på, som jag behöver hjälp med:
<%
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.open "PROVIDER=MICROSOFT.JET.OLEDB.4.0;DATA SOURCE=x:\databas.mdb;"
sqlstmt = "UPDATE article SET (title=?), (content=?), (editdate=?) WHERE (ID=?)"
Set cmd = server.createobject("ADODB.command")
cmd.activeConnection = conn
cmd.CommandText = SQLStmt
Set temp = cmd.Execute (, array(title, content, swedate, id))
Set cmd = Nothing
%>
Microsoft JET Database Engine error '80040e14'
Syntax error in UPDATE statement.
/admin/dbcg/default.asp, line 158
I korta drag, hur gör jag UPDATE ála parameteriserad fråga? SELECT och INSERT INTO har jag både hittat exempel på och lyckats med, men har kört fast nu. Hur jag än vänder och vrider på det, så klagas det.
Tacksam för hjälp...
Natti!
LarsGMedlem sedan dec. 200012 465 inlägg
sqlstmt = "UPDATE article SET title=?, content=?, editdate=? WHERE ID=?"
DonatelloMedlem sedan jan. 2005108 inlägg
Funkar, men känns inte rätt.... Finns det nån logisk förklaring till varför man använder paranteser på INSERT INTO och SELECT, men inte här?
spangoMedlem sedan juni 20006 147 inlägg
I SELECT:s behöver du inte ha paranteser, även om det är syntaktiskt korrekt (eftersom man där använder sig av boolska uttryck i stället för tilldelningssatser, och uttryck är alltid OK att ha inom parantes). Det är bara i INSERT det är obligatoriskt.
J.N.Medlem sedan apr. 20031 660 inlägg
HEJ!
Jag har en kompletterande fråga, hur skriver man ut sqlstmt?
Om man skriver ut variabeln på raden
sqlstmt = "UPDATE article SET (title=?), (content=?), (editdate=?) WHERE (ID=?)"
får man väl
"UPDATE article SET (title=?), (content=?), (editdate=?) WHERE (ID=?)"
Hur får man fram frågan man vill köra med värden i?
DonatelloMedlem sedan jan. 2005108 inlägg
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.open "PROVIDER=MICROSOFT.JET.OLEDB.4.0;DATA SOURCE=x:\databas.mdb;"
Set cmd = server.createobject("ADODB.command")
cmd.activeConnection = conn
SQLStmt = "UPDATE article SET title=?, content=?, editdate=? WHERE ID=?"
cmd.CommandText = SQLStmt
Set databasevalues = cmd.Execute (, array(title, content, swedate, id))
Inom paranteserna på nedersta raden anger du vad som egentligen ska vara där frågetecknena är.
J.N.Medlem sedan apr. 20031 660 inlägg
HEJ!
Jo, så långt är jag med!
Men, bara för att jag vet vad som finns i dom innebär det inte att servern håller med §jr
Det går ju att skriva om
SQLStmt = "UPDATE article SET title=?, content=?, editdate=? WHERE ID=?"
med värdena i om man vill se vad man gör.
Men, är det så man ska göra?
DonatelloMedlem sedan jan. 2005108 inlägg
Ska du skydda dig mot SQLinjections, så är det här rätt tillvägagångssätt...
Jag redigerade en liten miss i mitt förra inlägg. Något jag lyckas missa tre av fyra gånger. Kolla så du inte gjort samma sak. Array i nedersta raden..
Får du nåt felmeddelande, så kan du väl klistra in det här... Har fått så fett mycket felmeddelanden att jag börjar lära mig dom utantill. :p
J.N.Medlem sedan apr. 20031 660 inlägg
HEJ!
Donatello skrev:
Ska du skydda dig mot SQLinjections, så är det här rätt tillvägagångssätt...
Jo, det är därför jag ska använda det vid tillfälle.
Men, för att kunna använda något nytt måste man veta om nackdelarna, tex att jag isåfall måste lösa hur man skriver ut sql:en enklast.
Det jag jämför med är följande:
I ett annat projekt har en funktion med ExecuteSQL använts, det innebär att sql-fel händer i includefilen och inte på raden där felet är.
Har man då mer än ett funktionsanrop till denna funktion i samma fil, vet man inte direkt var felet är = jobbigare felsökning.
Därför använder jag inte en sådan funktion, utan kör sql-frågan direkt i sidan eller infogade filer, hela funktioner etc där man ser direkt vilken rad felet är på.
DonatelloMedlem sedan jan. 2005108 inlägg
Vet inte om jag hänger med riktigt.... För mycket programmerande och för lite sömn sätter sina spår... *gäääsp* :OO
Kan du inte slänga ut alla rader överallt där du behöver det och skrota function? Blir en del extrakod, men personligen tycker jag det är lättare att få överblick över vad som händer, inte händer och borde hända på det sättet...
Eller vänta till @nders svarar... Han verkar kunna svara på precis allt.... ;)
J.N.Medlem sedan apr. 20031 660 inlägg
HEJ!
Nja, slänga ut funktionen vill jag knappast, den innehåller ju db-anropet och rs-skapning.
Jag får helt enkelt testa och se hur krångligt det blir, hur man arbetar sig runt det.