我是PDO的新手,关于它的一些事情使我感到困惑,我已经尝试创建一个测试函数来查看是否会为无效的查询抛出异常但是没有抛出任何东西.
这是代码
<?php
include_once("/var/www/include/constants.php");
class DB{
private $DBH;
public function DB(){
try{
$DBH = new PDO("mysql:host=".DB_SERVER.";dbname=".DB_NAME, DB_USER, DB_PASS);
}
catch(PDOException $e) {
echo $e->getMessage();
}
}
public function test(){
try{
$DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$DBH->prepare('DELECT id FROM users');
}
catch(PDOException $e) {
echo $e->getMessage();
}
}
};
/* Create database connection */
$db = new DB;
$db->test();
?>
Run Code Online (Sandbox Code Playgroud)
除了缺少对$this
数据库句柄的引用之外,还需要告诉PDO它不能模拟准备.下面的代码将抛出这样的异常:
SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中有错误; 检查与MySQL服务器版本对应的手册,以便在第1行的"DELECT id FROM users"附近使用正确的语法
class DB{
private $DBH;
public function DB(){
try{
$this->DBH = new PDO("mysql:host=localhost;dbname=movies", 'root', 'jsat12');
$this->DBH->setAttribute(PDO::ATTR_EMULATE_PREPARES, false );
}
catch(PDOException $e) {
echo $e->getMessage();
}
}
public function test(){
try{
$this->DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$this->DBH->prepare('DELECT id FROM users');
}
catch(PDOException $e) {
echo $e->getMessage();
}
}
};
/* Create database connection */
$db = new DB;
$db->test();
Run Code Online (Sandbox Code Playgroud)