使用MySQL和PHP对null调用成员函数prepare()



我不知道为什么会出现这个错误。我浏览了一些已经发布的答案。没有帮助。

这是我的代码:

public static function validateLogin($postdata){
$dba = new DatabaseAgent("mysql",DBUSER,DBPASSWD,"localhost","projectdatabase");  
$username = $postdata['username'];
$password = $postdata['password'];
//Setup the query()
$query = "SELECT * FROM users WHERE username = $username AND password = $password";
//Setup the bind parameters
$bindParams = ['username' => $postdata['username'], 'password' => $postdata['password']];
//Pull the resultset
$resultset = $dba->query($query, $bindParams);
$usertype = ($resultset[0]->type);
var_dump($resultset);
if ($resultset){
//Return true
return true;
} else {
//Return false if the user was not logged in.
return false;
}
}

这是PDO代码:

public function __construct($dbtype, $user, $pass, $host, $dbname) {
$this->dsn = $dbtype.":host=".$host.";dbname=".$dbname;
$this->user = $user;
$this->pass = $pass;
// Set options  
$options = array(  
PDO::ATTR_PERSISTENT => true,  
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION  
); 
//Try to connect, if not barf
try {  
$this->pdo = new PDO($this->dsn, $this->user, $this->pass, $options);  
}  catch (PDOException $e) {
$this->error = $e->getMessage();  
}  
}
function query($strQuery, $bindParams) {
try {
$this->stmt = $this->pdo->prepare($strQuery);
$this->stmt->execute($bindParams);
} catch (Exception $ex) {
echo "Error Executing Query:".$ex->getMessage();
}
$resultset = null;
while ($result =  $this->stmt->fetch(PDO::FETCH_OBJ)) {
$resultset[] = $result;
}
return $resultset;

$pdo抛出异常时,您只需将错误消息分配给一个变量,而不执行任何其他操作。您的代码永远不会知道PDO实例化是否成功。

因此,我假设$pdo实例化静默失败,并且您的$pdo属性为null。用throw $e;替换$this->error = $e->getMessage();,看看会发生什么。

最新更新