我尝试编写自己的PDO包装器类,我的语句始终返回true,而我无法获取任何内容。

这是我的DB

class DB {

private $db;
private $host = "localhost";
private $database = "test";
private $user = "test";
private $password ="test";

public function __construct(){
    try {
        $this->db = new \PDO("mysql:host=" . $this->host . ";dbname=" . $this->database, $this->user, $this->password);
        $this->db->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
    } catch (\PDOException $error) {
        die("Verbindung zur Datenbank fehlgeschlagen: <br>" . $error);
    }
}

public function run($sql, $args = []){
    try{
        $stmt = $this->db->prepare($sql);
        $result = $stmt->execute($args);
        return $result;
    } catch(\PDOException $error) {
        die("Fehler bei Datenbankabfrage: <br>". $error);
    }
}
}


在这里,我实例化了类的一个新实例并尝试获取数据

$DB = new DB();
$data = $DB->run("SELECT * FROM testtbl")->fetchAll();


没有fetchAll(),它将返回true,并在我的error.log中引发错误


  PHP致命错误:未捕获错误:在布尔值上调用成员函数fetchAll()


如果有人可以帮助我,那会很好。

最佳答案

PDOStatement::execute仅返回一个布尔值,该布尔值表示查询是否成功。您需要在语句上调用fetchAll,因此,

return $result;


你应该有

return $stmt;

关于php - bool 上的PHP PDO fetchAll(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55203054/

10-13 01:35