我收到此错误:
致命错误:在布尔值中调用成员函数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();
}
}
?>
答案 0 :(得分:9)
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()