Call to a member function fetch() on a non-object自查解决问题

这可能是与别人不一样的原因

缘由

今天在调试php代码,其中需要用到pdo调取mysql数据库数据出现了题目所示的错误,但是,其一我之前用此方法能调取成功,其二我上网查了一些原因,都没有解决我的问题。

解决过程

原来代码

$keys = $PDO->query("SELECT key FROM `t_paper_1`")->fetchAll(PDO::FETCH_ASSOC); 
var_dump($keys);

其他能正常获取数据的代码

$xms = $PDO->query("SELECT xm FROM xsinfo WHERE bjid='1'")->fetchAll(PDO::FETCH_ASSOC); 
var_dump($xms);

反复对比,突然感觉key这个好像在哪里用到过,经过查找自己的代码,发现了如下

CREATE TABLE `t_paper` (  
`id` mediumint(8) NOT NULL AUTO_INCREMENT,  
`name` varchar(30) NOT NULL,  
`type` mediumint(1) NOT NULL,  
`code` text,  
PRIMARY KEY (`id`),  
KEY `type` (`type`)  
);  

在这里有一个KEY,说明这个key是mysql的保留字,也就是我直接那样查询,与mysql的保留字冲突。于修改代码如下:

$keys = $PDO->query("SELECT `key` FROM `t_paper_1`")->fetchAll(PDO::FETCH_ASSOC); 
var_dump($keys);

这次正常运行了,与上面的分析符合。

总结

以后注意两点:

  1. 不用系统保留字。
  2. 习惯性表名及字段名加上``标志符(键盘数字左上角1旁边那个).
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值