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