根据要求,我重新格式化了问题:
以下代码:
$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
,例如select或insert,答案会有所不同吗?
原始问题:
答案 0 :(得分:1)
试试这个:
try {
//Initial query processing
$execute = $query->execute()
if (!$execute) {
//catch the exception
throw new Exception ("blah")
}
} catch (Exception $e) {
//Exception logic here
}
像这样编写你的查询&如果他们在try
部分遇到异常,它将转发到catch
部分,您可以随意处理它(无论id是否取决于特定情况)。
如果没有例外,它将永远不会到达catch
语句,您的查询将只执行。
说到 DUPLICATES - >你需要在SQL中解决这个问题。例如,您的查询可能是:
INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6) ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);
答案 1 :(得分:0)
我看到execute()返回false而没有抛出异常,这在我看来是一种意外/不良行为。 这意味着我们基本上必须同时进行 - 并行处理错误和异常处理。
在我的情况下:如果我准备了一个没有任何参数的插入查询,然后用参数执行。执行不会抛出异常但返回false。我建议任何人使用@ mlishn的解决方案。