$sql="delete from t_db_distribute where 1=1 and and id=:id";
try {
$stmt=$dbh->prepare($sql);
$stmt->bindParam(':id', $_POST['id'],PDO::PARAM_INT);
$stmt->execute();
$res=$stmt->rowCount();
if ($res) {
echo "<script language=\"JavaScript\">\r\n"; 
echo "delete".$res."rows!"."\r\n";
echo " history.back();\r\n";
echo "</script>";
exit; 
}
}
catch (PDOException $e) {
die("exec sql error:".$e->errorInfo()."\r\n");

}这里的$sql="delete from t_db_distribute where 1=1 and and id=:id";
我故意写错想测试一下捕获异常的功能,但是无法进去到catch逻辑里去?请问怎样才能捕获到执行语句错误的异常?

解决方案 »

  1.   

    php的try--catch机制,是需要你主动抛出的 :
    如:
    try{
    threw new ErrorCatch();
    } catech(ErrorCatch $e) {
    $e->.....
    }ErrorCatch  需要继承php自带的exception异常机制
      

  2.   

    $sql="delete from t_db_distribute where 1=1 and and id=:id";
    try {
    $stmt=$dbh->prepare($sql);
    $stmt->bindParam(':id', $_POST['id'],PDO::PARAM_INT);
    $stmt->execute();
    $res=$stmt->rowCount();
    if ($res) {
    echo "delete:".$res." rows!"."\r\n";
    }
    else {
    throw new PDOException;
    }
    }
    catch (PDOException $m) {
    die("exec sql error:".$m->getMessage()."\r\n");
    }
    改成了这样但是只显示了exec sql error:
    $m->getMessage没异常信息没有 
      

  3.   

    相关知识
    设置PDO的错误处理模式
    2008-08-02 22:42
    PDO默认的错误处理方式是返回一个数组格式的错误代码。如果想要判断SQL有没有出错时,就需要写一组代码来检测这个返回的数组。觉得这样有些麻烦。还好PDO还提供了另外两种处理方式,只要根据需要设置一下就OK了。PDO::ERRMODE_SILENT
    这是默认使用的模式。PDO会在statement和database对象上设定简单的错误代号,可以使用PDO->errorCode() 和 PDO->errorInfo() 方法检查错误;PDO::ERRMODE_WARNING
    使用这个模式时,PDO将会发出一个传统的E_WARNING信息。PDO::ERRMODE_EXCEPTION
    PDO会抛出一个PDOException异常并设置它的属性来反映错误代号和错误信息。比较之下,我比较倾向于使用第三种,用异常处理错误信息。设置的时候要注意,这三个都是属于PDO::ATTR_ERRMODE属性的值,所以在用setAttribute设置的时候需要加上属性名:PDO::ATTR_ERRMODE。代码举例:$pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);应用场景:
    在你实例化 pdo 后,执行
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);通常在实例化时加入,例
    $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));