2014-04-19 104 views
-1

我有一個表單,它使用html表單從用戶處獲取值(id),並在名爲「account」的數據庫中查找以顯示所有值。如果用戶輸入的值在數據庫中不存在,則應顯示警報。即使設置爲空時,php mysql查詢也會返回true

//user_form.html 

    <html> 
    <form method="get" action="user_action.php"> 
    <input type="text" name="val"/> 
    <input type="submit" value="Enter"/> 
    </form> 
    </html> 

//user_action.php 
<?php 
    $name=$_GET["val"]; 
    $con = mysql_connect("localhost","my_username","my_password") or die('Could not connect: ' . mysql_error()); 
    mysql_select_db("account",$con); 
    if(($result=mysql_query("select * from my_table where id=$name"))) 
     //display the database table 
    else 
     echo '<script type="text/javascript">alert("Id not found in database!");</script>'; 
    mysql_close($con); 
?> 

我的問題是,當我輸入ID不存在於數據庫中的值,它不會進入else塊,並顯示警報。 那麼,爲什麼查詢對所有值都返回true?

回答

1

mysql_query()將返回true,如果查詢成功,即使沒有返回結果。您想使用mysql_num_rows來檢查是否有任何行被返回。

此外,你應該真的開始使用PDO或mysqli進行數據庫查詢。與mysql_函數不同,它不會被棄用。

http://us2.php.net/manual/en/ref.pdo-mysql.php

<?php 
    $name=$_GET["val"]; 
    $con = mysql_connect("localhost","my_username","my_password") or die('Could not connect: ' . mysql_error()); 
    mysql_select_db("account",$con); 
    if(($result=mysql_query("select * from my_table where id=$name"))) { 
     if(mysql_num_rows($result)) { 
     // Rows Returned 
     }else{ 
      echo '<script type="text/javascript">alert("Id not found in database!");</script>'; 
     } 
    } else { 
     // Mysql Error (Error with Query) 
    } 
    mysql_close($con); 
?> 
-1
if(($result=mysql_query("select * from my_table where id=$name"))) 

應該

if(($result==mysql_query("select * from my_table where id=$name"))) 
+0

由於雙括號,他所做的方式是正確的,以檢查mysql_query是否爲false。因爲他正在設置結果變量,所以不需要雙等號。 – David

+1

即使沒有雙重修辭,它也是有效的。單等於變量將'mysql_query'的返回值賦值給$ result,並將其返回 - 因此,您將結果分配給$ result,並同時測試$ result是否爲「true」。 ==比較從'mysql_query'到'$ result'的值的返回值 - 由於我懷疑$ result被定義,所以它可能是所需要的對象。 – Adam

0

對於SELECT,SHOW,描述,解釋等語句返回的結果集 ,請求mysql_query()成功返回的資源,或 錯誤FALSE。 SQL語句,INSERT,UPDATE,DELETE,DROP等,mysql_query() 在成功時返回TRUE或在錯誤時返回FALSE。

要檢查是否有返回行,你需要在你正在使用過時mysql_函數使用

mysql_num_rows() 

更多。

你應該開始mysqli_ or PDO準備好的聲明。

相關問題