gpt4 book ai didi

php - 无法理解 0 行在 php/mysql 中返回

转载 作者:行者123 更新时间:2023-11-29 03:43:16 25 4
gpt4 key购买 nike

我使用此方法获取 SELECT 语句的行计数,但它不能正确用于 LIMIT 语句,因此我添加了代码以从 sql 字符串中删除 LIMIT,但现在它根本不起作用!

当我开始使用末尾带有 LIMIT X, X 的查询时,我不得不在顶部添加部分以从查询中删除该部分,因为此方法仅返回一列 - count - 但 LIMIT 偏移量会导致它不返回任何内容。

function dbRowsCount($sql, $data) {

# removes "LIMIT X,X" from query
$no_limit_sql = $sql;
$pos = stripos($sql, " LIMIT");
if ($pos!==false) {
$no_limit_sql = substr($sql, 0, $pos).";";
# logErrors("original sql=".$sql);
# logErrors("pos=".$pos."<br>new sql=".$no_limit_sql);
}

# query SELECT COUNT(*) instead of SELECT...
# returns row-count
$regex = '/^SELECT\s+(?:ALL\s+|DISTINCT\s+)?(?:.*?)\s+FROM\s+(.*)$/is';
if (preg_match($regex, $no_limit_sql, $output) > 0) {
dbQuery("SELECT COUNT(*) AS count FROM {$output[1]}", $data);
$result = dbFetch();
$last_rowcount = (int)$result["count"];
if ($pos!==false) {
# logErrors("after regex="."SELECT COUNT(*) AS count FROM {$output[1]}");
# logErrors("row count=".$last_rowcount);
}
return $last_rowcount;
} else {
# logErrors("Oops! There was an error:<br>Regex did not match SQL.");
return -1;
}
}

直接放入 MySQL 得到 count=8:

SELECT COUNT(*) AS count FROM tbl_product WHERE 1 ORDER BY last_update DESC;

dbRowsCount($sql, $data) 方法的输出显示此查询应该以相同的方式结束:

original sql=SELECT * FROM tbl_product WHERE 1 ORDER BY last_update DESC LIMIT ?, ?;
pos=59
new sql=SELECT * FROM tbl_product WHERE 1 ORDER BY last_update DESC;
after regex=SELECT COUNT(*) AS count FROM tbl_product WHERE 1 ORDER BY last_update DESC;
row count=0

它之前工作,它返回 rows=8 而没有我添加的用于从查询中删除“LIMIT X,X”的部分,但仅当 LIMIT是0,X。当我尝试 LIMIT 5,5 时,它不会因为偏移量而获取该列,现在它为任何值返回 0 行。

我也直接用 PDO 尝试过,它对 int 和 string 参数都能正常工作!但是使用 PDOStatement->rowCount()。 (不推荐SELECT查询,所以我用了上面的dbRowsCount方法)。

function dbDebugTest() {
global $db;
# logErrors("Beginning dbDebugTest()");
$stmt = $db->prepare("SELECT * FROM tbl_product WHERE 1 ORDER BY last_update DESC LIMIT ?,?");
$offset = "5";
$display = "5";
$stmt->execute(array($offset,$display));
# logErrors("dbDebugTest() returned rows: ".$stmt->rowCount());
}

是什么导致第一个方法返回 0 行?

最佳答案

我所能看到的是,当出现 LIMIT 时,您会在查询后面添加一个分号。也许这就是您遇到问题的原因。

如果这不是问题,假设 dbQuerydbFetch 工作正常并且没有改变,那么您的表是空的? :)

OP Answer 当不再有参数时,我仍在将 $data 数组转发给查询(因为我删除了 LIMIT X, X)

关于php - 无法理解 0 行在 php/mysql 中返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10440741/

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