Forum > Webbutveckling relaterat > Databaser och SQL
Hej igen!
Har lite problem med en SQL-sats:
Set RecSet = Conn.Execute("Select * From svar Where id=" & Request.QueryString("id") & " And svarnr=" & Request.QueryString("val"))Sitter och skriver om en sida som tidigare kört på Accessdatabas till MySQL när detta problemet dök upp som jag inte kommer på felet på. Felmeddelandet är följande:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[MySQL][ODBC 3.51
Driver][mysqld-5.0.21-log]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 ''' at line 1
Någon idé om vad det kan vara för tok?
| Skriv utKontrollera att du har båda querystrings, hur ser SQL frågan ut när du skriver ut den? Är det rätt datatyper du försöker mata in?
Det ser i alla fall inte ut som du använder något resarverat ord i din SQL fråga och den ser "korrekt" ut (om fältnamnen finns där osv).
Båda querystringsen har jag och dom innehåller även ett värde, t.ex. 211 och 2 alla datatyper där det är tal är av typen "int(11)" och sen har jag ett fält som innehåller text, den är av datatypen "varchar(350)".
Skriver jag ut allt ser det ut som följer:
Select * From svar Where id= And svarnr=
Microsoft VBScript runtime error '800a01a8'
Object required: 'Response.Write(...)'
Om det är en varchar (du skriver inte vilken det är men jag gissar att det är svarnr, så kall det vara strängar:
Set RecSet = Conn.Execute("Select * From svar Where id=" & Request.QueryString("id") & " And svarnr='" & Request.QueryString("val") & "'")SQL = "Select * From svar Where id=" & Request.QueryString("id") & " And svarnr=" & Request.QueryString("val")
Response.Write(sql)
Response.End()
Set RecSet = Conn.Execute(sql)Angående Varchar datatypen så gäller inte den för någon av de nämna alternativen, det finns en sådan i tabellen, varav jag tog upp de, dessa två är Int(11).
Haha, nu blev det lite fel ja, debuggade och fick detta:
Select * From svar Where id= And svarnr=
Helt sjukt att jag inte får något värde ens ju? De finns ju i Querystringen, som för övrigt ser ut som följer:
Default.asp?do=spara&id=313&val=1
hur ser formulärpostningen ut? Har du glömt att sätt att do måste vara spara innan du gå in i SQL frågan?
Ett formulär finns inte egentligen utan det är en poll där valet man väljer skickas i en länk som ser ut såhär:
<a href="<%=sidan%>?do=rosta&id=<%=Svar("id")%>&val=<%=Svar("svarnr")%>"><%=Svar("svar")%></a>
När man kommer till "rosta" kollar den om man redan röstat genom att kolla om man har en cookie, har man inte gjort det skickas man vidare dit man får felmeddelandet. Där ser allt ut som följer:
If Request.Querystring("do") = "spara" Then
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "driver={MySQL ODBC 3.51 Driver};Server=****;Db=********;UID=*******;Pwd=********"
Set RecSet = Conn.Execute("Select * From svar Where id=" & Request.QueryString("id") & " And svarnr=" & Request.QueryString("val"))
Conn.Execute("Update svar Set klick=klick+1 Where id=" & Request.QueryString("id") & " And svarnr=" & Request.QueryString("val"))Fast.. du kollar ju att do är spara, inte rosta ;)
Jag var aningen otydlig där ser jag, när jag kollar om en aktiv cookie finns skickas man även iväg till spara sedan:
If Request.Querystring("do") = "rosta" Then
If Request.Cookies(sessionnamn1) = sessionnamn then
Response.Redirect sidan
Else
Dim id
id = Request.Querystring("amp;id")
Response.Redirect sidan & "?do=spara&id=" & Request.Querystring("id") & "&val=" & Request.QueryString("val")
End If
End IfI en response.redirect så kör du inte en xHTML validering:
Response.Redirect sidan & "?do=spara&id=" & Request.Querystring("id") & "&val=" & Request.QueryString("val")Response.Redirect sidan & "?do=spara&id=" & Request.Querystring("id") & "&val=" & Request.QueryString("val")Gjorde en test:
http://voigt.se/sandbox/aspkoll/roosweb/
<%
If Request.Querystring("do") = "rosta" Then
For each item in Request.QueryString
Response.Write item & " - " & Request.QueryString(item) & "<br/>"
Next
else
Response.Redirect("default.asp?do=rosta&bob=göran") ' - Gives two item: 'do' and 'bob'
'Response.Redirect("default.asp?do=rosta&bob=göran") ' gives two item: 'do' and 'amp;bob'
End If
%>
Fixade det och det fungerade fint! Vet du av vilken anledning det har fungerat hela tiden förut men inte efter jag bytt till MySQL databasen? XHTML valideringen fixade ju till det, har den så stor roll i det hela att det påverkar Querystring'sen?
Tack voigtan!
Response.Redirect har inget med databaser att göra, så jag har svårt att se att det har fungerat, XHTML är klientsidan. ASP tolken splitar vid en &, not much you can do with that.
Jag tror att det är Dreamweaver som har spökat lite här, det här var inte enda stället där den har försökt skriva om ett tecken i " "-form. Fungerar dock som det ska allt nu igen, såväl koden som programmet.