长话短说。我有一个处理数据库查询的类,它根据传递给它的语句类型在某些时候分叉。如果它是SELECT
,它会做一些事情。如果它是(成功的)INSERT
,UPDATE
或DELETE
则会执行其他操作。我依靠PDOStatement::rowCount
来确定它,它在我以前的系统上运行良好。但是,在将类移植到另一个服务器PDOStatement::rowCount
后,行为已更改(现在它返回SELECT
语句返回的行数)。我在PHP手册中读到这样的行为可能发生,并且它不一致并且取决于数据库。
所以我的问题。是否有另一种万无一失的方法来确定哪种类型的声明传递给PDO?我想我可以写一个方法来分析语句的语法并将其添加到类中,但也许还有其他方法(内置方法?),在这种情况下我不应该尝试重新发明轮子。感谢。
答案 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();
}