如果表不存在,如何处理PDO致命错误?

时间:2017-07-22 18:09:30

标签: php mysql pdo

我想打印方便的错误消息(用户可理解的消息)而不是PDO系统fatel错误。

我有以下PDO语句,如果该表不存在我想打印错误消息表不存在。

$db = new PDO('mysql:host=localhost;dbname=cnf20;charset=utf8mb4', 'root', '', array(PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
function getData($db) {
   $stmt = $db->query("SELECT * FROM tb_accessory_info1");
   return $stmt->fetchAll(PDO::FETCH_ASSOC);
}

try {
  foreach(getData($db) as $row) {
    echo $row['part_no']; 
}
} catch(PDOException $ex) {
    $db->rollBack();
    echo $ex->getMessage(); 
}

目前我收到此错误消息

Fatal error: Uncaught PDOException: There is no active transaction
 in......on line 15

而不是这个我想打印用户可以理解的错误消息,如'请再试一次!'

请支持我!感谢

1 个答案:

答案 0 :(得分:0)

正如Paul所说,不清楚为什么要查询一个不存在的表,但有一种方法是在运行其他语句之前检查MySQL中是否存在表:

SELECT *
FROM `information_schema`.`tables`
WHERE `table_schema` = 'database_name' AND `table_name` = 'table_name'
LIMIT 1;

这假设连接到数据库的用户对information_schema tables具有读访问权限。将'database_name''table_name'替换为您的值。