PHP ADOdb,如何测试查询是否为“插入、更新、删除或删除”


PHP ADOdb, How to test if query is "insert, update, delete, or drop"?

MySQL/i 的$db->query('some query')将返回成功SELECT SHOW DESCRIBEEXPLAIN的结果集,或true返回成功INSERT UPDATE DELETE DROP等的结果集。

因此,我们可以很容易地识别查询的"类型":

$result = $db->query('some query that we want to identify');
if($result === false){
    echo 'Error'; exit;
}
if($result === true){
    // query is a successful INSERT, UPDATE, DELETE, DROP, etc.
}else{ // else type of $result will be result set
    // query is a successful  SELECT, SHOW, DESCRIBE, EXPLAIN 
}

我们如何使用 PHP ADOdb 完成上述操作?

我目前正在使用:

$result = $db->Execute('some query');
if($result === false){
    echo 'Error'; exit;
}
if(get_class($result) === 'ADORecordSet_empty'){
    // query is a successful INSERT, UPDATE, DELETE, DROP, etc?
}else{
    // query is a successful  SELECT, SHOW, DESCRIBE, EXPLAIN ?
}

似乎有效,但它绝对感觉很脆弱并且"与 API 合作"。有没有更好的方法?

是否有内置的 ADOdb 函数来执行此操作?

当在

特定于数据库的驱动程序中调用以执行查询的基础 API 返回true 时,ADOdb 将返回一个空的记录集对象。

默认情况下,这意味着ADORecordSet_empty对象,但如果正在使用自定义记录集类(设置 rsPrefix(,则可能会有所不同。

换句话说,我认为没有其他方法可以实现你想要的;你可以通过与$db->rsPrefix . 'empty'进行比较来使代码更具可移植性,而不是硬编码'ADORecordSet_empty'

您可以使用 affected_rows(( 方法

if ($DB->affected_rows() !== 0) {
 //true
}

http://devcodepro.com/view/70/1/ADOdb-Check-if-MySQL-query-executed-successfully