确定查询的基础上,查询字符串

问题描述:

$query1 = 'SELECT * FROM table WHERE field = ?';确定查询的基础上,查询字符串

$query2 = 'UPDATE table SET field = ?';

我如何检测查询修改数据库,或者它只是请求结果的类型?

如果我为SELECT(如果发现查询是只读的)执行strpos就足够了吗?或者还有其他情况需要处理?

+0

我不认为检查SELECT是一个好主意,因为SELECT可以在子查询中使用。然而,包含UPDATE的任何东西肯定会修改数据库 – BeRecursive 2012-02-09 15:39:11

+0

想想'update table set col1 =(从tab2选择abc)'等等 – 2012-02-09 15:39:32

+0

if(strpos('SELECT',$ query)=== 0) $ is_read_only = true;'? – Alex 2012-02-09 15:40:38

假设它是MySQL的..

mysql_affected_rows()显示,被插入affeced行数/删除/更新等,而mysql_num_rows()显示你有多少选择。根据哪个函数返回一个值,您应该能够确定响应的类型。

+0

OP很清楚地询问如何确定*而不运行查询 - 请阅读在回答之前妥善解决问题和评论。 – DaveRandom 2012-02-09 16:00:06

+0

不确定你是否在那里 - 操作系统要求确定如何回应查询..看到上面的评论:@jonathan - 没有。我正在构建一个简单的数据库API,并且需要确定我应该返回什么。我将其解释为:“我工作并更新了100条记录”或“这里是我找到的记录”。 – FreudianSlip 2012-02-09 16:27:45

+0

即使这是真的,取决于驱动程序,简单的'is_bool()'/'is_resource()'(或'is_object()')检查将是更可靠的方法来确定您是否有返回结果。即使文档没有说明,'mysql_affected_rows()'仍然会在'SELECT'后面给出结果。 – DaveRandom 2012-02-09 16:47:40