Php 确定PDO中的语句类型
长话短说。我有一个处理数据库查询的类,它根据传递给它的语句类型在某个点上分叉。如果它是一个Php 确定PDO中的语句类型,php,mysql,sql,pdo,pdostatement,Php,Mysql,Sql,Pdo,Pdostatement,长话短说。我有一个处理数据库查询的类,它根据传递给它的语句类型在某个点上分叉。如果它是一个选择,它会做一些事情。如果它是(成功的)插入,更新或删除它会执行其他操作。我依靠PDOStatement::rowCount来确定它,它在我以前的系统上运行良好。但是,在将类移植到另一台服务器后,PDOStatement::rowCount行为发生了变化(它现在返回SELECT语句返回的行数)。我在PHP手册中读到这样的行为可能会发生,而且不一致,取决于数据库 所以我的问题是。是否有另一种简单的方法来确定传
选择
,它会做一些事情。如果它是(成功的)插入
,更新
或删除
它会执行其他操作。我依靠PDOStatement::rowCount
来确定它,它在我以前的系统上运行良好。但是,在将类移植到另一台服务器后,PDOStatement::rowCount
行为发生了变化(它现在返回SELECT
语句返回的行数)。我在PHP手册中读到这样的行为可能会发生,而且不一致,取决于数据库
所以我的问题是。是否有另一种简单的方法来确定传递给PDO的语句类型?我想我可以编写一个方法来分析语句的语法并将其添加到类中,但也许还有其他方法(内置方法?),在这种情况下,我不应该尝试重新发明轮子。谢谢。首先设置
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();
}
在为准备语句而传递的查询中查找关键字?是的,这是一个显而易见的答案。但我只是想确定如果我旁边有螺丝刀,我是否不会用钳子插入螺丝。