24. august 2002 - 22:56Der er
11 kommentarer og 1 løsning
ASP og WHERE i SQL
Hej, jeg har et problem jeg ikke kan se hvorfor egentlig eksisterer.
Det er et login-script, og jeg får "username" og "password" fra en anden side.
Men når jeg udfører denne SQL linie:
strSQL = "SELECT * FROM login WHERE password=" & Request.Form("username")
Så får jeg denne fejl:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC SQL Server Driver][SQL Server]Invalid column name 'sago'.
/login.asp, line 13
Det er hvis username = sago. Hvorfor får jeg denne fejl? Jeg har et andet script helt magen til, bortset fra at jeg bruger et tal i min WHERE clause (det er et id-nummer, dog på en anden table)
Hvad skal jeg gøre for at få det til at virke? på forhånd tak.
Synes ellers jeg prøvede det, men jeg må have glemt noget. Takf or svaret.
Men nu får jeg denne fejl...
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC SQL Server Driver][SQL Server]The text, ntext, and image data types cannot be used in the WHERE, HAVING, or ON clause, except with the LIKE or IS NULL predicates.
/login.asp, line 13
Betyder det bare at jeg ikke kan bruge ntext når jeg bruger WHERE? Synes det lyder lidt mærkligt? (det er MS SQL)
fejlen '80040e14' betyder typisk man har stavet et kolonnenavn forkert. Det kan evt også være fordi password er reserveret ord så prøv at sætte [] omrking:
strSQL = "SELECT * FROM login WHERE [password]= '" & Request.Form("username") & "';"
Ja men hvis man ikke bruger wildchars så skulle den virke som = .. Findes der ikke en type som heddder VChar eller char ??? som kan bruges hvor man angiver en max længde på kolonnen.
En anden ting i et login system er det meget vigtigt at ændre et ' til to '' i username og password da et ' bliver toldet som start og slut på en streng, men to bliver tolket rigtigt eks Ole's bil.. HVis du i brugernavn ikke tillader ' kan du ændre ' til indenting "":
Når man bruger ' omkring tekst i SQL så er det altid en god ide at lave et ' om til to '' så man ikke let kan "hakke" sig ind på din side. For man kan nemlig udnytte ' til at afsluttte en streng.. Så din SQL skulle se ud i stil med:
strSQL = "SELECT * FROM login WHERE password LIKE '" & Replace(Request.Form("username"), "'", "''") & "'"
Jeg ændede det til varchar, og nu virker det fint med =.
Synes godt om
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.