webForumDet fria alternativet
Logga in / Bli medlem

INSERT fel!

Databaser & SQL

16 svar · 446 visningar · startad av Jacek

Medlem sedan apr. 2000169 inlägg
Trådstart#1

Hej, ar ingen hojdare pa ASP problemlosning sa min sista utvag e detta forumet.

Jag far inte mitt News Insert script att funka. Samma script har funkat nar jag anvande mig av *.mdb databas men har nu bytt till MySQL pga nytt webhotell.

Foljande kod:

If Request.QueryString("status") = "add" Then

	Title = Request.Form("Title")
	User = Session("MemberId")
	Datum = Request.Form("Date")

	Text = request.form("Text")
	Text = REPLACE(Text, chr(10), "<br>")

	SQLStmt = "INSERT INTO News "
	SQLStmt = SQLStmt & "(Title, Text, User, Date) "
	SQLStmt = SQLStmt & "VALUES('" & Title & "', '" & Text & "', '" & User & "', '" & Datum & "'); "
	objConn.Execute(SQLStmt),,128   *** LINE 22 ***
	objConn.Close
		
	Response.Redirect "news.asp"

End If

Detta fel uppstar:

ADODB.Connection.1 error '80004005'

SQLState: 42000
Native Error Code: 1064
[TCX][MyODBC]You have an error in your SQL syntax near '; ' at line 1

/site/amn/news.asp, line 22

Medlem sedan apr. 2001425 inlägg
#2

Ta bort ; -tecknet på rad 21

Medlem sedan juni 200032 967 inlägg
#3

För det första; avslutar man SQL-frågor i MySQL med semikolon? Du behöver det i alla fall inte.
För det andra: fältnamnet Text kan vara reserverat, och så även Date. De är i alla fall reserverade i ANSI-SQL. Byt namn på de fälten.
För det tredje: Skriv ut den färdiga SQL-frågan istället för execute. Det är mer intressant än att se den koden som skapar den felaktiga SQL-frågan.

mvh

Medlem sedan apr. 20003 174 inlägg
#4

@nders skrev:

För det andra: fältnamnet Text kan vara reserverat, och så även Date. De är i alla fall reserverade i ANSI-SQL. Byt namn på de fälten.

*Verifierar*

I MS Access är Text och Date reserverade ord.
En komplett lista finns här

Medlem sedan sep. 20026 425 inlägg
#5

Man kan även skriva [Text] i stället för Text samt [Date] i stället för Date, det går bra. (Fast @nders gillar inte det.. ;))

Medlem sedan juni 200032 967 inlägg
#6

Jag tror inte man kan klamra när det gäller MySQL, och man borde inte kunna göra det överhuvudtaget. Att använda reserverade ord som fältnamn är en styggelse. ;)

Mvh,

Medlem sedan sep. 20026 425 inlägg
#7

@nders skrev:

Jag tror inte man kan klamra när det gäller MySQL, och man borde inte kunna göra det överhuvudtaget. Att använda reserverade ord som fältnamn är en styggelse. ;)
Mvh,

Jo, det är nog det.. Mankan ju alltid köra med t_Name, t_Date etc. som fältnamn. t skulle kunna stå för table till exempel.. ;)

Medlem sedan dec. 200012 464 inlägg
#8

Text är inte ett reserverat ord i ANSI. Det finns ingen datatyp som heter text, den riktiga benämningen är CLOB eller CHARACTER LARGE OBJECT.

Medlem sedan juni 200032 967 inlägg
#9

MySQL.com skrev:

The following symbols (from the table above) are disallowed by ANSI SQL but allowed by MySQL as column/table names. This is because some of these names are very natural names and a lot of people have already used them.

ACTION
BIT
DATE
ENUM
NO
TEXT
TIME
TIMESTAMP

Jag vet inte riktigt vad det betyder, men min tolkning är att TEXT tillåts i MySQL men inte i ANSI SQL. Det spelar mindre roll egentligen, men det är alltid bra att veta vad som gäller. :bire

Medlem sedan dec. 20003 887 inlägg
#10

[Reserverat Ord] är Stygian Notation ;)

Lista på Reserved Words i MySQL.

Jag chansar på att det är Date som jäklas för dig så kolla lite här.

Medlem sedan dec. 200012 464 inlägg
#11

Flyttad från ASP

Medlem sedan apr. 2000169 inlägg
#12

Här kommer hela koden!

<%

Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "Driver={MySQL};SERVER=localhost;"+ "DB=xxx;PORT=3306;UID=xxx;PWD=xxx;"

Set RsNews = objConn.Execute("SELECT * FROM News Order by Datum desc")

' ########## ADD NEWS #########

If Request.QueryString("status") = "add" Then

Title = Request.Form("Title")
User = Session("MemberId")
Datum = Request.Form("Datum")

News = request.form("News")
News = REPLACE(News, chr(10), "\<br\>")

SQLStmt = "INSERT INTO News "
SQLStmt = SQLStmt & "(Title, News, User, Datum) "
SQLStmt = SQLStmt & "VALUES('" & Title & "', '" & News & "', '" & User & "', '" & Datum & "'); "
objConn.Execute(SQLStmt),,128
objConn.Close
	
Response.Redirect "news.asp"

End If

' #################################

%>

Jag ändrade DATE och TEXT men får fortfarande samma fel. =(

Medlem sedan juni 200032 967 inlägg
#13

@nders skrev:

För det tredje: Skriv ut den färdiga SQL-frågan istället för execute. Det är mer intressant än att se den koden som skapar den felaktiga SQL-frågan.

Medlem sedan apr. 2000169 inlägg
#14

Jag är säkert trög när det gäller sådant, men jag skulle tippa att du menar hela sidan, eller menar du något från databasen. Första gången jag använder mig av MySQL därför jag e lite trög =D

Medlem sedan juni 200032 967 inlägg
#15

Det har inget med MySQL att göra, utan vanlig felsökningsprincip när man pillar SQL-frågor som inte fungerar.

SQLStmt = "INSERT INTO News " 
SQLStmt = SQLStmt & "(Title, News, User, Datum) " 
SQLStmt = SQLStmt & "VALUES('" & Title & "', '" & News & "', '" & User & "', '" & Datum & "'); " 
[b]Response.write "<b>SQLStmt: </b>" & SQLStmt
'objConn.Execute(SQLStmt),,128[/b]

Mvh,

Medlem sedan apr. 2000169 inlägg
#16

Ok.. Löste problemet i alla fall..

Tog bort ; som var på en annan rad, och inte den raden Erroret peka på..

Från:
& Datum & "'); "

Till:
& Datum & "') "

Medlem sedan juni 200032 967 inlägg
#17

När det är fel på en SQL-fråga pekar felmeddelandet alltid på den raden där SQL-frågan exekveras.

For future reference: Det kan vara bra att lyssna på Macce. :P

Mvh

264 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)