所以我当前正在尝试执行PDO SELECT请求,但是在执行和提取提取的数据时,会显示此错误:
1 - Fatal error: Uncaught Error: Call to a member function fetch() on boolean in C:\wamp64\www\NewKali\includes\user.inc.php on line 53
2 - Error: Call to a member function fetch() on boolean in C:\wamp64\www\NewKali\includes\user.inc.php on line 53
这是我所谓的函数:
include 'includes/user.inc.php';
$userOBJ = new User;
if($userOBJ->isAdmin($_SESSION['session_u-name'])){
AdminControl();
}
代码:
public function isAdmin($user){
$userToGet = $user;
$stmt = $this->Connect()->prepare("SELECT * FROM user_secure WHERE username_db=?");
$query1 = $stmt->execute([$userToGet]);
if(!$query1)
{
die("Execute query error, because: ". print_r($this->Connect()->errorInfo(),true) );
}else{
foreach ($query1->fetch() as $row) {
if($row['admin_db'] == 1){
return true;
} else {
return false;
}
}
}
}
第一个错误表明我没有处理PDO错误,我认为我已经在代码中处理了任何PDO错误,但是由于我没有这样做,仍然以某种方式被检测到...(正确如果我错了我
第二个错误指出调用PDO-> fetch()返回一个布尔值,但是我正在请求数据,因此无法继续以下代码... 我不明白为什么会这样显示...查询中的“ username_db”变量与我的数据库中的变量相同。
在与上述函数相同的文件中,我具有下一个函数,当调用该函数时,效果很好
public function RegisterUser($user, $pwd, $mail){
$u_Insert = $user;
$p_Insert = $pwd;
$m_Insert = $mail;
$stmt = $this->Connect()->prepare("INSERT INTO user_secure(username_db, password_db) VALUES (?,?)");
$query1 = $stmt->execute([$u_Insert, $p_Insert]);
$stmt = $this->Connect()->prepare("INSERT INTO user_info(mail_db) VALUES (?)");
$query2 = $stmt->execute([$m_Insert]);
if($query2 && $query1){
return true;
} else {
return false;
}
}
有什么我想念的吗? 我已经检查了这个thread,但我仍然在正确的位置...
谢谢您的时间
(我仍在学习PDO,如果我的代码不干净,对不起)
答案 0 :(得分:5)
此行是原因之一。 execute返回true或false,指示查询是成功还是失败。
$query1 = $stmt->execute([$userToGet]);
从某种意义上说,$ query1是一个布尔值。 现在,在这些行中,您尝试从$ query1访问获取方法,它是一个布尔值。
foreach ($query1->fetch() as $row) {
if($row['admin_db'] == 1){
return true;
} else {
return false;
}
}
要获得该行,您需要这样写:
$results = $stmt->fetch();
或您的情况:
foreach ( $stmt->fetch() as $row) {
if($row['admin_db'] == 1){
return true;
} else {
return false;
}
}