2012-08-30 119 views
-2

你好,我是新來的,我在分析這段代碼時很難。 錯誤不斷顯示,我不知道該怎麼辦。mysql_fetch_array()期望參數1是資源,布爾給定PHP

mysql_fetch_array()預計參數1是資源,鑑於布爾

發生這種情況,每次我使用搜索功能。有任何想法嗎?

if(isset($_POST['search']))//if search 
    { 
     if(($_POST['year']) && ($_POST['month']) && ($_POST['day'])) 
     $_SESSION['select']= mysql_query("SELECT * FROM ".$_SESSION['dbtable3']." WHERE eyear = '".$_POST['year']."' AND emonth = '".$_POST['month']."' AND edate = '".$_POST['day']."' ;" or die(mysql_error())); 

     else if(($_POST['year']) && ($_POST['month'])) 
     $_SESSION['select']=mysql_query("SELECT * FROM ".$_SESSION['dbtable3']." WHERE eyear = '".$_POST['year']."' AND emonth = '".$_POST['month']."' ;" or die(mysql_error())); 

     else if(isset($_POST['year'])) 
     $_SESSION['select']= mysql_query("SELECT * FROM ".$_SESSION['dbtable3']." WHERE eyear = '".$_POST['year']."' ;" or die(mysql_error())); 

     else if(!$_POST['year']) 
     die("FILL IN AT LEAST THE YEAR"); 

     else 
     die("Date not found"); 


     if($_POST['year']) 
      while($select2 = mysql_fetch_array($_SESSION['select'])) 
      { 
       $n1 = $select2[0]; 
       $n2 = $select2[1]; 
       $n3 = $select2[2]."-".$select2[3]."-".$select2[4]; 

       echo 
       "<tr> 
       <td width=\"30px\"> $n1</td> 
       <td width=\"30px\"> $n2</td> 
       <td width=\"30px\"> $n3</td> 
       </tr>"; 
      } 
+3

**你的代碼很容易受到SQL注入**你真的* *應該使用。 [已準備好的語句](http://stackoverflow.com/a/60496/623041),將您的變量作爲參數傳遞到其中,而這些參數不針對SQL進行評估。如果你不知道我在說什麼,或者如何解決它,請閱讀[Bobby Tables]的故事(http://stackoverflow.com/questions/332365/xkcd-sql-injection-please-explain) 。 – eggyal

+2

[So many duplicates](http://stackoverflow.com/search?q=mysql_fetch_array%28%29+expects+parameter+1+to+be+resource%2C+boolean+given) –

+1

此外,正如[介紹](http://www.php.net/manual/en/intro.mysql.php)到'mysql_ *'函數的PHP手冊一章:*不推薦使用這種擴展來編寫新的代碼。相反,無論是[mysqli](http://www.php.net/manual/en/book.mysqli.php)還是[PDO_MySQL](http://www.php.net/manual/en/ref.pdo應該使用-mysql.php)擴展名。請參閱[MySQL API概述](http://www.php.net/manual/en/mysqlinfo.api.choosing.php)以獲得進一步的幫助,以便選擇MySQL API。* – eggyal

回答

0

您的每個mysql_query()行都是錯誤的。您應該在加or die()之前關閉括號

這就是爲什麼你會得到一個布爾值而不是因爲錯誤而死亡。

0
$_SESSION['select']= mysql_query("SELECT * FROM ".$_SESSION['dbtable3']." WHERE eyear = '".$_POST['year']."' AND emonth = '".$_POST['month']."' AND edate = '".$_POST['day']."' ;" or die(mysql_error())); 

應該

$_SESSION['select']= mysql_query("SELECT * FROM ".$_SESSION['dbtable3']." WHERE eyear = '".$_POST['year']."' AND emonth = '".$_POST['month']."' AND edate = '".$_POST['day']."' ;") or die(mysql_error()); 

也就是說,or die(mysql_error())mysql_query

那麼,或者你是SQL通過未經過清理的POST參數注入自己。

0

是,錯誤認爲一切

你做

while($select2 = mysql_fetch_array($_SESSION['select'])) 

使用

$result = mysql_fetch_array($_SESSION['select'])); 

if($result) { 
// go to while 
} else { 
    mysql_error(); 
} 
0

有一個在您的查詢的問題:

對於SELECT,SHOW ,DESCRIBE,EXPLAIN和其他聲明返回結果et,mysql_query()在成功時返回一個資源,或者在錯誤時返回FALSE。

奧拓,還有在你的代碼中的問題:擺脫mysql_*功能PDOmsqli_*,廣告,他們已被棄用:

建議的替代

不鼓勵使用該擴展。相反,應該使用MySQLi或PDO_MySQL擴展。另請參閱MySQL:選擇API指南和相關FAQ以獲取更多信息。替代該功能包括:

  • mysqli_query()
  • PDO ::查詢()
相關問題