PHP PDO-对非对象调用成员函数prepare()

PHP PDO-对非对象调用成员函数prepare(),php,jquery,mysql,ajax,pdo,Php,Jquery,Mysql,Ajax,Pdo,我搜索了有同样问题的人,但还没有找到具体帮助我的答案,所以我希望你能帮我解决这个问题 我有以下代码: inc_db.php ajax_login.php jqueryajax请求如下 absagen.php 我得到的错误是: 致命错误:对第26行/is/htdocs/wp12440376_DDP0E7D8ZQ/www/php/inc_db.php中的非对象调用成员函数prepare 我知道它的范围,但我真的不能找出什么是错的。 有人能告诉我并向我解释我做错了什么吗? 我在类本身中建立了与数据库的

我搜索了有同样问题的人,但还没有找到具体帮助我的答案,所以我希望你能帮我解决这个问题

我有以下代码:

inc_db.php

ajax_login.php

jqueryajax请求如下

absagen.php

我得到的错误是:

致命错误:对第26行/is/htdocs/wp12440376_DDP0E7D8ZQ/www/php/inc_db.php中的非对象调用成员函数prepare

我知道它的范围,但我真的不能找出什么是错的。 有人能告诉我并向我解释我做错了什么吗?
我在类本身中建立了与数据库的连接,为什么会出现问题?

您的错误是没有连接到服务器。您尝试/捕获错误,但您不会因此而死亡,也不会显示错误已经发生。当您尝试准备查询时,没有db对象,因为无法创建该对象。检查您的设置以进行连接


另外,为什么在构造函数中有一个return语句?你不应该归还任何东西。构造函数从该类创建对象,并将对象分配给$dbh。

我怀疑这一行$this->dbh=new PDO。。。。您是否意外地将DB用户/密码留在了那里?。一些DBs需要更多的参数——我认为MySQL就是其中之一。正如所回答的,您可能在PDO中发现了一个异常。此外,您可能希望删除该返回语句。好了,构造函数无论如何都不会返回任何东西,而且您可能会在这里混淆自己,因为您需要的是数据库类而不是PDO类
class Database {
private $user = "myusername"; // just changed from my original one of course
private $pass = "mypassword"; // just changed from my original one of course
private $db = "mydb";
private $host = "localhost";
private $dbh;
private $error;
private $stmt;

public function __construct(){
    $options = array(
        PDO::ATTR_PERSISTENT    => true,
        PDO::ATTR_ERRMODE       => PDO::ERRMODE_EXCEPTION
    );

    try {
        $this->dbh = new PDO("mysql:host=localhost;dbname=db12440376-voba, db12440376-voba, vobaschoe()#135");
        return $this->dbh;
    } catch (PDOException $e) {
        $this->error = $e->getMessage();
    }
}

public function query($query){
    $this->stmt = $this->dbh->prepare($query);
}

public function bind($param, $value, $type = null){
    if (is_null($type)) {
      switch (true) {
        case is_int($value):
          $type = PDO::PARAM_INT;
          break;
        case is_bool($value):
          $type = PDO::PARAM_BOOL;
          break;
        case is_null($value):
          $type = PDO::PARAM_NULL;
          break;
        default:
          $type = PDO::PARAM_STR;
      }
    }
    $this->stmt->bindValue($param, $value, $type);
}

public function execute(){
    $this->stmt->execute();   
}

public function resultset(){
    $this->execute();
    return $this->stmt->fetchAll(PDO::FETCH_ASSOC);
}

public function close_con(){
    $this->dbh = null;
}
}
session_start();
ob_start();
include_once("../php/inc_db.php");
$dbh = new Database();

$username = $_POST['user'];
$password = $_POST['pass'];

$dbh->query("SELECT user, pass, rest FROM voba_user WHERE user = :user AND    pass = :pass");
$dbh->bind(":user", $username);
$dbh->bind(":pass", $password);

if($dbh->execute()){
    while($row = $dbh->stmt->fetchObject()){
        if($row->user == $username &&
            $row->pass == $password){
            $_SESSION['user'] = $row->user;
            $_SESSION['rest'] = $row->rest;
            echo $_SESSION["user"];
            echo $_SESSION["rest"];
        }
    }   
}
$(document).ready(function(){
    $("input[name=submit]").click(function(){
        username = $("input[name=username]").val();
        password = $("input[name=password]").val();
        $.ajax({
          url: "../ajax/ajax_login.php",
          data: { user: username, pass: password },
          type: "post",
          async: true,
          success: function(data){
            if(data){
                console.log(data);
                if(data.indexOf("User") > -1){
                    rest = "User";
                } else {
                    rest = "Admin";
                }
            }
          }
        });
        p = $(document.createElement("p"));
        if(rest == "Admin") {
            text = $(document.createTextNode("Hallo " + username + ". Admin"));
        } else {
            text = $(document.createTextNode("Hallo " + username));
        }
        p.append(text);
        $("#content").append(p);
    });