今天在做一个项目时,就是把一个数据库里面的资料导入到另一个数据库里面。

想想很简单啊,就是用sql语句,把一个数据库里面数据select读取出来,然后循环update到另一个数据库里面。

其实操作起来也很简单的,但是中途出现了问题,100条左右的数据,总会有10来条数据导入失败,我不想浪费这些资源啊,还是想要这些数据,如实开始分析原因。

select查询数据库A里面的信息,print_f打印出来,完成正确,循环输出也正在,然后就是update插入到另一个数据了。看着看着我终于发现了原因。原因是这样的,update语句一般是这样写的

例如:

$sql = "INSERT INTO `wlsh_xh` (`title`, `content) VALUES ('{$title}', '{$content}')";

上述代码是插入标题和内容到数据库。代码肯定是没问题的,问题出现在变量$content上面。大家都知道,文章内容是千变万化的,特使是针对程序员类的文章,肯定会有很多的代码符合。例如有文章内容含以下符号:

/*此处省略一万字*/k,'a'=123/*此处也省略一万字*/

如果文章$content变量刚好包含上面的代码,那么替换成SQL语句就成了

INSERT INTO `wlsh_xh` (`title`, `content) VALUES ('{$title}', '/,'a'=123')

看到这条语句,我相信很多同学已经发现问题了,对的,由于后面$content变量包含了特殊字符,导致后面包含了三个字段的内容,当然是无法插入数据库了

程序员人生网站提供的解决思路是这样的,先把引号等特殊字符替换掉,插入数据库后再更新,步骤如下:

1、替换变量

$content=$content=str_replace("'","程序员人生",$content);//将引号替换成程序员人生

2、执行SQL语句插入数据

INSERT INTO `wlsh_xh` (`title`, `content) VALUES ('{$title}', '{$content}')

3、把“程序员人生”汉字替换成引号

UPDATE wlsh_xh SET content = REPLACE(content, "程序员人生", "'")

到这里就完成了,特殊字符如何插入数据的方法。