总结
豆包 AI 助手文章总结

PDO——Call to a member function query() on a non-object

php中文网
发布: 2016-06-06 20:16:43
原创
1716人浏览过

Think PHP在3.2之后好像就不支持PDO扩展了,然后我为了用PDO在控制层中写了一个php文件,里面只是写了实例化PDO的一段代码,我在控制请中引入这个文件,刚开始连接查询数据的时候没有错误,但是好像是有返回值的时候就报了一个——“**Call to a member function query() on a non-object**”的错误,有哪位了解的,请教下
登录后复制
登录后复制
pdo.class.php
<?php

$PDO = new PDO('mysql:host=localhost;dbname=cxshop', 'root', '',array(
    PDO::ATTR_PERSISTENT => true));

?>
登录后复制
登录后复制
CommonController.class.php
public function checkPDO($rolename,$mid=1){
        if (intval($mid) > 0) {
            require_once('Pdo.class.php');
            $res = $PDO->query("SELECT r_id as rid FROM `shop_role` where r_method='$rolename' limit 1");
            // 
            $roleres = $res->fetch(2);
            $checkmethID = $roleres['rid'];
            // dump($checkmethID);exit;

            $res = $PDO->query("SELECT gid FROM `shop_ag_access` where mid='$mid'");
            $agres = $res->fetchAll(2);
            if($checkmethID){
                foreach ($agres as $key => $value) {
                    $rges = $PDO->query("SELECT rid FROM `shop_rg_access` where gid='".$value['gid']."'");
                    $rges = $rges->fetchAll(2);
                    if (!$rges) {
                        return fasle;
                    }
                    $rgarr = array();
                    foreach ($rges as $kk => $val) {
                        $rgarr[] = $val['rid'];
                    }
                    $agres[$key]['gid'] = $rgarr;
                }
                $PDO = null;
                $arr = array();
                foreach ($agres as $key => $value) {
                    $arr[] = $value['gid'];
                }

                foreach ($arr as $key => $value) {
                    if (in_array($checkmethID, $value) == true) {
                        return true;
                    }
                }
                return false;
            }else{
                return false;
            }
        }else{
            return false;
        }
    }
登录后复制
登录后复制

上面的代码可以忽略不看,就是think php链接pdo的问题

回复内容:

Think PHP在3.2之后好像就不支持PDO扩展了,然后我为了用PDO在控制层中写了一个php文件,里面只是写了实例化PDO的一段代码,我在控制请中引入这个文件,刚开始连接查询数据的时候没有错误,但是好像是有返回值的时候就报了一个——“**Call to a member function query() on a non-object**”的错误,有哪位了解的,请教下
登录后复制
登录后复制
pdo.class.php
<?php

$PDO = new PDO('mysql:host=localhost;dbname=cxshop', 'root', '',array(
    PDO::ATTR_PERSISTENT => true));

?>
登录后复制
登录后复制
CommonController.class.php
public function checkPDO($rolename,$mid=1){
        if (intval($mid) > 0) {
            require_once('Pdo.class.php');
            $res = $PDO->query("SELECT r_id as rid FROM `shop_role` where r_method='$rolename' limit 1");
            // 
            $roleres = $res->fetch(2);
            $checkmethID = $roleres['rid'];
            // dump($checkmethID);exit;

            $res = $PDO->query("SELECT gid FROM `shop_ag_access` where mid='$mid'");
            $agres = $res->fetchAll(2);
            if($checkmethID){
                foreach ($agres as $key => $value) {
                    $rges = $PDO->query("SELECT rid FROM `shop_rg_access` where gid='".$value['gid']."'");
                    $rges = $rges->fetchAll(2);
                    if (!$rges) {
                        return fasle;
                    }
                    $rgarr = array();
                    foreach ($rges as $kk => $val) {
                        $rgarr[] = $val['rid'];
                    }
                    $agres[$key]['gid'] = $rgarr;
                }
                $PDO = null;
                $arr = array();
                foreach ($agres as $key => $value) {
                    $arr[] = $value['gid'];
                }

                foreach ($arr as $key => $value) {
                    if (in_array($checkmethID, $value) == true) {
                        return true;
                    }
                }
                return false;
            }else{
                return false;
            }
        }else{
            return false;
        }
    }
登录后复制
登录后复制

上面的代码可以忽略不看,就是think php链接pdo的问题

“on a non-object”说明你调用了对象不存在的方法,或这个对象没有实例化。检查下代码,留意在调用对象的方法的位置。

试试把query换做exec

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
相关标签:
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
豆包 AI 助手文章总结
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号