以下是我工作的代码示例 我在第33行遇到致命错误,请帮助我,如果你能非常感谢你的话
private $dbh;
private $error;
private $stmt;
public function __construct() {
// set DSN
$dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname;
// set options
$options = array (
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
);
// create a new PDO instance
try {
$this->dbh = new PDO ($dsn, $this->user, $this->pass, $options);
}
// catch any errors
catch(PDOException $e){
$this->error = $e->getMessage();
}
}
public function query($query) {
$this-> stmt = $this-> dbh->prepare($query);
}
答案 0 :(得分:1)
您使用异常错误方式。
只需像这样编写代码
public function __construct() {
$dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname;
$options = array (
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
);
$this->dbh = new PDO ($dsn, $this->user, $this->pass, $options);
}
public static function __call($method, $args)
{
return call_user_func_array(array($this->dbh, $method), $args);
}
public static function run($sql, $args = [])
{
$stmt = $this->dbh->prepare($sql);
$stmt->execute($args);
return $stmt;
}
这是您的包装器可能需要的所有代码。所有其他代码都是错误的和多余的。
答案 1 :(得分:0)
似乎即使你正在捕获错误,你仍然要继续运行查询函数,因此,如果构造失败了,那么$ dbh就不会被初始化。