PDA

View Full Version : giúp lỗi JET



dinhty
11-04-2007, 17:25
http://localhost/Adscom/ShoppingCart.asp?option=add&id=1' ( Thêm dấu ' dằng sau ID)
Thì xuất hiện lỗi JET như thế này.


Technical Information (for support personnel)

Error Type:
Microsoft OLE DB Provider for SQL Server (0x80040E14)
Line 1: Incorrect syntax near '~'.
/Adscom/ShoppingCart.asp, line 117

mong các bạn chỉ giúp mình fix lỗi này như thế nào vì mới học SQL và ASP

Yêu Máy Tính
11-04-2007, 22:50
Bạn phải xử lý dấu nháy đơn đi.
Trong một phát biểu SQL được coi là hợp lệ, giá trị truyền vào tồn tại một dấu nháy đơn thì phải có dấu nháy đơn thứ hai, vì dấu nháy này dùng để khai báo hai đầu giá trị.
Nếu chuỗi dữ liệu có một dấu nháy đơn mà không có dấu nháy đơn liên tiếp thì câu lệnh SQL sẽ không hợp lệ đối tượng ADO nhận từ SQL server sẽ trả lại lỗi giống như của bạn.
Chả biết code bạn viết sao, nhưng trong những trường hợp cụ thể thì có thể bạn đã mắc lỗi SQL injection => rất dễ bị hack khi đưa vào sử dụng.
Lỗi này khắc phục khá đơn giản :
Cách 1 : Dùng hàm Replace() để thay thế giá trị có một dấu nháy đơn thành hai dấu nháy đơn liên tiếp :
VD : Replace(Request.Form(aaaaaa), " ' ", " ' ' ")
Cách 2 : Loại bỏ hoàn toàn dấu nháy đơn :
VD : Replace(Request.Form(aaaaaa), " ' ", " ")
Cách 3 : Chuyển đổi dấu nháy đơn thành mã HTML tương ứng
VD : Replace(Request.Form(aaaaaa), " ' ", "***039 ;")

***039 ; => dấu chấm phẩy phía sau viết liền vào số 039 nhé.
Từ ba cách trên bạn có thể tạo một function để dùng đi dùng lại nhiều lần cho code ngắn và đỡ rối.

Function Format(string)
Format = Replace(string," ' "," ' ' ")
End Function

Hoặc

Function Format(string)
Format = Replace(string," ' "," ")
End Function

Hoặc

Function Format(string)
Format = Replace(string," ' ","***039 ;")
End Function

String là chuỗi giá trị cần xử lý.

Tùy theo cách mà bạn ứng dụng nhé.