gpt4 book ai didi

php - mysql_affected_rows 找出查询的类型

转载 作者:行者123 更新时间:2023-11-30 22:57:17 25 4
gpt4 key购买 nike

我的 php 代码中有一个实用程序类,它为一些 mysql 函数提供包装器。其中一个名为 query() 的函数接受查询字符串作为参数,然后执行该查询。在此查询函数中,我想查明给定查询是数据状态更改查询 (UPDATE/INSERT/DELETE etc.) 还是简单的数据提取查询 (SHOW/SELECT).

我正计划为此使用 mysql_affected_rows 函数,因为 php 手册说此函数“获取受 last INSERT、UPDATE、REPLACE 或 DELETE 查询影响的行数”。

我假设我会为 SELECT 查询得到 0 或 null。我知道即使那些未进行任何修改的 UPDATE/DELETE 查询也会返回 0,但从我的代码角度来看这没问题,因为我只想识别那些实际进行了一些数据修改的查询。

但是当我实际执行代码时,mysql_affected_rows 返回我为 SELECT 查询选择的行数。

这是预期的行为吗?我查阅了 php 手册,但他们没有详细说明在 SELECT 查询的情况下 mysql_affected_rows 的行为。

我查阅了 MySql 文档,它说 MySql mysql_affected_rows 函数应该像 mysql_num_rows 一样工作(这与我看到的行为一致)。

那么有没有其他 php 函数可以帮助我识别查询类型而无需实际解析查询?

最佳答案

也许您尝试的太复杂了,字符串解析在这里并不是最糟糕的主意。

或者您知道任何查询不是以它正在做的事情开始的吗?

无论如何,mysql_query 中的多重查询不可用

public function query($query) {
$state = null;

if (stripos(trim($query), 'INSERT') === 0) {
$state = 'insert';
}
elseif (stripos(trim($query), 'REPLACE') === 0) {

}
elseif (stripos(trim($query), 'UPDATE') === 0) {

}
elseif (stripos(trim($query), 'SELECT') === 0) {
$state = 'select';
}
elseif (stripos(trim($query), 'SET') === 0) {
$state = 'option';
}
else {
$state = '?';
}

/* ... */
}

关于php - mysql_affected_rows 找出查询的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25724450/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com