Ala*_*ado 0 php session pdo class
所以我目前正在尝试执行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
Run Code Online (Sandbox Code Playgroud)
这是我调用函数的地方:
include 'includes/user.inc.php';
$userOBJ = new User;
if($userOBJ->isAdmin($_SESSION['session_u-name'])){
AdminControl();
}
Run Code Online (Sandbox Code Playgroud)
码:
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;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
第一个错误说我没有处理PDO错误,我认为我已经处理了我的代码中的任何PDO错误,但不知何故仍然被检测到,因为我没有这样做...(纠正我,如果错误)
第二个错误表明调用PDO-> fetch()返回一个布尔值,但是我正在请求数据,所以它无法继续使用以下代码......我不明白为什么会显示......" username_db"查询中的var与我在数据库中的相同.
在与上面函数相同的文件中,我有下一个函数,在调用时,它可以正常运行
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;
}
}
Run Code Online (Sandbox Code Playgroud)
有什么东西我不见了吗?我已经检查了这个帖子,但我仍处于准确位置......
感谢您的时间
(我还在学习PDO,抱歉,如果我的代码不干净)
这条线是其中一个原因.execute返回true或false,指示查询是成功还是失败.
$query1 = $stmt->execute([$userToGet]);
Run Code Online (Sandbox Code Playgroud)
从某种意义上说,$ query1是一个布尔值.现在在这些行中,您正在尝试从$ query1访问fetch方法,这是一个布尔值.
foreach ($query1->fetch() as $row) {
if($row['admin_db'] == 1){
return true;
} else {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
要获取行,您需要像这样写:
$results = $stmt->fetch();
Run Code Online (Sandbox Code Playgroud)
或者在你的情况下:
foreach ( $stmt->fetch() as $row) {
if($row['admin_db'] == 1){
return true;
} else {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)