2

我正在尝试使用 PHP 从 MySQL 表中获取 1 条记录。我尝试了许多不同的 SELECT 语句,虽然它们都在 MYSQL 中工作,但它们拒绝在 php 中返回任何结果。

countryRanking 表是一个简单的两列表

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

mysql 返回国家列的排名(1、2、3 等),并返回除排名第一的国家以外的所有结果。例如,当 country=175 时,应该返回 1 但不返回结果。通过网络浏览器直接查询返回空白页面,没有错误信息。我的 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) 返回类似 Resource id #4 的内容。而 print_r($row) 返回 Array ( [0] => 4 [rank] => 4 )。但是在查询排名靠前的国家时。例如country=175,它返回一个空白页。

4

4 回答 4

1

假设您没有收到错误,这意味着您已成功连接到数据库。你只是没有取回任何价值。尝试:

$row = mysql_fetch_row($result);

我通常会认为 $row = mysql_fetch_assoc($result); 会起作用,但如果这些都不起作用,它必须是你的 mysql_query 中的东西。

于 2013-01-13T05:14:53.983 回答
1

您可以按如下方式进行调试。

  1. 通过在 PHPMyAdmin 上运行它并检查结果来确保您的 SQL 是正确的。
  2. 确保你没有任何致命错误,如果你得到一个空白页,那就有问题了。打开PHP错误并查看。
  3. print_r($result)看看它是否为空。
  4. 如果您只想排名第一,则将 LIMIT 1 添加到您的查询中
于 2013-01-13T05:26:55.660 回答
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

试试这个。它基于您之前的问题。 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 回答