mysql_fetch_array()期望参数1是资源,给定PHP的布尔值

时间:2012-08-30 13:12:54

标签: php mysql

大家好,我是新来的,我很难分析这段代码。 一个错误继续显示,我不知道该怎么做。

mysql_fetch_array()期望参数1为资源,布尔值为

每次我使用搜索时都会发生这种情况。任何想法?

    if(isset($_POST['search']))//if search
    {   
        if(($_POST['year']) && ($_POST['month']) && ($_POST['day']))
        $_SESSION['select']= mysql_query("SELECT * FROM ".$_SESSION['dbtable3']." WHERE eyear = '".$_POST['year']."' AND emonth = '".$_POST['month']."' AND edate = '".$_POST['day']."' ;" or die(mysql_error()));

        else if(($_POST['year']) && ($_POST['month']))
        $_SESSION['select']=mysql_query("SELECT * FROM ".$_SESSION['dbtable3']." WHERE eyear = '".$_POST['year']."' AND emonth = '".$_POST['month']."' ;" or die(mysql_error()));

        else if(isset($_POST['year']))
        $_SESSION['select']= mysql_query("SELECT * FROM ".$_SESSION['dbtable3']." WHERE eyear = '".$_POST['year']."' ;" or die(mysql_error()));

        else if(!$_POST['year'])
        die("FILL IN AT LEAST THE YEAR");

        else
        die("Date not found"); 


        if($_POST['year'])
            while($select2 = mysql_fetch_array($_SESSION['select']))
            {
                $n1 = $select2[0];
                $n2 = $select2[1];
                $n3 = $select2[2]."-".$select2[3]."-".$select2[4];

                echo
                "<tr>
                <td width=\"30px\"> $n1</td>
                <td width=\"30px\"> $n2</td>
                <td width=\"30px\"> $n3</td>
                </tr>";
            }

4 个答案:

答案 0 :(得分:0)

您的mysql_query()行中的每一行都是错误的。您应该在添加or die()之前关闭括号

这就是为什么你得到一个布尔值而不是死于错误。

答案 1 :(得分:0)

$_SESSION['select']= mysql_query("SELECT * FROM ".$_SESSION['dbtable3']." WHERE eyear = '".$_POST['year']."' AND emonth = '".$_POST['month']."' AND edate = '".$_POST['day']."' ;" or die(mysql_error()));

应该是

$_SESSION['select']= mysql_query("SELECT * FROM ".$_SESSION['dbtable3']." WHERE eyear = '".$_POST['year']."' AND emonth = '".$_POST['month']."' AND edate = '".$_POST['day']."' ;") or die(mysql_error());

也就是说,or die(mysql_error())应该 mysql_query之外。

那,或者你是SQL通过未经过消毒的POST参数注入自己。

答案 2 :(得分:0)

是的,错误说明了一切

你这样做

while($select2 = mysql_fetch_array($_SESSION['select']))

使用

$result = mysql_fetch_array($_SESSION['select']));

if($result) {
// go to while
} else {
  mysql_error();
}

答案 3 :(得分:0)

您的查询存在问题:

  

对于SELECT,SHOW,DESCRIBE,EXPLAIN和其他返回结果集的语句,mysql_query()会在成功时返回资源,或者在出错时返回FALSE。

Alto,您的代码存在问题:摆脱PDOmysql_*的{​​{1}}个功能,不推荐使用广告:

  

建议的替代方案

     

不鼓励使用此扩展程序。相反,应该使用MySQLi或PDO_MySQL扩展。另请参阅MySQL:选择API指南和相关的常见问题解答以获取更多信息。该功能的替代方案包括:

     
      
  • mysqli_query()
  •   
  • PDO ::查询()
  •