最近在做公司的一个项目,因为insert into 到mysql的过程中,一直提示1064错误,插入失败,检查了很多,本以为是中文字符的问题,后来发现,其实是内容中有单引号,导致混淆了sql语句。
下面,我将转载解决了我的疑问的那篇文章:
当使用php进行mysql insert一条语句时,发现插入失败,提示是语法错误。Fatal error: Uncaught exception ‘Exception‘ with message ‘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 ‘洛阳‘.查看这条语句时。发现这个洛阳这句话的地方有英文的单引号“‘”;因为单引号是mysql中的内置符号。所以要用到的话,只能转义。
例如
$content = "我们有时候去过‘洛阳‘";
$content2 = "aadsl了德古拉的两款打开";
$intro = addcslashes($content,‘\‘‘);
$antro = addcslashes($content2,‘\‘‘);
$new = sql_insert("insert into sys_union(`name,`intro`,`antro`)
values(‘$name‘,‘$intro‘,‘$antro‘)");
其实调用php的内置函数addcslashes,就是为了将单引号转义,使其能够在内容中如果有单引号的情况下,也能够顺利的插入,而不会被报语法错误。因此将中文描述插入到数据库里的时候,要注意检测字符串的合法性,进行过滤。去空格等操作。
但是我在使用mysql 自带的replace函数时报错。不知道为什么不能直接在mysql 语句中进行转义替换。不知道什么情况。具体的replace代码,我使用报错的情况是
$new = sql_insert("insert into sys_union(`name,`intro`,`antro`)
values(‘$name‘,replace($content,‘\‘‘,‘\‘‘),replace($content2,‘\‘‘,‘\‘‘),)");
但是我在phpmyadmin里面执行却是正确的。也被正确的替换掉了,插入也正确。但在php 里面执行却报错。不知道什么情况。
以上是她的文章,最后她说到的这个情况,我并没有亲自去实验,不晓得可不可以,等后边有时间了再来一起探讨。
mysqli insert into时内容里面有单引号 或者说变量的里面有单引号
原文:http://www.cnblogs.com/yehai/p/6565629.html