欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

php存数据到数据库,echo出来的sql可正常在mysql里执行但是放在php中执行却抱错,大神们

程序员文章站 2022-05-19 17:21:34
...
看代码
$title = $_POST["title"];
$metact_t = $_POST["metact_t"];
$acter = $_SESSION["user"];
$department = $_POST["department"];
$metinfo = $_POST["metinfo"];
$jb = $_POST["jb"];
$department_t = $_POST["department_t"];
获得传过来的参数,并作了输出测试没有问题
$title = iconv("utf-8","gbk",strip_tags($title));
$metact_t = iconv("utf-8","gbk",strip_tags($metact_t));
$acter = iconv("utf-8","gbk",strip_tags($acter));
$department = iconv("utf-8","gbk",strip_tags($department));
$metinfo = iconv("utf-8","gbk",strip_tags($metinfo));
$jb = iconv("utf-8","gbk",strip_tags($jb));
$status = iconv("utf-8","gbk",'未解决');
$department_t = iconv("utf-8","gbk",strip_tags($department_t));
$saveMeetingSql = "insert into t_metact(id,title,metact_t,acter,department,metinfo,jb,department_t,status)".
" values('$id','$title','$metact_t','$acter','$department','$metinfo','$jb','$department_t','$status')";
echo ($saveMeetingSql );
转码输出sql如下:
insert into t_metact(id,title,metact_t,acter,department,metinfo,jb,department_t,status) values('2','测试0908','2014-09-09','admin','网络部','ceshi','重大','网络部','未解决')
在sql管理器中可正常插入
php中报错输出错误:ncorrect string value: '\xB2\xE2\xCA\xD409...' for column 'title' at row 1意思应该是说title对应的测试0908不是正常的字符格式,数据库设计字段为varchar长度20,不知道问题出在哪了,望大神们指点


回复讨论(解决方案)

你向数据库发送的是 gbk 编码的串,而数据库默认的字符集并不是 gbk 的
所以数据库无法识别传入的串,因此出错

你的数据库编码是什么?
插入数据和数据编码要一致。

我估计也是编码器的问题

你向数据库发送的是 gbk 编码的串,而数据库默认的字符集并不是 gbk 的
所以数据库无法识别传入的串,因此出错


我转码出来的echo的sql是正常的啊,就是不清楚怎么就向数据库发成gbk的,应该是编码问题但就是不知道问题出在哪,我连接数据库的时候设置的编码utf8

你的数据库编码是什么?
插入数据和数据编码要一致。


数据库是utf8,插入的sql参数我都转过码了,echo的sql执行也没问题

1、在你的代码中并没有数据库操作的函数,所以我不知道你使用的是什么数据库。因此在回复中没有提出建议
2、你对传入的数据都做了形如 $title = iconv("utf-8","gbk",strip_tags($title)); 这样的操作,这就把 utf-8 编码转成了 gbk 编码
3、把错误信息中的 \xB2\xE2\xCA\xD409... 用 php 打印出来
echo "\xB2\xE2\xCA\xD409...";
就是 gbk 编码的 测试09...
4、如果你连接数据库时已经声明了使用 utf8,那么这些 gbk 编码数据是要因不属于 utf-8 范围而报错的