1

いくつかの内部クエリから構築されたかなり複雑なクエリを実行しています。クエリの先頭に SQL_CALC_FOUND_ROWS が含まれていました。残念ながら、取得できるのは行数だけです(結果自体を取得できませんでした)。

SQL_CALC_FOUND_ROWS を取り除き、2 つの異なるクエリを実行することにしました。1 つは行をカウントし、2 番目は行をフェッチします。この場合、結果を取得できますが、COUNT(*) クエリが奇妙に動作します。これが私がすることです:

  1. COUNT(*) クエリを実行
  2. mysql_query() が FALSE を返す
  3. COUNT(*) クエリが空白文字列を返した直後に実行される mysql_error()

コードは次のとおりです。

$sqlCount = "SELECT COUNT(*) AS c FROM ... WHERE ...";
$resultCount = mysql_query($sqlCount);
echo "RESULT COUNT: " . ($resultCount === FALSE) . "<br />";//it returns 1(true)
echo mysql_error(); //it returns nothing (blank string)

さらに mysql_errno() は 0 を返します

このような奇妙な状況について、合理的な説明を見つけることができますか?

4

3 に答える 3

1

コードに間違いはありません。mysql_query行を次のように変更してみてください

 $resultCount = mysql_query($sqlCount) or die(mysql_error() ." <-- There was an error when proccessing query");

奇妙に見えますが、あなたを助けることができます

于 2011-08-17T11:45:49.753 に答える
0

...ギャップを埋めて試してください

<?php
error_reporting(E_ALL);
ini_set('display_errors', true);

$mysql = mysql_query('..', '..', '..') or die(mysql_error());
mysql_select_db('...', $mysql) or die(mysql_error($mysql));

echo '<pre>Debug: mysql_get_server_info='; var_dump(mysql_get_server_info($mysql)); echo "</pre>\n";
echo '<pre>Debug: mysql_get_client_info='; var_dump(mysql_get_client_info()); echo "</pre>\n";

$sqlCount = "SELECT COUNT(*) AS c FROM ... WHERE ...";
echo '<pre>Debug: sqlCount='; var_dump($sqlCount); echo "</pre>\n";
$resultCount = mysql_query($sqlCount, $mysql);
echo '<pre>Debug: resultCount='; var_dump($resultCount); echo "</pre>\n";
echo '<pre>Debug: mysql_error='; var_dump(mysql_error($mysql)); echo "</pre>\n";
echo '<pre>Debug: mysql_errno='; var_dump(mysql_errno($mysql)); echo "</pre>\n";

そして出力を投稿しますか?

于 2011-08-17T13:24:28.923 に答える
0

SQL_CALC_FOUND_ROWS を使用した select 句が行を返し、追加のクエリが行数を返すため、奇妙です。使用する場合

$result = mysql_query('SELECT SQL_CALC_FOUND_ROWS * from table');
$total = mysql_query('SELECT FOUND_ROWS()');
process $result.

何の問題もないはずです。

于 2011-08-17T12:22:42.280 に答える