在PDO中确定语句类型

时间:2014-07-05 21:24:42

标签: php mysql sql pdo pdostatement

长话短说。我有一个处理数据库查询的类,它根据传递给它的语句类型在某些时候分叉。如果它是SELECT,它会做一些事情。如果它是(成功的)INSERTUPDATEDELETE则会执行其他操作。我依靠PDOStatement::rowCount来确定它,它在我以前的系统上运行良好。但是,在将类移植到另一个服务器PDOStatement::rowCount后,行为已更改(现在它返回SELECT语句返回的行数)。我在PHP手册中读到这样的行为可能发生,并且它不一致并且取决于数据库。

所以我的问题。是否有另一种万无一失的方法来确定哪种类型的声明传递给PDO?我想我可以写一个方法来分析语句的语法并将其添加到类中,但也许还有其他方法(内置方法?),在这种情况下我不应该尝试重新发明轮子。感谢。

1 个答案:

答案 0 :(得分:0)

首先设置PDO::ATTR_ERRMODE属性。

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

则...

try {

    $stmt = $pdo->prepare($sql);
    $stmt->execute($values);

    try {

        $rows = $stmt->fetchAll();

        /* The SQL was SELECT */

        $count = count($rows);


    } catch (PDOException $e) {

        /* The SQL was INSERT, UPDATE or DELETE */

        $count = $stmt->rowCount();

    }

} catch (PDOException $e) {

    /* Execution Failure */

    $error = $e->getMessage(); 

}