【问题标题】:Determining statement type in PDO确定 PDO 中的语句类型
【发布时间】:2014-08-26 18:15:37
【问题描述】:

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

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

【问题讨论】:

  • 在为准备语句而传递的查询中查找关键字?
  • 是的,这是一个显而易见的答案。但我只是想确定如果我旁边有螺丝刀,我是否不会用钳子插入螺丝。

标签: php mysql sql pdo pdostatement


【解决方案1】:

首先设置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(); 

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-26
    • 1970-01-01
    • 1970-01-01
    • 2020-09-07
    • 2016-12-02
    • 1970-01-01
    • 1970-01-01
    • 2016-01-19
    相关资源
    最近更新 更多