尝试抓住捕获PDO错误的唯一方法来检查sql是否已执行?在早期,我曾经如下所述。我不需要错误消息,错误名称等。只是一个真或假。如果sql工作与否。除了使用try catch之外,是否可以通过其他方式完成。
之前
$createUser = (insert into table (someCol) values (someVal));
$exeCreateUser = mysql_query($createUser);
if($exeCreateUser)
{ //The SQL query worked well
echo 'All went on well';
}else{
//The SQL query failed!
echo 'Failed';
}
立即
$sql = 'insert into names (names) values (:what)';
$what = "This value";
$stmt = $conn->prepare($sql);
$stmt->bindParam(':what', $what, PDO::PARAM_STR, 5);
$stmt->execute();
我可以做以前做过的事情,而不是使用try catch吗?
答案 0 :(得分:1)
答案 1 :(得分:0)
在调用方法之前,您可以使用PDO::setAttribute
将PDO::ATTR_ERRMODE
设置为PDO::ERRMODE_EXCEPTION
以外的值。
如果您这样做,则需要使用PDO::errorCode
或PDOStatement::errorCode
检查错误,适用于每项操作。
PDO::errorCode()
仅检索执行操作的错误代码 直接在数据库句柄上。如果您创建PDOStatement
对象 通过PDO::prepare()
或PDO::query()
并调用错误 语句句柄,PDO::errorCode()
不会反映该错误。您 必须调用PDOStatement::errorCode()
才能返回错误代码 对特定语句句柄执行的操作。
答案 2 :(得分:-1)
您既不需要尝试也不需要其他任何东西。
通常,您无需检查查询是否成功。在经过适当调整的系统上,所有查询都可以顺利运行。
但如果一些查询变得疯狂 - 这意味着出现问题并且必须停止整个应用程序。所以 - 检查每个单独的查询是没有用的 - 你只需要在应用程序级别捕获抛出的异常。
所以,完全没有这种条件的用处。插入失败并不意味着CreateUser失败,而是整个站点失败。并且您不需要本地检查,只需要站点范围的异常处理程序和一般错误503页