Là một newbie tự học, tôi đã tạo ra một vấn đề lớn cho bản thân mình. Trước khi chèn dữ liệu vào cơ sở dữ liệu của tôi, tôi đã chuyển đổi dấu nháy đơn (') trong một chuỗi, thành dấu ngoặc kép (""), thay vì dấu gạch chéo ngược và dấu nháy đơn (\') mà MySQL thực sự yêu cầu.MySQL - Thay thế ký tự trong các cột
Trước khi bảng của tôi phát triển hơn 200.000 hàng nó đã có, tôi nghĩ tốt nhất là khắc phục vấn đề này ngay lập tức. Vì vậy, tôi đã làm một số nghiên cứu và tìm thấy hàm SQL REPLACE, điều này thật tuyệt vời, nhưng bây giờ tôi đã nhầm lẫn.
Trong ASP, tôi đã làm điều này:
str = Replace(str,"'","""")
Nếu tôi nhìn vào cơ sở dữ liệu của tôi trong SQL Workbench, biểu tượng tôi chuyển đổi hiện nay là một dấu nháy đơn ("), trong đó đã nhầm lẫn cho tôi một chút tôi. hiểu lý do tại sao nó thay đổi từ đôi thành duy nhất, nhưng tôi không biết tôi muốn thay đổi cái nào bây giờ.
Để khắc phục và khắc phục sự cố bằng cách sử dụng SQL REPLACE, bây giờ tôi chuyển đổi dấu nháy đơn (") để dấu gạch chéo và dấu nháy đơn (\ ') hoặc tôi chuyển đổi dấu ngoặc kép ("") thành dấu gạch chéo và dấu nháy đơn (\')?
Ví dụ này:
SQL = " SELECT REPLACE(myColumn,"""","\'") FROM myTable "
hay này:
SQL = " SELECT REPLACE(myColumn,""","\'") FROM myTable "
Tôi hy vọng tôi đã giải thích bản thân mình tốt, bất cứ đề nghị biết ơn nhận như mọi khi. Mọi thắc mắc về câu hỏi của tôi, xin hãy bình luận.
Rất cám ơn
- CẬP NHẬT -
Tôi đã thử các truy vấn sau đây nhưng vẫn không thay đổi (") trong các dữ liệu:
SELECT REPLACE(caption,'\"','\'') FROM photos WHERE photoID = 3371
SELECT REPLACE(caption,'"','\'') FROM photos WHERE photoID = 3371
SELECT REPLACE(caption,'""','\'') FROM photos WHERE photoID = 3371
Tuy nhiên, nếu tôi tìm kiếm:
SELECT COUNT(*) FROM photos WHERE caption LIKE '%"%'
Tôi nhận được 16.150 hàng.
- CẬP NHẬT 2-
Vâng, tôi đã tạo ra một 'workaround'. Tôi quản lý để chuyển đổi toàn bộ một cột khá nhanh chóng viết một kịch bản ASP, sử dụng SQL này:
SELECT photoID, caption FROM photos WHERE caption LIKE '%""%';
và sau đó trong ASP tôi đã làm:
caption = Replace(caption,"""","\'")
Nhưng tôi vẫn muốn biết tại sao tôi couldn' t đạt được điều đó với SQL?
Bạn thực sự cần phải đọc về sử dụng Paramater truy vấn đã được thêm. Điều này sẽ giữ cho bạn khỏi làm cho ứng dụng của bạn dễ bị tấn công SQL Injection –
Lưu ý rằng trong 'ASP', sử dụng' "" "" 'ám như một giá trị của một dấu nháy đơn (' "'), không phải là một dấu ngoặc kép ('" "'), bởi vì bên trong của một chuỗi, một trích dẫn được biểu diễn (thoát) bởi hai dấu ngoặc kép – mellamokb
Đó là danh sách tiếp theo trong danh sách của tôi để tìm hiểu John, vâng, tôi có một hàm biểu thức chính quy để kiểm tra các giá trị đầu vào và truy vấn cho nội dung độc hại. Tôi chắc chắn rằng đó không phải là an toàn ... – TheCarver