如何在php pdo语句中捕获确切的sql错误

时间:2015-01-10 17:26:28

标签: php mysql pdo

我是pdo的新手,因为我只是从传统的查询方法进入它。以下是我写的内容并且有效。我现在关心的是,如果任何查询中的任何错误,无论是选择,插入还是更新它们都被捕获的那个捕获但是我不能确切地指出错误。那么多个尝试和捕获是正确的方向吗?

try {
      $dsn = 'mysql:dbname='.dbDatabase.';host='.dbHost;
    $link = new PDO($dsn, dbUser, dbPassword );
    $link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 } catch (PDOException $pe) {
    die("Could not connect to the database $dbname :" . $pe->getMessage());
}
$link->beginTransaction();
$rollBackStatus="False";
try
{ 
      $selectQuery1 ="Select ......";

    $selectQueryResult1 = $link->prepare($selectQuery1);
    $selectQueryResult1->bindParam(':uname', $userName);
    $selectQueryResult1->execute();
    $n1=$selectQueryResult1->rowCount();
    //echo "TEST : ".$n1;
    if($n1==1)
    {
        $row1 = $selectQueryResult1->fetch();
        $userID=$row1['userID'];

                if($row1['up']==$up){

            $insertQuery1 ="Insert .......... ".                                     
              $insertQueryResult1 = $link->prepare($insertQuery1);
                $insertQueryResult1->bindParam(':uID', $userID);
                $insertQueryResult1->bindParam(':uIP', $userIP);
                if($insertQueryResult1->execute()){


                }
                else{
                    $rollBackStatus="True";
                    $link->rollback();
                }
                $updateQuery1 ="Update ........ ";
                    $updateQueryResult1 = $link->prepare($updateQuery1);
                $updateQueryResult1->bindParam(':uID', $userID);
                if($updateQueryResult1->execute()){


                }
                else{
                    $rollBackStatus="True";
                    $link->rollback();
                }   
        }           

}
catch(PDOException $pe)
{
    $rollBackStatus="True";
    die("Error in selectQuery1 :" . $pe->getMessage());
    $link->rollback();
}
if($rollBackStatus=="False"){
    $link->commit();
    $link=null;
    if($headerSent!="")
    {
        header($headerSent);
    }
}

1 个答案:

答案 0 :(得分:3)

您可以使用以下方法检查执行查询后的任何错误。

$selectQueryResult1->execute();
$arr = $selectQueryResult1->errorInfo();
print_r($arr);