2012-02-28 41 views
0

我想返回時無法使用的一些數據不存在,但我認爲有些事情是錯誤的,我的代碼else和如果MySQL和PHP錯誤

$id=$_GET["id"]; 
$sql="SELECT * FROM book WHERE id = '".$id."' AND type = 'new'"; 
if(!empty($sql)) 
{ 
    $result = mysql_query($sql); 
    $row = mysql_fetch_assoc($result); 
    echo utf8_encode($row['bookreview']); 
} 
else 
{ 
    echo "<div style='text-align: center; background-color: rgb(255, 255,255);'><font style='color: rgb(204, 0, 0);' size='+3'><span style='font-weight: bold;'>review not not available.</span></font><br>"; 
} 

如果審覈,請其返回而如果回顧不可用「審查不可用」不會回顯。

+1

你正在使用帶有$ sql值的if語句,並且allways有數據,而是使用$ result。 – Juanma 2012-02-28 12:28:24

回答

0

您實際上是在檢查字符串是否爲空,而不是結果集,看到了嗎?

!empty("any string") 

將始終返回true。

2

$sql變量包含一個字符串,它在檢查它是否爲空之前分配。在這種情況下,它永遠不會是空的。

也許你想要做的是檢查查詢返回的結果數量?爲了發生這種情況,您必須先運行查詢。這裏是一個快速(把我的頭頂部)例如使用的mysqli:

$mysqli = new mysqli("localhost", "my_user", "my_password", "my_db"); 

$id = $_GET["id"]; 
$sql = "SELECT * FROM book WHERE id = '".$id."' AND type = 'new'"; 

// Run query 
if ($result = $mysqli->query($sql)) 
{ 
    // We got results 
    var_dump($result); 
    $result->close(); 
} 
else 
{ 
    // No results 
    echo("Oops. Nothing here."); 
} 

爲了避免SQL注入,我建議學習PDO,以及如何編寫準備語句。

2
$id = (int) $_GET['id']; // important ! 
$sql = 'SELECT * FROM book WHERE id = ' . $id. ' AND type = "new"'; 
$result = mysql_query($sql); 

if(mysql_num_rows($result) > 0) { 
    $row = mysql_fetch_assoc($result); 
    echo utf8_encode($row['bookreview']); 
} else { 
    echo "<div style='text-align: center; background-color: rgb(255, 255,255);'><font style='color: rgb(204, 0, 0);' size='+3'><span style='font-weight: bold;'>review not not available.</span></font><br>"; 
} 

重要的是,將GET參數轉換爲指定類型(此處爲int)以避免SQL注入!

使用mysql_num_rows您可以檢查查詢返回的行數。你必須做一個查詢來檢查它。檢查$sql變量是否爲空是無用的,因爲它只是一個始終爲「滿」的字符串 - 它包含了您的查詢語句。

+0

num rows比較比檢查結果更昂貴,但它應該工作。你也可以防範SQL注入,但請在你的答案中解釋它! – markus 2012-02-28 12:33:20

+0

嗨,我得到警告:mysql_num_rows()期望參數1是資源,布爾在 – meandme 2012-02-28 12:36:16

+0

@ markus-tharkun給出我已經解釋了它。 @meandme所以你在查詢中有一些錯誤,'mysql_query'返回'false'。 – hsz 2012-02-28 12:44:12

0

$sql永遠不會是空的..因爲是你剛設置的字符串。你可能想這樣做:

$id=$_GET["id"]; 
$sql="SELECT * FROM book WHERE id = '".intval($id)."' AND type = 'new'"; 
$result = mysql_query($sql); 
if(!empty($result) and mysql_num_rows($result) > 0) 
{ 
    $row = mysql_fetch_assoc($result); 
    echo utf8_encode($row['bookreview']); 
} 
else 
{ 
    echo "<div style='text-align: center; background-color: rgb(255, 255,255);'><font style='color: rgb(204, 0, 0);' size='+3'><span style='font-weight: bold;'>review not not available.</span></font><br>"; 
} 
+0

你是複製粘貼不好的做法。此代碼易受SQL注入攻擊。 – markus 2012-02-28 12:31:50

+0

我從問題中複製來編輯代碼..那有什麼問題?如果你建議我從另一個答案複製你錯了..因爲我們在10秒內回答差異..雖然你是正確的SQL注入..我會編輯..謝謝 – SERPRO 2012-02-28 12:40:57

+0

是的,這就是我的意思......其餘的複製當然沒問題。 – markus 2012-02-28 12:42:14