PHP警告:mysql_fetch_array():提供的参数不是有效的MySQL结果资源

时间:2012-02-06 14:35:00

标签: php html

    <?php
    session_start();
    $user = $_SESSION['login'];
    $mysql_connect = mysql_connect("localhost", "root", "");
    $mysql_select_db = mysql_select_db("site");
    $sql = "SELECT * FROM `msg_inbox` WHERE `to` = '$user'";
    $result = mysql_query($sql) or die(mysql_error());
    while ($row = mysql_fetch_array($result)) {    
            $mysql_connect = mysql_connect("localhost", "root", "");
            $mysql_select_db = mysql_select_db("site");
            $query = ("UPDATE msg_inbox  SET unread = 0 WHERE id= ".$row['id']);
            $result = mysql_query($query);
    }

我收到错误:警告:mysql_fetch_array():提供的参数不是第8行的有效MySQL结果资源 你能救我吗?

2 个答案:

答案 0 :(得分:5)

您已在循环中重新分配$result。在第一次迭代之后,变量$result将包含一个布尔值,表示UPDATE语句的成功或失败。

变化:

$result = mysql_query($query);

要:

$result2 = mysql_query($query);

或者只是:

mysql_query($query);

小心SQL注入漏洞。

实际上,您的整个代码可以而且应该缩短为:

<?php

  session_start();
  $user = $_SESSION['login'];
  // A blank password for root? Really?
  $mysql_connect = mysql_connect("localhost", "root", "");
  $mysql_select_db = mysql_select_db("site");
  $sql = "
    UPDATE `msg_inbox`
    SET `unread` = 0
    WHERE `to` = '".mysql_real_escape_string($user)."'
  ";
  // Don't show the result of mysql_error() in a production environment!
  $result = mysql_query($sql) or die(mysql_error());

答案 1 :(得分:0)

您的内部查询正在覆盖$result,导致外部循环失败。

同样,你在循环中打开一个新连接。这是非常低效和浪费的。假设您的主查询找到500行。这意味着你打开500连接到mysql。这完全没有意义。