2

PHP を使用して MySQL テーブルから 1 つのレコードを取得しようとしています。私は多くの異なる SELECT ステートメントを試しましたが、それらはすべて MYSQL で機能しますが、php で結果を返すことを拒否します。

countriesRanking テーブルは単純な 2 列のテーブルです

country    clicks
------     ------
0        222
66       34 
175      1000
45       650

mysql は国列のランキング (1、2、3 など) を返し、最初にランク付けされた国を除くすべての結果を返しました。たとえば、country=175 の場合、1 を返す必要がありますが、結果は返されません。Web ブラウザーを介して直接クエリを実行すると、空白のページが返され、エラー メッセージは表示されません。私のPHPコード

$result = mysql_query("SELECT FIND_IN_SET(clicks,
(SELECT GROUP_CONCAT(DISTINCT clicks  ORDER BY clicks DESC) 
FROM countriesRanking)) rank FROM countriesRanking
WHERE country = '$country'") or die(mysql_error());

$row =  mysql_fetch_assoc($result) or die(mysql_error());
$theranking = $row['rank'];
echo $theranking;

編集

次のことを試しましたが、同じ空白のページが表示されます

var_dump($row['rank']);

編集2

クエリが成功した場合、print_r($result) はリソース ID #4 のような値を返しました。print_r($row) は Array ( [0] => 4 [rank] => 4 ) を返しました。しかし、上位の国を照会する場合。たとえば、country=175 の場合、空白のページが返されました。

4

4 に答える 4

1

これは次のようにデバッグできます。

  1. PHPMyAdminでSQLを実行してSQLが正しいことを確認し、結果を確認します。
  2. 致命的なエラーがないことを確認してください。空白のページが表示された場合は、何か問題があります。PHPエラーをオンにして、を参照してください。
  3. print_r($result)空かどうかを確認します。
  4. 最初のランキングのみが必要な場合は、クエリにLIMIT1を追加してください
于 2013-01-13T05:26:55.660 に答える
1

データベースから1つのレコードのみが必要な場合は、クエリで制限を使用する必要があります

$result = mysql_query("SELECT FIND_IN_SET(clicks,
(SELECT GROUP_CONCAT(DISTINCT clicks  ORDER BY clicks DESC) 
FROM countriesRanking)) rank FROM countriesRanking
WHERE country = '$country' LIMIT 1") or die(mysql_error());

その後、whileループを使用します

while($row =  mysql_fetch_assoc($result)) {
    $theranking = $row['rank'];
}
echo $theranking;
于 2013-01-13T05:27:36.597 に答える
1

エラーが発生していないと仮定すると、データベースに正常に接続されていることを意味します。値を取得していないだけです。試す:

$row = mysql_fetch_row($result);

私は通常、 $row = mysql_fetch_assoc($result); と考えます。動作しますが、これらのどちらも動作しない場合は、mysql_query 内の何かでなければなりません。

于 2013-01-13T05:14:53.983 に答える
1

これを試してみてください。それはあなたの以前の質問に基づいています。MYSQL は、PHP
MYSQLI バージョンで空の結果を返します。

<?PHP
function rank(){
/* connect to database */
$hostname = 'server';
$user = 'username';
$password = 'password';
$database = 'database';

    $link = mysqli_connect($hostname,$user,$password,$database);

    /* check connection */

    if (!$link){ 
        echo ('Unable to connect to the database');
    }

    else{
    $query = "SELECT COUNT(*) rank FROM countryTable a JOIN countryTable b ON a.clicks <= b.clicks WHERE a.country = 175";
    $result = mysqli_query($link,$query);
    $arr_result =  mysqli_fetch_array($result,MYSQLI_BOTH); 
        return $arr_result['rank'];
    }
    mysqli_close($link);
}

echo rank();

?>

MYSQL バージョン:

<?PHP
function rank(){
  /* connect to database */
  $hostname = 'server';
  $user = 'username';
  $password = 'password';
  $database = 'database';

  $link = mysql_connect($hostname,$user,$password);

  /* check connection */

  if (!$link){ 
    echo ('Unable to connect to the database');
  }

  else{
  $query = "SELECT COUNT(*) rank FROM countryTable a JOIN countryTable b ON a.clicks <= b.clicks WHERE a.country = 66";
  mysql_select_db($database);
  $result = mysql_query($query);
  $arr_result = mysql_fetch_array($result,MYSQL_BOTH); 
  return $arr_result['rank'];
  }
  mysql_close($link);
}

echo rank();

?>
于 2013-01-13T12:17:20.817 に答える