我找到了解決我的問題,但這更多的是爲什麼問題。這裏是我的情況..PHP PDO SQL_CALC_FOUND_ROWS/FOUND_ROWS()奇怪的問題
我使用的是含有記錄成千上萬的表下面的代碼:
$stmt = $pdo->prepare("SELECT SQL_CALC_FOUND_ROWS * FROM ... LIMIT 10;");
$stmt->execute();
echo $pdo->query("SELECT FOUND_ROWS();")->fetchColumn(); # outputs 0
上述應該輸出的記錄的實際數量,而是它輸出0
現在,如果我在SQL_CALC_FOUND_ROWS的末尾添加尾隨空格查詢它工作正常..
... LIMIT 10; ");
任何想法,爲什麼會?
UPDATE
我試着不使用PDO的準備運行查詢,它似乎只是正常工作以及..
$stmt = $pdo->query("SELECT SQL_CALC_FOUND_ROWS * FROM ... LIMIT 10;");
echo $pdo->query("SELECT FOUND_ROWS();")->fetchColumn(); # works properly
我仍然在試圖重現這對較小的水平,以便其他人可以嘗試一下,看看它是否發生。
更新2
那麼最接近我能得到再現這個問題是使用下面的代碼:
# not working..
$stmt = $pdo->prepare("SELECT SQL_CALC_FOUND_ROWS * FROM `table` LIMIT 10");
$stmt->execute();
echo 'COUNT1: ' . $pdo->query("SELECT FOUND_ROWS()")->fetchColumn() . '<br>';
# working (notice the space before SELECT)..
$stmt = $pdo->prepare(" SELECT SQL_CALC_FOUND_ROWS * FROM `table` LIMIT 10");
$stmt->execute();
echo 'COUNT2: ' . $pdo->query("SELECT FOUND_ROWS()")->fetchColumn() . '<br>';
# output (from my database)
# COUNT1: 0
# COUNT2: 182020
這只是發生在周圍至少包含較大的表〜50 MB數據。我無法在本地重現這一點,所以我認爲這是服務器上的某種配置。下面是我使用的是什麼..
- 紅帽企業Linux服務器版本7.1(米埔)
- Server版本:阿帕奇/ 2.4.6
- 的MySQL版本14.14 DISTRIB 25年5月6日,對於Linux(x86_64的使用EditLine包裝
- PHP 5.4.16(CLI))
任何想法/想法是最歡迎!也想知道如果有人能夠成功地重現這個問題(記得要在更大的桌子上測試它)..
嘗試var_dump($ pdo-> query(「SELECT FOUND_ROWS();」) - > fetchColumn();)'而不是'echo' – bassxzero
http:// stackoverflow。com/questions/186588/which-is-faster-select-sql-calc-found-rows-from-table-or-select-count – RiggsFolly
我猜測它與包含在最後的不必要的分號有關SQL文本。爲什麼在LIMIT 10後面有分號? – spencer7593