<?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结果资源 你能救我吗?
答案 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。这完全没有意义。