2012-02-06 31 views
1
<?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结果资源我?PHP的警告:mysql_fetch_array():提供的参数不是一个有效的MySQL结果资源

+2

[漏洞利用](http://xkcd.com/327/) – knittl 2012-02-06 14:37:07

+0

你确定你的'mysql_connect'和'mysql_select_db'工作吗?尝试为这些添加一个''或者'''声明。 – Travesty3 2012-02-06 14:37:28

+0

看看这里的“相关”部分,我认为这个问题可能有一些重复。 – Znarkus 2012-02-06 14:37:30

回答

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()); 
+0

谢谢! (只是测试:)) – JohnDow 2012-02-06 14:52:55

0

你内查询重写$result,导致外环失败。

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

+0

不仅如此,他正在循环一个结果集,并根据返回的行的ID更新结果来自的结果 - 整个事情可以在一个'UPDATE'中加以总结。 – DaveRandom 2012-02-06 14:44:12

+0

@dave:不是。更新将写入选择来自的同一张表。不能在mysql中作为'update ...在...中(select from ...)'类型的查询中完成。当然有解决方法。 – 2012-02-06 14:45:12

+0

为什么他不能只是'UPDATE msg_inbox SET unread = 0 WHERE = ='user''? – DaveRandom 2012-02-06 14:46:35

相关问题