我正在为我的大学建立一个发布消息选项的门户网站。因此我使用LONGTEXT将消息存储在mysql中。但不知何故,LONGTEXT不接受撇号。 每当我发布带有撇号的句子时,它都会出现以下错误:
"Error: 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 's open singles
tournament, will Electrical be able to maintain their dominance o' at line 1"
PS:不在转义字符串中,但在<textarea>
中,如果我输入撇号,则会出错!
答案 0 :(得分:1)
使用类似
的反斜杠来逃避它SELECT 'This is a escape \' quote test';
修改强>
如果您直接从网络表单获取信息并将其插入数据库 - 这是一个巨大的安全风险。这就是SQL注入的完成方式。
答案 1 :(得分:1)
你有两个问题。
鉴于您使用的是MySQL,我相信您有两种逃避选择:
标准SQL(适用于大多数(如果不是全部)SQL DBMS):使用两个连续的单引号插入一个:
'''' -- Insert a string consisting of one single quote
'He said, "Don''t do that!"' -- A string containing a single quote
MySQL(也可能是其他地方的选项,但不是每个SQL DBMS都能识别它):使用反斜杠来逃避单引号:
'\'' -- As above
'He said, "Don\'t do that!"' -- Also as above
您可以使用某些功能为您进行转义 - 具体取决于您使用的主机语言。但是,将值赋入SQL语句的首选方法是使用占位符,尤其是可能包含随机字符的方法。机制依赖于嵌入SQL的宿主语言,但总体思路是:
INSERT INTO SomeTable VALUES(?, ?, ?);
使用一种基于SQL的语言(IBM Informix 4GL):
DEFINE a INTEGER, b DECIMAL(10,2), c VARCHAR(250)
LET a = 1
LET b = 99999999.99
LET c = 'He said, "Don''t do that!"'
PREPARE p1 FROM "INSERT INTO SomeTable(a,b,c) VALUES(?, ?, ?)"
EXECUTE p1 USING a, b, c
PREPARE p2 FROM "SELECT * FROM SomeTable WHERE c = ?"
DECLARE c2 CURSOR FOR p2
OPEN c2 USING c
请注意,如果您不使用占位符,则必须非常小心,不要陷入SQL Injection陷阱。
答案 2 :(得分:0)
使用反斜杠字符来转义字符串:
"Carlito\'s Ways"
您可能需要稍后浏览,但PHP具有内置功能。</ p>
insert into customers(firstname, lastname)
values ('Bill', 'O\'Connor');
答案 3 :(得分:0)
我假设您需要使用反斜杠字符(\
)来转义撇号,但是提供您尝试执行的SQL查询以便人们进一步帮助您也是直观的。