我是PDO的新手。我有一个尝试和捕获,当某些东西不存在时会捕获并显示错误,即表格。
但是,如何显示sql失败命令的错误消息/原因。
例如,下面我试图将“启用”一词插入一个小的int列 - 但是,只显示我一个空白的屏幕 - 必须调试自己。如何显示SQL失败的错误消息?
$db = new PDO('mysql:host='.$dateBaseHost.';dbname='.$dateBaseName, $dateBaseUsername, $dateBasePassword);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// set/get variables
$id = (isset($_GET['id']) === true) ? $_GET['id'] : die("ID not set") ; // ? : shorthand if else
$action = (isset($_GET['action']) === true) ? $_GET['action'] : die("Action not set") ; // ? : shorthand if else
// query
$query = $db->prepare(" UPDATE `telephoneCountries` SET `enabled`= :action WHERE `id` = :id ");
// bind parameters - avoids SQL injection
$query->bindValue(':id', $id);
$query->bindValue(':action', $action);
// try... if not catch exception
try {
// run the query
$query->execute();
}
catch (PDOException $e){
//sendErrorMail($e->getMessage(), $e->getFile(), $e->getLine());
echo $e->getMessage();
echo $e->getFile();
echo $e->getLine();
}
答案 0 :(得分:6)
我试图将“启用”这个词插入一个小的int列
对mysql来说还算可以。将插入0。
如何显示sql失败命令的错误消息/原因。
对于真正的错误你只需设置PHP来显示它们
ini_set('display_errors',1);
所以 - 你将能够看到每个未被捕获的异常。
此外,如果您只是显示错误消息,但不处理错误本身,则根本不要使用try..catch。 PHP将完成所有工作。这就是重点。
大多数人都会将错误报告与错误处理混淆。后者不应该用于前者。处理错误消息时,您唯一的目标是让PHP提升它们,并设置正确的目的地:
如果没有所有这些try-catch块,你将能够通过一对ini设置或单个错误处理函数(我在另一个答案中提到你)来控制错误消息(包括非例外)。
仅在您要处理错误本身时才使用try..catch - 例如,连接到另一台服务器。
所以,更详细地回答你的问题:
答案 1 :(得分:-1)
而是捕获错误,您可以使用$query->rowCount();
来检测成功更新。 İfrowCount() > 0
,表示更新成功。