Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL LONGTEXT不接受撇号'_Mysql - Fatal编程技术网

MySQL LONGTEXT不接受撇号'

MySQL LONGTEXT不接受撇号',mysql,Mysql,我正在为我的学院建立一个门户网站,上面有“发布消息”选项。因此,我使用LONGTEXT将消息存储在mysql中。但不知何故,长文不接受撇号标记。 每当我发布带有撇号的句子时,它会给出以下错误: "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 s

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

"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:不是在转义字符串中,而是在中,如果我输入撇号标记,它将给出错误

用反斜杠像

SELECT 'This is a escape \' quote test';
编辑


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

使用反斜杠字符转义字符串:

卡里托的方式

以后可能需要取消scape,但PHP有一个内置函数

insert into customers(firstname, lastname) 
values ('Bill', 'O\'Connor');

我假设您需要使用反斜杠字符\来转义撇号,但提供您试图执行的SQL查询也很直观,以便人们进一步帮助您。

您有两个问题

您将长文本的值复制到“查询”中,可能是一个INSERT或UPDATE语句,尽管它可能只是SELECT中要比较的值。 您没有注意到,开头引号之后的第一个未替换的单引号终止了字符串。 考虑到您使用的是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的宿主语言,但总体思路是:

原始SQL字符串如下所示:INSERT INTO SomeTable VALUES?; 你准备的陈述或多或少是明确的。 当您执行它时,您将数据作为参数提供给execute。 或者,如果它是一个SELECT语句,则准备它,为它声明一个游标,然后打开该游标并提供当时的参数值。 在一种基于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查询?如果没有,那就试试看,看看这个问题,然后把它贴在你的问题上。不是那个。。!我已经不知道了。。但它在用户输入信息的地方。。!然后,您需要自己处理字符串,或者在php中使用mysql\u real\u escape\u string之类的东西确保-规则是永远不要信任任何外部数据-即使您使用数据库中的数据填充Web表单上的字段-当它回来时,不要信任它,并确保您使用mysql\u real\u escape\u stringOh Bobby Tables之类的东西-我如何爱你。