web-dev-qa-db-ja.com

ブール値でのメンバー関数fetch()の呼び出し

私はこのエラーを受け取ります:

致命的エラー:34行目のC:\ xampp\htdocs\repo\generator\model\database.phpのブール値でメンバー関数fetch()を呼び出す

このコードを実行すると:

    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();
        }
    }

    ?>
10
marjanos

PHPマニュアル PDO :: query

PDO :: query()はPDOStatementオブジェクトを返し、失敗した場合はFALSEを返します。

クエリが失敗しているようで(33行目)、BOOLEAN(false)を返しているようです。おそらく、実行のその時点で、PDOはというテーブルを含むデータベースに接続していないためです記事。 connect()メソッドでは、「generatordatabase」というデータベースに接続しようとしていることがわかります。 createTable()を呼び出す前にこの接続が確立されていることを確認してください。そうでない場合は、「article」というテーブルが含まれていることを確認してください。

エラーがトリガーされる前にこのクラス/メソッドを呼び出すコードなど、いくつかのコード例を追加することをお勧めします。

10
ajmedway

いくつかのエラー処理は、次のような問題を回避するのに役立ちます。

$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
}
3
Aris

私はこれが私が苦労したエラーであるかどうかはわかりませんが、私のエラーは私の$ 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()
0
Hossein