我正在为我的大学建立一个带有发布消息选项的门户网站。因此,我使用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>中,如果我输入撇号标记,它会给出错误!
发布于 2012-01-13 08:12:58
用反斜杠将其转义,如
SELECT 'This is a escape \' quote test';编辑
如果您直接从web表单获取信息并将其插入到数据库中-这是一个巨大的安全风险。这就是SQL注入的方式。
发布于 2012-01-13 08:32:57
你有两个问题。
考虑到您使用的是MySQL,我相信您有两种转义选择:
SQL标准
‘--插入一个由单引号组成的字符串’他说,‘不要这么做!’‘--一个包含单引号的字符串
'\'‘--如上所述,’他说,“不要那样做!”--也和上面的一样
根据您使用的宿主语言,您还可以使用一些函数来为您进行转义。但是,将值放入SQL语句的首选方法是使用占位符,尤其是可能包含随机字符的语句。这些机制取决于嵌入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陷阱。
发布于 2012-01-13 08:13:15
使用反斜杠字符对字符串进行转义:
"Carlito\'s Ways"
您可能需要稍后取消转义,但是PHP有一个内置的函数可以这样做。
insert into customers(firstname, lastname)
values ('Bill', 'O\'Connor');https://stackoverflow.com/questions/8844250
复制相似问题