PDO和Class给出致命错误:调用成员函数查询()

时间:2013-01-19 07:01:52

标签: php mysql class pdo

使用以下代码获取数据库查询时遇到一些麻烦。我第一次使用类甚至PDO进行连接,所以不知道出了什么问题。为了你的知识,我不是那么高手,但是想学习课程,所以如果你能告诉我是否有什么可以改善,我将不胜感激。

错误消息:致命错误:在第72行的C:\ pat \ to \ class.php中的非对象上调用成员函数query()

<?php

    // get database connection
    private static function _db_connect() {

        try {

            $db_con = new PDO('mysql:host='.$db_host.';dbname='.$db_name, $db_user, $db_pass);
            $db_con = null;

        } catch (PDOException $e) {

            print "Error!" . $e->getMessage(). "<br/>";

        }

    }


    // get database tables prefix
    public static function prefix() {

        $prefix = 'tb_'; // once done will be set dynamically

        return $prefix;
    }


    // get all users from db
    public static function get_users() {

        $db = self::_db_connect();
        $prf = self::prefix();

        $st = $db->query('SELECT * FROM '.$prf.'users'); // this is the line #72 where error

        while($row = $st->fetch(PDO::FETCH_ASSOC))
         $rs[] = $row;

        return count($rs) ? $rs : array();

    }    


?>

编辑:我已删除null并在此处返回PDO对象     

    // get database connection
    private static function _db_connect() {

        try {

            $db_con = new PDO('mysql:host='.$db_host.';dbname='.$db_name, $db_user, $db_pass);
            return $db_con;

        } catch (PDOException $e) {

            print "Error!" . $e->getMessage(). "<br/>";

        }

    }


    // get database tables prefix
    public static function prefix() {

        $prefix = 'tb_'; // once done will be set dynamically

        return $prefix;
    }


    // get all users from db
    public static function get_users() {

        $db = self::_db_connect();
        $prf = self::prefix();

        $st = $db->query('SELECT * FROM '.$prf.'users'); // this is the line #72 where error

        while($row = $st->fetch(PDO::FETCH_ASSOC))
         $rs[] = $row;

        return count($rs) ? $rs : array();

    }    


?>

1 个答案:

答案 0 :(得分:2)

您没有从db_connect方法返回任何内容,因此默认情况下会返回NULL。实际上,你试图打电话NULL->query(),这显然没有意义。

修改db_connect以返回它创建的PDO对象。