PHP PDO-对非对象调用成员函数prepare()
我搜索了有同样问题的人,但还没有找到具体帮助我的答案,所以我希望你能帮我解决这个问题 我有以下代码: inc_db.php ajax_login.php jqueryajax请求如下 absagen.php 我得到的错误是: 致命错误:对第26行/is/htdocs/wp12440376_DDP0E7D8ZQ/www/php/inc_db.php中的非对象调用成员函数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 我知道它的范围,但我真的不能找出什么是错的。 有人能告诉我并向我解释我做错了什么吗? 我在类本身中建立了与数据库的
我在类本身中建立了与数据库的连接,为什么会出现问题?您的错误是没有连接到服务器。您尝试/捕获错误,但您不会因此而死亡,也不会显示错误已经发生。当您尝试准备查询时,没有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);
});