在非对象上调用成员函数fetch()


Call to a member function fetch() on a non-object

我是php新手,看过许多与此错误相关的帖子,但仍然找不到问题。我也尝试了try catch块,没有得到异常。没有连接问题,也在我的数据库中测试了查询。

$host="mysql:host=".$host_name.";dbname=".$dbname; 
$ques_code=1;
$dbh = new PDO($host, $dbuser, $dbpass);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$S=$dbh->prepare("SELECT q_code FROM question_code_submission WHERE q_num = :id");
$S->bindParam(':id', $ques_code);
$temp_name=$S->execute();
$code_name=$temp_name->fetch(PDO::FETCH_ASSOC);
$code_name=$code_name['q_code'];

$S->execute()返回true或false,因此$temp_name被设置为布尔值-这解释了为什么不能调用$temp_name->fetch() -它不是对象。

您根本不需要$temp_name,只需:

$S->execute();
$code_name = $S->fetch(PDO::FETCH_ASSOC);
$host="mysql:host=".$host_name.";dbname=".$dbname;  
$ques_code=1;
$dbh = new PDO($host, $dbuser, $dbpass);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$S=$dbh->prepare("SELECT q_code FROM question_code_submission WHERE q_num = :id");  
$S->bindParam(':id', $ques_code);    
$success = $S->execute();
if(!$success){
   echo "Query failed !!";
}else{
  $result=$S->fetch(PDO::FETCH_ASSOC);
  $code_name = $result['q_code'];
  echo $code_name;
}