2012-02-06 130 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

相關問題