奇怪的mysql_fetch_array错误

时间:2011-03-16 18:19:22

标签: php mysql

   if($_GET['confirm']){
        $coupon_id = $_GET['confirm'];
        $query = mysql_query("SELECT * FROM purchases WHERE coupon_id = '$coupon_id'");
            while($rows = mysql_fetch_array($query)){
                $user_id = $rows['user_id'];
                $query = mysql_query("INSERT INTO purchases_confirm VALUES(NULL,'$coupon_id','$user_id' ");
                if($query){
                    echo "inserting new values to database....done !";
                }
            }
        exit;
        }

并输出:警告:mysql_fetch_array():提供的参数不是一个有效的MySQL结果资源...奇怪的是,如果我从命令行或phpmyadmin执行查询,它的工作原理!!

4 个答案:

答案 0 :(得分:4)

使用$query mysql_fetch_array时,您无法在$query内重新分配 if($_GET['confirm']){ $coupon_id = $_GET['confirm']; $query = mysql_query("SELECT * FROM purchases WHERE coupon_id = '$coupon_id'"); while($rows = mysql_fetch_array($query)){ $user_id = $rows['user_id']; $query2 = mysql_query("INSERT INTO purchases_confirm VALUES(NULL,'$coupon_id','$user_id' "); if($query2){ echo "inserting new values to database....done !"; } } exit; } 变量。

应该是:

{{1}}

答案 1 :(得分:3)

这是因为你在while循环中,你正在覆盖$query变量。您需要将$query变量更改为其他内容。我通常使用$sub_query所以它看起来像这样:

if($_GET['confirm']){
$coupon_id = $_GET['confirm'];
$query = mysql_query("SELECT * FROM purchases WHERE coupon_id = '$coupon_id'");
while($rows = mysql_fetch_array($query)){
    $user_id = $rows['user_id'];
    $sub_query = mysql_query("INSERT INTO purchases_confirm VALUES(NULL,'$coupon_id','$user_id' ");
    if($sub_query){
        echo "inserting new values to database....done !";
    }
}
exit;
}

答案 2 :(得分:1)

您正在循环中更改$query$query = mysql_query("INSERT INTO purchases_confirm VALUES(NULL,'$coupon_id','$user_id' ");以及您正在尝试mysql_fetch_array($query)的下一次迭代。使用另一个变量进行插入:$another_quer = mysql_query("INSERT INTO purchases_confirm VALUES(NULL,'$coupon_id','$user_id' ");

答案 3 :(得分:0)

显然查询失败了。你没有任何形式的错误检查,所以你基本上没有机会抓住错误。尝试重写这样的代码:

$query = mysql_query("...") or die(mysql_error());

将吐出导致查询失败的确切mysql错误。请记住,即使SQL语句本身完全有效,查询可能会失败的原因还有很多。如果没有检查那些潜在的错误情况,你基本上已经把自己画成了一个角落。