按照要求我重新格式化的问题:会返回一个错误的PDO执行()与抛出的异常相同吗?
对于下面的代码:
$newPDO=new PDO($DSN,$USER,$PASS);
$newPDO->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$SQL='SOME SQL STATEMENT MAYBE FAULTY';
try{
$Query=$newPDO->Prepare($SQL)
$Success=$Query->execute();
if(!$Success)
echo('A');
}
catch(PDOException $e)
{
echo('B');
}
的问题是,是否有可能看到“A”印刷?对于选择或插入的不同类型的$SQL
,答案会不同吗?
原题:
- 首先,我的属性设置为PDO :: ATTR_ERRMODE,PDO :: ERRMODE_EXCEPTION,所以,我认为,当执行()遇到从数据库中的错误,它应该抛出例外。 然后我意识到,如果这是真的,只要抛出的异常与返回的'false'相同,我甚至可能不必检查execute()的返回值。我只需要从外面抓到。如果没有发现,查询应该没问题。
但我不确定这是因为execute()不会根据手册默认抛出异常。当我插入某些东西时,我尝试了几次操作,如重复PK和唯一约束违规。我的断言得到支持:PDO将抛出一个异常,我可以从数据库中获取detaield错误消息。 但是我不知道这是否是一个普遍的事实。是否有可能从execute()中获得false,并且当我将ERRMODE设置为最大值时抛出PDOEXCEPTION? *
如果启用异常,那么PDO在失败时抛出异常,它不会返回false。检查错误没有意义,因为执行会立即跳转到任何相关的catch块。 – 2016-08-18 15:21:22
这是预期的行为,但execute()似乎并不总是抛出异常。其实际上这个问题是关于什么的。 – Niksac 2016-08-18 15:55:09