有一条 pdo 的 insert into 语句,拿出来放到 mysql 执行就 OK ,放到 php 里就不行,求可能的原因。。。
$stmt = $dbh->exec("INSERT INTO `crm_ecms_fkdh` (`title`, `newstime`, `titlepic`, `swt_ksfwsj`, `swt_dhlx`, `swt_ip`, `swt_dhly`, `swt_fwly`, `swt_gjc`, `swt_weizhi`, `swt_csjdkf`, `swt_feiyong`, `swt_ccfwwz`, `swt_krsm`) VALUES ('21559', '0', '', '2016/7/19 15:59:57', '极佳对话', '220.115.231.5', 'https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&tn=baidu&wd=%E5%93%88%E5%93%88&rsv_pq=95afcefb001095ac&rsv_t=88b292b1R%2F7n0690mRIzp2BoTqwsTfK5QFKD8INH%2BaftAjE23I2Ni0gTuqk&rqlang=cn&rsv_enter=1&rsv_sug3=5&rsv_sug1=1&rsv_sug7=100&rsv_sug2=0&inputT=1686&rsv_sug4=144368', 'https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&tn=baidu&wd=%E5%93%88%E5%93%88&rsv_pq=95afcefb001095ac&rsv_t=88b292b1R%2F7n0690mRIzp2BoTqwsTfK5QFKD8INH%2BaftAjE23I2Ni0gTuqk&rqlang=cn&rsv_enter=1&rsv_sug3=5&rsv_sug1=1&rsv_sug7=100&rsv_sug2=0&inputT=1686&rsv_sug4=144368', 'https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&tn=baidu&wd=%E5%93%88%E5%93%88&rsv_pq=95afcefb001095ac&rsv_t=88b292b1R%2F7n0690mRIzp2BoTqwsTfK5QFKD8INH%2BaftAjE23I2Ni0gTuqk&rqlang=cn&rsv_enter=1&rsv_sug3=5&rsv_sug1=1&rsv_sug7=100&rsv_sug2=0&inputT=1686&rsv_sug4=144368', '天津市', '21559', '天津市', 'lxb', '医院')");
感谢各位V友的鼎力相助,已经解决。
代码里加入了
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbh = new PDO('mysql:host=172.17.0.4;dbname=crm', 'root', 'root',array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
没有设定编码
my.cnf中将sql_mode的STRICT_TRANS_TABLES删掉,然后重启mysql容器,插入成功。
1
fuge Jul 29, 2016
我觉得把你的语句贴出来会好一点
|
2
acking Jul 29, 2016
我觉得看看 mysql log , php log ,环境 log ,比较好
|
3
Hallujah Jul 29, 2016 via Android
楼主只是想吐槽几句?我觉得半天搞不定就该拿出来让大家看看。
|
4
xiandao7997 Jul 29, 2016
转义字符
|
5
rESHARP Jul 29, 2016
问题这样的提法,还是去问医院门口的算命先生比较合适
|
6
young Jul 29, 2016
我觉得你连错库了....
|
7
Mac Jul 29, 2016
单引号和双引号的问题?
|
8
naver1 Jul 29, 2016
php 有错误提示啊。。。
另外一般小页面用 php 我都直接用 mysql 操作类。。。 |
9
Xrong Jul 29, 2016
编码问题?
|
10
gdtv Jul 29, 2016
看一下 pdo 最终生成的 sql 是什么
|
11
xuhaoyangx Jul 29, 2016
log 呢,报错的提示呢。 你需要学学如何提问
|
12
cccRaim Jul 29, 2016
估计是某些非数字类型没有加单引号
|
14
RIcter Jul 29, 2016
PDO 的话,有 warning 就不能成功运行。
你在 MySQL 里运行的时候是不是不是 0 warnings ? |
15
naver1 Jul 29, 2016
sql 语句直接 mysql_query 没问题。。。
|
16
Mac Jul 29, 2016
用工具比如 HEIDISQL 直接运行这段 SQL 看看错在哪,可能字段类型和长度
|
17
naver1 Jul 29, 2016
楼主可以一个字段一个字段的替换看看是不是某个字段的问题。
或者先把中文换成 1 ,其它不变。 |
18
tojoevan Jul 29, 2016 via iPhone
每当遇到如此问题都推荐二分排除法把字段替换为 1 ,基本 5 分钟内,解决战斗
|
20
jarlyyn Jul 29, 2016
手工拼接 sql 的勇士啊……
|
21
alittletrain OP @tojoevan 替换成 1 可以插入
|
22
alittletrain OP @jarlyyn 没办法 不让用 orm
|
23
nullp Jul 29, 2016
之前遇到过这样的问题。不过是用 php 连的 mssql 打印出来的 sql 语句直接可以执行,在 php 就是不执行。 是包含汉字的字符集编码的问题 。 不过按道理 mysql 和 php 的话都是 utf-8 应该不会有这样的问题, 你可以看下
|
24
jarlyyn Jul 29, 2016
|
25
iyaozhen Jul 29, 2016 via Android
应该是 url 那个值的问题, exec 方法有返回值的呀,判断一下呗,然后打印一下 SQL 和 error 。
还有用了 PDO 没用参数绑定? |
26
rESHARP Jul 29, 2016
MYSQL 可以给表名、列名加引号? 在 MSSQL 里不行
|
27
npc0der Jul 29, 2016
长度超了么 替换某一个超长的字符串 逐渐减少长度试试
|
28
realpg PRO @alittletrain 把所有字段替换成 1 ,然后一个一个改回正常值 看看哪个字段报错呗
而且 PDO 的 execute 有返回值有错误打印 干吗不用 |
29
yao978318542 Jul 29, 2016
这个问题貌似我遇到过 你用的什么框架 exec 这个方法是 php 本身的那个 还是你自定义的? 估计是 exec 出问题了
|
31
bugsnail Jul 29, 2016
把 SQL 语句放到数据库执行一下, 加一句:
show warnings; SQL 语句; 看有没有警告, 如果没有, 那最大可能是那个 url |
32
kookxiang Jul 29, 2016
这是 PDO 一个超级坑爹的地方……
加上 $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 然后你应该就知道哪里有问题了 |
33
JulyXing Jul 29, 2016
pdo 默认会把 单引号转义变成 \' ,所以会出现在 php 中执行没有结果,但是单独在 mysql 中有效。这个问题前段时间也遇到过,可以去看 mysql 日志就可以看到实际执行语句。
|
34
void1900 Jul 29, 2016
没错误提示? 长度问题吧 我猜
|
36
aprikyblue Jul 29, 2016
用 pdo 干嘛还拼接。。
|
37
alittletrain OP @iyaozhen exec 返回 false
|
38
alittletrain OP @void1900 长度没问题 字段类型没问题 手动 mysql insert OK
|
40
macroideal Jul 29, 2016
报什么错
|
41
laobaozi Jul 29, 2016
echo 出这个 sql 语句,用 echo 的输出再在 mysql 中直接执行
|
42
astome Jul 29, 2016
看看字段设置的长度够不够
|
43
caoyujia2000 Jul 29, 2016
建议把插入的字段删除一些,执行成功后,再把删除的字段加进去,便于精确定位出错的地方
|
44
nightspirit Jul 29, 2016
mysql error 有没有
|
45
hcymk2 Jul 29, 2016
开 mysql 的 general_log
|
46
RIcter Jul 29, 2016
-。- lz 你看一下我说的话,我踩过这个坑。
你 insert 的 table 里应该有不能为 NULL 的字段但是你 insert 的语句里没有写。 |
47
annielong Jul 29, 2016
应该是编码问题,很有可能是那个 url ,实际上一个字段一个字段的替换成 1 执行就知道了
|
48
williamx Jul 29, 2016
你把表结构也一起发出来不就很快就帮你搞定了?
|
49
pengfei Jul 30, 2016
java 有没提交事务这一说
|
50
alittletrain OP @RIcter 把 VALUE 都换成 1 就可以正确插入
|