2012-09-09 78 views
0

我正在嘗試使用下面的if/else語句來構建查詢,但我在第一步中對NULL求值時出現問題。無效的MySQL資源

經過一些在線搜索後,我似乎無法追查我做錯了什麼......應該使用空引號代替:""
雖然這也給了我一個錯誤。

所以我不知道問題是在第一個塊還是第二個,即while循環。

有什麼建議嗎?

$name = $_POST['Your_name']; 

if ($location != "All" && $name == NULL) $query="SELECT * FROM talent WHERE duty_station='$location')"; 
else if($location == "All" && $name != "All") $query="SELECT * FROM talent WHERE Your_name IN ('$name')"; 
else if($dutyReq != "All" && $name == "All") $query="SELECT * FROM talent WHERE duty_station='$location'"; 
else if($location == "All" || $name == "All") $query="SELECT * FROM talent"; 

然後我的循環,打印出的數據給了我這個錯誤:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /var/www/html/talent/searchresults.php on line 64

這是錯誤來自代碼:

$result=mysql_query($query); 
    mysql_query($result); 

    echo "<table border='1'> 
    <tr> 
    <th>Your name</th> 
    <th>duty station</th> 
    <th>first proficiency</th> 
    </tr>"; 
    while($row = mysql_fetch_array($result)){ 
     echo "<tr>"; 
     echo "<td>" . $row['Your_name'] . "</td>"; 
     echo "<td>" . $row['duty_station'] . "</td>"; 
     echo "<td>" . $row['prof_order_processing'] . "</td>"; 
     echo "</tr>"; 
     } 
echo "</table>"; 
+1

看起來你在這裏的SQL語句有錯誤「SELECT * FROM talent WHERE duty_station ='$ location'----->)」 –

+3

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

+0

在PHP中,'null'是小寫字母。 –

回答

1

您的第一個SQL查詢錯誤(一個額外的右括號):

$query="SELECT * FROM talent WHERE duty_station='$location')"; 

它應該是:

$query="SELECT * FROM talent WHERE duty_station='$location'"; 

隨着這些代碼行:

$result=mysql_query($query); 
mysql_query($result); 

你想達到什麼目的?您正試圖使用​​MySQL資源作爲查詢字符串。
刪除第二行。


如果沒有設置$_POST['name'],你會看到

Notice: Undefined index: name in <filename> on line X

爲了解決這個問題,使用此代碼:

$name = empty($_POST['name']) ? null : $_POST['name']; 

要記住,對SQL注入安全代碼。

mysql_*功能不鼓勵使用,您應該使用PDO來代替。
您可以使用PDO::prepare使您的代碼更安全。

+0

它看起來像這兩個仍然存在:mysql_query($ result); $ result = mysql_query($ query); – richfranzen

+0

@ user1658726你不需要'mysql_query($ result);',它會拋出一個錯誤。刪除該行。 –

0

在PHP中,你應該寫的東西像這樣

$name = $_POST['Your_name']; 
if(isset($name) && !empty($name)) 
{ 
    //some code 
} 

Als啊,你可以添加更多的檢查,像is_array(如果你希望普通字符串),等..

+3

爲什麼你將isset()與empty()結合使用?你只能使用empty(),因爲如果變量沒有設置,它不會產生警告...... –

+0

@glavić:真的嗎?很高興知道。我從來沒有用過它,因爲我認爲它會...... thx。 – Kuro

+2

我會對$ _POST ['Your_name']'進行檢查。另外,嚴格地說,你應該使用'=== null'或'is_null()'作爲'0 == null',''''' –

1

我認爲這個問題是這一行:

mysql_query($result); 

它不應該存在。你不能調用mysql_query函數,並給它一個不是sql腳本的變量。 刪除這一行。

+0

我試過評論這一點,但同樣的錯誤依然存在。 – richfranzen