PHP ADOdb,如何测试查询是“插入,更新,删除还是删除”?

PHP ADOdb,如何测试查询是“插入,更新,删除还是删除”?

问题描述:

MySQL/i的$db->query('some query')将返回successful SELECT, SHOW, DESCRIBE or EXPLAIN的结果集,或返回truesuccessful INSERT, UPDATE, DELETE, DROP, etcPHP ADOdb,如何测试查询是“插入,更新,删除还是删除”?

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

$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函数来做到这一点?

+0

你可以在手前简单搜索一下sql字符串,看看它包含哪个关键字? – 2015-11-26 20:07:40

+0

@TobyAllen,这在许多使用情况下都会失败,例如如果表/列名包含那个关键字等等。它只有在使用完整的MySQL源代码解释器的情况下才会起作用,即使如此,与MySQL API提供的相比,性能(字符串解析)也将是过分的'$ result === true')。 – Pacerier 2015-11-29 11:01:03

ADOdb returns an empty recordset object当DB特定驱动程序中调用的底层API执行查询时,返回true

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

换句话说,我不认为有任何其他的方式来实现你想要的东西;你可以通过比较$db->rsPrefix . 'empty'而不是硬编码'ADORecordSet_empty'来使代码更加便携。