【问题标题】:Fatal error: Call to a member function query() on a non-object in .php file致命错误:在 .php 文件中的非对象上调用成员函数 query()
【发布时间】:2012-10-27 18:00:07
【问题描述】:

我是 PHP 和 SQL 的新手,但我正在尝试为我的 webapp 创建一个登录脚本。 出于某种原因,我被卡住了。当用户名或密码字段为空时,有警报,但当它们都填写正确或错误时,则没有警报。

当我在浏览器 (Chrome) 中打开网站并检查页面时,我得到:

“POST ../App/auth.php 500(内部服务器错误)”

当我从服务器打开 error.log 文件时,我得到:

“PHP 致命错误:在第 24 行的 ../App/class.manageUsers.php 中调用非对象的成员函数 query(),引用者:../App/login.php”

class.manageUsers.php 中的第 24 行是:

$query = $this->link->query("SELECT * FROM users WHERE username = '$username' AND
password = '$password' LIMIT 1");

class.manageUsers.php:

<?php

include_once('class.database.php');

class ManageUsers{

    protected $link;

    function __construct(){
        $db_conn = new ManageDatabase;
        $this->link = $db_conn->connect();
        return $this->link;
    }
    function addUsers($username,$firstname,$lastname,$email,$password,$user_level){
        $query = $this->link->prepare("INSERT INTO users (username,firstname,lastname,email,password,user_level)
            VALUES (?,?,?,?,?,?)
        ");
        $values = array($username,$firstname,$lastname,$email,$password,$user_level);
        $query->execute($values);
        $rowCount = $query->rowCount();
        return $rowCount;
    }
    function loginUsers($username,$password){
        $query = $this->link->query("SELECT * FROM users WHERE username = '$username' AND password = '$password' LIMIT 1");
        $rowCount = $query->rowCount();
        return $rowCount;           
    }
    function listUsers($user_id = null){
        if(isset($user_id))
        {
        $query = $this->link->query("SELECT * FROM users WHERE id = '$user_id' LIMIT 1");
        }
        else
        {
        $query = $this->link->query("SELECT * FROM users ORDER BY id DESC");
        }
        $rowCount = $query->rowCount();
        if($rowCount >= 1)
        {
            $result = $query->fetchAll();
        }
        else
        {
            $result = 0;
        }
        return $result;
    }

    function editUsers($user_id,$param){
        foreach ($param as $key => $value)
        {
        $query = $this->link->query("UPDATE users SET $key = '$value' WHERE id = '$user_id' LIMIT 1");
        }
        $rowCount = $query->rowCount();
        return $rowCount;
    }

    function deleteUsers($user_id){
        $query = $this->link->query("DELETE FROM users WHERE id = '$user_id' LIMIT 1");
        $rowCount = $query->rowCount();
        return $rowCount;
    }

}

?>

class.database.php:

<?php

class ManageDatabase{

    protected $db_conn;
    protected $db_host = 'localhost';
    protected $db_name = 'jqueryMobile';
    protected $db_user = 'root';
    protected $db_pass = '';

    function connect(){
        try{
            $this->db_conn = new PDO("mySQL:host=$this->db_host;dbname=$this->db_name",$this->db_user,$this->db_pass);
            return $this->db_conn;
        }
        catch(PDOexception $e){
            return $e->getMessage();
        }
    }

}
?>

我希望有人能找到它似乎出错的地方。 谢谢。

【问题讨论】:

  • 看起来你没有 PDO error handling set to throw exceptions,所以它实际上不会抛出(即使它确实抛出了,你处理该异常的方法也很奇怪)。您应该在所有查询中使用绑定变量,而不仅仅是在addUsers() 中。 (另外,你不能从构造函数返回东西。)

标签: php mysql


【解决方案1】:

据我所知,错误的直接原因是“链接”属性为空。连接到 db 时,似乎 dbmanager 类失败。这就解释了为什么不能调用查询方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-09
    • 2016-02-12
    • 2016-02-09
    相关资源
    最近更新 更多