-2

大家好,我是新来的,我很难分析这段代码。错误不断出现,我不知道该怎么办。

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

4 回答 4

0

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

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

于 2012-08-30T13:14:37.290 回答
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

那,或者您正在通过未清理的POST参数注入自己的 SQL。

于 2012-08-30T13:14:45.773 回答
0

是的,错误说明了一切

你用

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

利用

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

if($result) {
// go to while
} else {
  mysql_error();
}
于 2012-08-30T13:15:19.690 回答
0

您的查询有问题:

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

Alto,您的代码中存在问题:去掉PDO或的mysql_*函数,它们已被弃用:msqli_*

建议的替代品

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

  • mysqli_query()
  • PDO::查询()
于 2012-08-30T13:16:05.963 回答