Php 使用MySQL的随机行选择返回NULL
我试图从MySQL表中随机获取一行,但这三种尝试都是:Php 使用MySQL的随机行选择返回NULL,php,mysql,random,row,sql-limit,Php,Mysql,Random,Row,Sql Limit,我试图从MySQL表中随机获取一行,但这三种尝试都是: $query = "SELECT cid FROM table LIMIT 1 OFFSET ".rand(1,$num_rows); $query = "SELECT cid FROM table OFFSET RANDOM() * (SELECT COUNT(*) FROM table) LIMIT 1"; $query = "SELECT * FROM table ORDER BY RAND() LIMIT 1"; 在mysql\u
$query = "SELECT cid FROM table LIMIT 1 OFFSET ".rand(1,$num_rows);
$query = "SELECT cid FROM table OFFSET RANDOM() * (SELECT COUNT(*) FROM table) LIMIT 1";
$query = "SELECT * FROM table ORDER BY RAND() LIMIT 1";
在mysql\u query$query中给出一个空结果
在我的PHP代码上面,我通过指定WHERE从同一个表中获得一行,所以我不明白为什么我不能检索一个随机的行
以下是代码片段:
$query = "SELECT uid,clu FROM uable WHERE un = '$un'";
$result = mysql_query($query) or die(sqlerror(__LINE__,mysql_errno(),mysql_error()));
$resultid = mysql_fetch_assoc($result);
$uid = $resultid['uid'];
file_put_contents('debugging.txt',__LINE__.' - $uid = '.var_export($uid,true).PHP_EOL,FILE_APPEND);
$query = "SELECT * FROM table WHERE uid = $uid AND cn = '$cn'";
$result = mysql_query($query) or die(sqlerror(__LINE__,mysql_errno(),mysql_error()));
$cr = mysql_fetch_assoc($result);
$cid= $cr['cid'];
file_put_contents('debugging.txt',__LINE__.' - $cid= '.var_export($cid,true).PHP_EOL,FILE_APPEND);
$query = "SELECT * FROM fable WHERE cid= '$cid'";
$result = mysql_query($query) or die(sqlerror(__LINE__,mysql_errno(),mysql_error()));
file_put_contents('debugging.txt',__LINE__.' - $result = '.var_export($result,true).PHP_EOL,FILE_APPEND);
$fr = mysql_fetch_assoc($result);
file_put_contents('debugging.txt',__LINE__.' - $fr = '.var_export($fr,true).PHP_EOL,FILE_APPEND);
echo '<form action="'.$_SERVER['PHP_SELF'].’" method="post">';
if (!$fr) {
$o= $cn;
while ($o= $cn) {
// $ac = mysql_query("SELECT * FROM table") or die(sqlerror(__LINE__,mysql_errno(),mysql_error()));
// $num_rows = mysql_num_rows($ac);
//file_put_contents('debugging.txt',__LINE__.' - $num_rows = '.$num_rows.PHP_EOL,FILE_APPEND);
// --$num_rows;
// $query = "SELECT cid FROM table LIMIT 1 OFFSET ".rand(1,$num_rows);
$query = "SELECT cid FROM table OFFSET RANDOM() * (SELECT COUNT(*) FROM table) LIMIT 1";
// $query = "SELECT * FROM table ORDER BY RAND() LIMIT 1";
$resultid = mysql_query($query) or die(sqlerror(__LINE__,mysql_errno(),mysql_error()));
$opr = mysql_fetch_assoc($resultid);
$o= $opr['cn'];
}
file_put_contents('debugging.txt',__LINE__.' - $query = '.$query.PHP_EOL,FILE_APPEND);
file_put_contents('debugging.txt',__LINE__.' - $resultid = '.var_export($resultid,true).PHP_EOL,FILE_APPEND);
file_put_contents('debugging.txt',__LINE__.' - $op[\'cid\'] = '.$op['cid'].PHP_EOL,FILE_APPEND);
$query = "SELECT * FROM table WHERE cid= ".$op;
$result = mysql_query($query) or die(sqlerror(__LINE__,mysql_errno(),mysql_error()));
$opr = mysql_fetch_assoc($opr);
$o= $opr['cn'];
$od= $opr['description'];
echo '<p>'.$op;
if ($od<> '') {
echo ','.$odesc;
}
echo '</p>';
echo '<input type="submit" name="continue" id="continue" value="Continue">';
} else {
echo '<p>'.$fr['p'].'</p>';
echo '<input type="submit" name="continue" id="continue" value="Continue">';
}
echo '</form>';
生成的debug.txt文件:
24-$uid='4'
29-$cid='21'
32-$result=NULL
34-$fr=false这些查询看起来不错,但我认为您从错误的地方开始。当您不确定如何在SQL中构建某些内容时,请打开一个SQL客户机,如SequelPro或Navicat,并尝试手动编写一些查询,直到得到所需的结果。此外,这还使您有机会仔细检查相关表的内容,并确保存在预期的数据。然后,您可以满怀信心地回到PHP,确信SQL代码是正确的,因此,如果PHP出现问题,则必须是您注入到Mysql语句中的变量或您调用该语句的方式。至少最后一个是完全正确的。你的错误在别的地方。介意将您的PHP代码添加到问题中吗?NULL表示没有记录,或者NULL表示所有字段都有NULL值?@Hanky웃Panky-我已经编辑了这个问题以包含PHP代码。@uuerdo-SQL返回null,所以我假设没有返回任何记录。目前表中有两条记录需要测试,但这显然会增加。@JasonStallard如果没有返回行,您的mysql\u fetch\u assoc调用应该返回FALSE,而不是NULL;你能确认这符合你看到的吗?谢谢你。第二次和第三次尝试没有注入,但所有三次都返回NULL结果。我将修改我的问题以包括周围的PHP;人脑不是用来解析代码的我再次建议您通过Sequel Pro这样的图形程序设置对数据库的直接访问,并运行原始Mysql查询,以验证它是否提供了预期的结果。你做到了吗?当直接运行相同的代码时,2/3给出了预期的结果,所以它一定是我的PHP代码。我删除了一些多余的行并检查了变量名,现在一切正常。我一直认为这是SQL。谢谢你的帮助@Topher-Hunt.Awesome,很高兴听到这个消息!是的,我发现当我从头开始进行故障排除时,可以节省大量时间:正确使用Mysql,然后再查看PHP。