我正在使用此方法來獲取SELECT語句的行計數,但它對LIMIT語句無法正常工作,所以我添加了代碼以從LIMIT語句中刪除LIMIT SQL字符串,但現在它根本不工作!無法理解在php/mysql中返回的0行
當我在最後開始使用帶有LIMIT X, X
的查詢時,必須在頂部添加部分以從查詢中去除該部分,因爲此方法只返回一列 - 但是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允許計數= 8:
SELECT COUNT(*) AS count FROM tbl_product WHERE 1 ORDER BY last_update DESC;
從dbRowsCount($sql, $data)
方法的輸出顯示此查詢應該結束了相同的:
原來的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;
regex = SELECT COUNT(*)AS count FROM tbl_product WHERE 1 ORDER BY last_update DESC;
行數= 0
這是工作之前,它返回rows=8
沒有我添加了從查詢刪除「LIMIT X,X」的部分,但只有當限爲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行?
輸出顯示了它出來,雖然正確? 'new sql = SELECT * FROM tbl_product WHERE 1 ORDER BY last_update DESC;' – Ozzy
正確的,在MySQL提示符下工作。但是它可能在'mysql_query()' –
中不一樣,爲什麼不呢?這是一個沒有參數的查詢。這是PDO而不是mysql_query。 – Ozzy