在boolean上调用成员函数fetch()

时间:2015-09-21 13:12:52

标签: php boolean fetch

我收到此错误:

  

致命错误:在布尔值中调用成员函数fetch()   第34行的C:\ xampp \ htdocs \ repo \ generator \ model \ database.php

当我运行此代码时:     

    class database
    {
        private $user = 'root';
        private $pass = '';
        public $pdo;

        public function connect() {
            try {
                $this->pdo = new PDO('mysql:host=localhost; dbname=generatordatabase', $this->user, $this->pass);
                echo 'Połączenie nawiązane!';
            }
            catch(PDOException $e) {
                echo 'Połączenie nie mogło zostać utworzone: ' . $e->getMessage();
            }
        }

        public function createTable() {

                        $q = $this->pdo -> query('SELECT * FROM article');
                          while($row = $q->fetch()) {
                              echo $row['id'].' ';
                          }
                          $q->closeCursor();
        }
    }

    ?>

3 个答案:

答案 0 :(得分:9)

根据PDO::query

的PHP手册
  

PDO :: query()返回PDOStatement对象,或者失败时返回FALSE。

看起来您的查询失败(在第33行)并因此返回BOOLEAN(false),可能是因为在执行该点时,PDO尚未连接到包含名为 article 。在connect()方法中,我看到它试图连接到一个名为'generatordatabase'的数据库;确保在调用createTable()之前建立此连接,否则请确保它包含一个名为“article”的表。

我建议添加一些代码示例,例如在触发错误之前调用此类/方法的代码。

答案 1 :(得分:2)

一些错误处理可以帮助您避免这样的问题:

$q = $this->pdo->query('SELECT * FROM article');

//error case
if(!$q)
{
  die("Execute query error, because: ". print_r($this->pdo->errorInfo(),true) );
}
//success case
else{
     //continue flow
}

答案 2 :(得分:0)

我不确定是否确实是我遇到的错误,但是我的错误是由于我的$ con变量引起的,我为2个SQL语句使用了一个$ con,例如:

 $con = new mysqli($host,$username,$password,$database);
$sql = "SELECT name FROM users WHERE email = '$email'";

$stm = $con->prepare($sql);
$stm->execute();

 $sql1 = "INSERT INTO posts 
         VALUES('$email','$body')";


$stm1 = $con->prepare($sql1);


if ($stm1->execute()) {

我应该做的:

$con = new mysqli($host,$username,$password,$database);
$sql = "SELECT name FROM users WHERE email = '$email'";

$stm = $con->prepare($sql);
$stm->execute();

$con1 = new mysqli($host,$username,$password,$database);

     $sql1 = "INSERT INTO posts 
             VALUES('$email','$body')";

    $stm1 = $con1->prepare($sql1);

    $stm1->execute()