Heim >Backend-Entwicklung >PHP-Tutorial >mysql插入新内容时有奇怪的错误?

mysql插入新内容时有奇怪的错误?

WBOY
WBOYOriginal
2016-06-06 20:07:001102Durchsuche

先说一下事情发生的原因。
我的同事跟我说,有一篇新闻稿死活发布不了,一发布就提示错误,于是丢到我这里来了。
我一开始是认为可能之前开发的人数据库字段类型的坑,可能长度不够,因为这篇新闻稿确实是挺长的。然后我describe了一下,发现字段类型是text。以防万一,我还是拿那篇新闻稿去做个字符统计,结果完全是text长度以内的。当然,我黏贴的时候小心地选择了纯文本黏贴,避免奇怪的东西混入。
好吧,然后我试着将mysql_error输出。

<code>You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 's up》由xxx演唱,带动了' at line 1</code>

我翻了一下原文,发现了这个句子:
一首活泼轻快的《What's up》由xxx演唱,带动了现场氛围。在xxx带来的一曲风格迥异的《美丽的笨女人》后,第一轮竞演顺利结束。

所以即使到了这里,我也不知道这到底是闹哪只鬼。
于是我试着只输入《What's up》,试着发布一下。果不其然,又出错了。

<code>You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 's up》</code>

然后我发现,这个what`s中的那个小点点,不是反引号,而是单引号。

这是反引号 `

这是单引号 '

只歪了一丢丢咯朋友。
难道这是辣鸡编辑器的问题?单引号没有闭合?
然后我试着输入's'
发布
然后

<code>You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 's'</code>

为什么呢?
编辑器??
于是我看了一下编辑器的html视图

<code>'s'</code>

正常得连个html标签都没有。
然后我只好把'改为`。英文缩写好像就是反引号的吧。但是辣鸡编辑器并没有高级到这种水平啊。
所以,我到了这里来求助。
不要吐槽标题,因为我真的不知道这是什么狗屁问题。

回复内容:

先说一下事情发生的原因。
我的同事跟我说,有一篇新闻稿死活发布不了,一发布就提示错误,于是丢到我这里来了。
我一开始是认为可能之前开发的人数据库字段类型的坑,可能长度不够,因为这篇新闻稿确实是挺长的。然后我describe了一下,发现字段类型是text。以防万一,我还是拿那篇新闻稿去做个字符统计,结果完全是text长度以内的。当然,我黏贴的时候小心地选择了纯文本黏贴,避免奇怪的东西混入。
好吧,然后我试着将mysql_error输出。

<code>You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 's up》由xxx演唱,带动了' at line 1</code>

我翻了一下原文,发现了这个句子:
一首活泼轻快的《What's up》由xxx演唱,带动了现场氛围。在xxx带来的一曲风格迥异的《美丽的笨女人》后,第一轮竞演顺利结束。

所以即使到了这里,我也不知道这到底是闹哪只鬼。
于是我试着只输入《What's up》,试着发布一下。果不其然,又出错了。

<code>You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 's up》</code>

然后我发现,这个what`s中的那个小点点,不是反引号,而是单引号。

这是反引号 `

这是单引号 '

只歪了一丢丢咯朋友。
难道这是辣鸡编辑器的问题?单引号没有闭合?
然后我试着输入's'
发布
然后

<code>You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 's'</code>

为什么呢?
编辑器??
于是我看了一下编辑器的html视图

<code>'s'</code>

正常得连个html标签都没有。
然后我只好把'改为`。英文缩写好像就是反引号的吧。但是辣鸡编辑器并没有高级到这种水平啊。
所以,我到了这里来求助。
不要吐槽标题,因为我真的不知道这是什么狗屁问题。

很好,发现了就好,这就是传说中的sql注入!所以建议你仔细看看PDO的文档,用安全的方式插入数据,如

<code>$pdo->query('insert into table set field1 = ?, field2 = ?, field3 = ?', array('param1', 'param2', 'param3'));</code>

这样PDO会帮你把那个讨厌的单引号自动转义的。

你把单引号转义后,在执行插入操作,看还报错吗?就是单引号前面加个反斜杠

数据库连接方式用PDO或者插入前对变量htmlspecialchars

用mysql的话试试 mysql_real_escape_string(可选addslashes)
注意检查 get_magic_quotes_gpc
文档有例子

楼上的正解!

@incNick 正解

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn