有一条 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 2016 年 7 月 29 日
我觉得把你的语句贴出来会好一点
|
2
acking 2016 年 7 月 29 日
我觉得看看 mysql log , php log ,环境 log ,比较好
|
3
Hallujah 2016 年 7 月 29 日 via Android
楼主只是想吐槽几句?我觉得半天搞不定就该拿出来让大家看看。
|
4
xiandao7997 2016 年 7 月 29 日
转义字符
|
5
rESHARP 2016 年 7 月 29 日
问题这样的提法,还是去问医院门口的算命先生比较合适
|
6
young 2016 年 7 月 29 日
我觉得你连错库了....
|
7
Mac 2016 年 7 月 29 日
单引号和双引号的问题?
|
8
DT27 2016 年 7 月 29 日
php 有错误提示啊。。。
另外一般小页面用 php 我都直接用 mysql 操作类。。。 |
9
Xrong 2016 年 7 月 29 日
编码问题?
|
10
gdtv 2016 年 7 月 29 日
看一下 pdo 最终生成的 sql 是什么
|
11
xuhaoyangx 2016 年 7 月 29 日
log 呢,报错的提示呢。 你需要学学如何提问
|
12
cccRaim 2016 年 7 月 29 日
估计是某些非数字类型没有加单引号
|
13
alittletrain OP |
14
RIcter 2016 年 7 月 29 日
PDO 的话,有 warning 就不能成功运行。
你在 MySQL 里运行的时候是不是不是 0 warnings ? |
15
DT27 2016 年 7 月 29 日
sql 语句直接 mysql_query 没问题。。。
|
16
Mac 2016 年 7 月 29 日
用工具比如 HEIDISQL 直接运行这段 SQL 看看错在哪,可能字段类型和长度
|
17
DT27 2016 年 7 月 29 日
楼主可以一个字段一个字段的替换看看是不是某个字段的问题。
或者先把中文换成 1 ,其它不变。 |
18
tojoevan 2016 年 7 月 29 日 via iPhone
每当遇到如此问题都推荐二分排除法把字段替换为 1 ,基本 5 分钟内,解决战斗
|
20
jarlyyn 2016 年 7 月 29 日
手工拼接 sql 的勇士啊……
|
21
alittletrain OP @tojoevan 替换成 1 可以插入
|
22
alittletrain OP @jarlyyn 没办法 不让用 orm
|
23
nullp 2016 年 7 月 29 日
之前遇到过这样的问题。不过是用 php 连的 mssql 打印出来的 sql 语句直接可以执行,在 php 就是不执行。 是包含汉字的字符集编码的问题 。 不过按道理 mysql 和 php 的话都是 utf-8 应该不会有这样的问题, 你可以看下
|
24
jarlyyn 2016 年 7 月 29 日
|
25
iyaozhen 2016 年 7 月 29 日 via Android
应该是 url 那个值的问题, exec 方法有返回值的呀,判断一下呗,然后打印一下 SQL 和 error 。
还有用了 PDO 没用参数绑定? |
26
rESHARP 2016 年 7 月 29 日
MYSQL 可以给表名、列名加引号? 在 MSSQL 里不行
|
27
npc0der 2016 年 7 月 29 日
长度超了么 替换某一个超长的字符串 逐渐减少长度试试
|
28
realpg PRO @alittletrain 把所有字段替换成 1 ,然后一个一个改回正常值 看看哪个字段报错呗
而且 PDO 的 execute 有返回值有错误打印 干吗不用 |
29
yao978318542 2016 年 7 月 29 日
这个问题貌似我遇到过 你用的什么框架 exec 这个方法是 php 本身的那个 还是你自定义的? 估计是 exec 出问题了
|
31
bugsnail 2016 年 7 月 29 日
把 SQL 语句放到数据库执行一下, 加一句:
show warnings; SQL 语句; 看有没有警告, 如果没有, 那最大可能是那个 url |
32
kookxiang 2016 年 7 月 29 日
这是 PDO 一个超级坑爹的地方……
加上 $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 然后你应该就知道哪里有问题了 |
33
JulyXing 2016 年 7 月 29 日
pdo 默认会把 单引号转义变成 \' ,所以会出现在 php 中执行没有结果,但是单独在 mysql 中有效。这个问题前段时间也遇到过,可以去看 mysql 日志就可以看到实际执行语句。
|
34
void1900 2016 年 7 月 29 日
没错误提示? 长度问题吧 我猜
|
36
aprikyblue 2016 年 7 月 29 日
用 pdo 干嘛还拼接。。
|
37
alittletrain OP @iyaozhen exec 返回 false
|
38
alittletrain OP @void1900 长度没问题 字段类型没问题 手动 mysql insert OK
|
40
macroideal 2016 年 7 月 29 日
报什么错
|
41
laobaozi 2016 年 7 月 29 日
echo 出这个 sql 语句,用 echo 的输出再在 mysql 中直接执行
|
42
astome 2016 年 7 月 29 日
看看字段设置的长度够不够
|
43
caoyujia2000 2016 年 7 月 29 日
建议把插入的字段删除一些,执行成功后,再把删除的字段加进去,便于精确定位出错的地方
|
44
nightspirit 2016 年 7 月 29 日
mysql error 有没有
|
45
hcymk2 2016 年 7 月 29 日
开 mysql 的 general_log
|
46
RIcter 2016 年 7 月 29 日
-。- lz 你看一下我说的话,我踩过这个坑。
你 insert 的 table 里应该有不能为 NULL 的字段但是你 insert 的语句里没有写。 |
47
annielong 2016 年 7 月 29 日
应该是编码问题,很有可能是那个 url ,实际上一个字段一个字段的替换成 1 执行就知道了
|
48
williamx 2016 年 7 月 29 日
你把表结构也一起发出来不就很快就帮你搞定了?
|
49
pengfei 2016 年 7 月 30 日
java 有没提交事务这一说
|
50
alittletrain OP @RIcter 把 VALUE 都换成 1 就可以正确插入
|