MYSQL 仅在询问第一个排名时不会在 PHP 中返回结果

Posted

技术标签:

【中文标题】MYSQL 仅在询问第一个排名时不会在 PHP 中返回结果【英文标题】:MYSQL does not return result in PHP when asked for the first ranking only 【发布时间】:2013-01-13 05:09:16 【问题描述】:

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

国家排名表是一个简单的两列表

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,它返回一个空白页。

【问题讨论】:

这个确切的问题已关闭,为什么要重新打开它。 ***.com/questions/14295509/… 和 ***.com/questions/14294542/… 【参考方案1】:

试试这个。它基于您之前的问题。 MYSQL returns empty result in 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();

?>

【讨论】:

我得到了排名第一的国家的“数组” 如果您将“return $arr_result”更改为“return $arr_result['rank']”,它应该会给您正确的结果。 终于!是的,它给出了正确的结果。但这让我想知道为什么它不适用于mysql。我不是 php 程序员,所以将我的脚本转换为 mysqli 需要我从头开始。 嗨,它确实适用于 mysql。但是,只要您升级到 5.5 版。从 PHP mysql 将无法正常工作。我会把它重新编码成mysql。【参考方案2】:

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

$row = mysql_fetch_row($result);

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

【讨论】:

我刚试过 $row = mysql_fetch_row($result);但它也没有奏效。它也为其他查询返回空白页。我尝试了许多其他的 SELECT 语句,但它们都拒绝返回第一名。 @PutraKg:好的,那么你确定你的 SELECT 查询是正确的吗?首先尝试一个更简单的示例,看看您是否可以通过这种方式获得一个值......这意味着查询是问题而不是其他代码。 $result = mysql_query("SELECT rank FROM countriesRanking WHERE country = '$country'") or die(mysql_error()); 是的,SELECT 查询在 phpmyadmin 中进行了测试,它返回了正确的值。至于您的建议,“排名”不是列之一。排名必须通过查询“计算”。 @PutraKg:好吧,如果您尝试转储 $result 和 $row 变量以查看它们的设置是什么?我会尝试输出这些以查看它们的外观并找到任何潜在的阻碍。 对于成功的查询 print_r($result) 返回类似 Resource id #4 的内容。而 print_r($row) 返回 Array ( [0] => 4 [rank] => 4 )。但是在查询排名靠前的国家时。例如country=175,它返回一个空白页【参考方案3】:

您可以如下调试。

    通过在 PHPMyAdmin 上运行 SQL 并检查结果来确保您的 SQL 是正确的。 确保没有任何致命错误,如果出现空白页,则说明有问题。打开PHP报错看看。 print_r($result) 看看是否为空。 如果您只想要第一个排名,则将 LIMIT 1 添加到您的查询中

【讨论】:

1.是的,该 SQL 在 PHPMYAdmin 上进行了测试,并产生了正确的结果。 2. 添加了 ini_set('display_errors',1);错误报告(E_ALL);但是当我得到空白页时没有消息。 3. print_r($result) 返回了一个空白页 4. 完成了【参考方案4】:

如果您只需要数据库中的一条记录,则必须在查询中使用限制

$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;

【讨论】:

谢谢。刚试过,但它仍然返回排名第一的空白页 @PutraKg 你在 phpmyadmin 中试过同样的查询吗?可能不会返回任何结果。 是的,我总是先在 phpmyadmin 中尝试查询以确保。它在那里返回了正确的结果,但在 php 变量中分配结果时没有返回值。 @PutraKg 好的。如果它在 phpmyadmin 中返回结果,请尝试此代码 print_r($row) 并在您的问题中显示其结果。 OK print_r($row) return Array ( [0] => 2 [rank] => 2 ) 用于其他查询,但在询问第一个排名时返回空白页。

以上是关于MYSQL 仅在询问第一个排名时不会在 PHP 中返回结果的主要内容,如果未能解决你的问题,请参考以下文章

PHP Mysql仅在提交后插入

PHP+MYSQL查询结果上加一个排名序号且分页不间断

如何在 debian:buster 中使用脚本安装 mysql-server 而不会询问任何配置问题?

如何使用 PHP 和 MySQL 显示学生在百名学生中的排名?

从 PHP MySql 填充 Android 微调器

MySQL 仅在表不存在时插入数据