首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL LONGTEXT不接受撇号

MySQL LONGTEXT不接受撇号
EN

Stack Overflow用户
提问于 2012-01-13 08:10:51
回答 4查看 3.1K关注 0票数 1

我正在为我的大学建立一个带有发布消息选项的门户网站。因此,我使用LONGTEXT将消息存储在mysql中。但不知何故,LONGTEXT不接受撇号标记。每当我发布一些带有撇号的句子时,它都会显示以下错误:

代码语言:javascript
复制
"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>中,如果我输入撇号标记,它会给出错误!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-01-13 08:12:58

用反斜杠将其转义,如

代码语言:javascript
复制
SELECT 'This is a escape \' quote test';

编辑

如果您直接从web表单获取信息并将其插入到数据库中-这是一个巨大的安全风险。这就是SQL注入的方式。

票数 1
EN

Stack Overflow用户

发布于 2012-01-13 08:32:57

你有两个问题。

  1. 您将长文本的值复制到您的'query‘中(可能是一个INSERT或UPDATE语句,但它可能只是SELECT中要与之比较的值)。
  2. 您没有注意到左引号后的第一个未转义的单引号会终止字符串。

考虑到您使用的是MySQL,我相信您有两种转义选择:

SQL标准

  • (适用于大多数,如果不是所有的话):使用两个连续的单引号插入一个:

‘--插入一个由单引号组成的字符串’他说,‘不要这么做!’‘--一个包含单引号的字符串

  • MySQL(也可以是其他地方的一个选项,但不是每个SQL都能识别它):使用反斜杠转义单引号:

'\'‘--如上所述,’他说,“不要那样做!”--也和上面的一样

根据您使用的宿主语言,您还可以使用一些函数来为您进行转义。但是,将值放入SQL语句的首选方法是使用占位符,尤其是可能包含随机字符的语句。这些机制取决于嵌入SQL的宿主语言,但总体思路是:

对于原始SQL字符串,如下所示:INSERT INTO SomeTable VALUES(?, ?, ?);

  • You准备语句,或多或少执行它,将数据作为参数提供给execute。

  • 或者,如果它是SELECT语句,则准备它,为它声明一个游标,然后打开游标并提供参数值。

在一种基于SQL的语言(IBM Informix 4GL)中:

代码语言:javascript
复制
 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陷阱。

票数 1
EN

Stack Overflow用户

发布于 2012-01-13 08:13:15

使用反斜杠字符对字符串进行转义:

"Carlito\'s Ways"

您可能需要稍后取消转义,但是PHP有一个内置的函数可以这样做。

代码语言:javascript
复制
insert into customers(firstname, lastname) 
values ('Bill', 'O\'Connor');
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8844250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档