-1

长话短说。我有一个处理数据库查询的类,它根据传递给它的语句类型在某个时候分叉。如果它是 a SELECT,它会做一些事情。如果它是 (successful) INSERTUPDATE或者DELETE它会做其他事情。我依靠它PDOStatement::rowCount来确定它,它在我以前的系统上运行良好。然而,在将类移植到另一个服务器后,PDOStatement::rowCount行为发生了变化(它现在返回SELECT语句返回的行数)。我在 PHP 手册中读到这种行为可能会发生,并且它不一致并且取决于数据库。

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

4

1 回答 1

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(); 

}
于 2014-07-05T22:29:29.143 回答