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 【问题描述】:我正在尝试使用 php 从 mysql 表中获取 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 中返回结果的主要内容,如果未能解决你的问题,请参考以下文章
如何在 debian:buster 中使用脚本安装 mysql-server 而不会询问任何配置问题?