Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用MySQL的随机行选择返回NULL_Php_Mysql_Random_Row_Sql Limit - Fatal编程技术网

Php 使用MySQL的随机行选择返回NULL

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

我试图从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$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。