2013-02-15 53 views
0

我想檢查名稱是否存在。查詢應返回0,因爲該字段爲空,但返回1。幫幫我。PHP的MySQL COUNT不返回而不是0

function profile_exists($user) { //checks that profile exists 
    $profile_ex = mysql_query(
     "SELECT COUNT(profile_name) FROM user_info WHERE id = '{$user}'"); 

    if(!confirm_query($profile_ex)) { 
     return false; 
    } else { 
     if (mysql_result($profile_ex, 0) == 1) { 
      echo mysql_result($profile_ex, 0); 
      exit; 
      return true; 
     } else { 
      return false; 
     } 
    } 
} 
+1

[**在新代碼請不要使用'mysql_ *'功能**](http://bit.ly/phpmsql)。他們不再被維護[並且被正式棄用](http://j.mp/XqV7Lp)。看到[**紅框**](http://j.mp/Te9zIL)?學習[*準備的語句*](http://j.mp/T9hLWi),並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli) - [這篇文章](http://j.mp/QEx8IB)將幫助你決定哪個。 – Kermit 2013-02-15 21:45:14

回答

0

您應該使用mysqli_PDO預處理語句防止對SQL注入。

它總是會返回1,因爲您正在使用聚合函數(COUNT)。從表而不是選擇一列:

SELECT profile_name FROM ... 

但是,如果你只在檢查配置文件是否存在興趣,使用mysqli_num_rows。如果您想檢查配置文件是否存在並返回數據,請使用mysqli_fetch_assoc

1

你的語法看起來升技複雜,試試這個:

$profile_ex = mysql_query("SELECT * FROM user_info WHERE id = '$user'"); 
$profile_ex = mysql_num_rows($profile_ex); 

if ($profile_ex > 0) { 
echo "exists"; } else { 
echo "doesn't exist"; 
} 

希望這有助於

2

你有一個排,而不是0行,因爲COUNT(*)返回一行數據,其值爲計數在這種情況下爲0。

您將需要運行查詢,然後檢查count的值。

實施例:

$result = mysql_query("SELECT COUNT(*) AS count FROM ..."); 
$row = mysql_fetch_assoc($result); 

if($row['count'] == 0){ 
    return False; 
}else{ 
    return True; 
} 
+0

如果'count'> 1,該怎麼辦? – Kermit 2013-02-15 22:31:33

+0

「如果'count'> 1」會怎麼樣;然後發生了真正非常糟糕的事情,應該返回False。查看問題WHERE id ='{$ user}''中的查詢 - 這使得id是一個自動遞增的主鍵,它應該始終是唯一的。 – 2013-02-15 22:43:01

+0

這是一個很大的假設('id'是一個帶'AUTO_INCREMENT'的PK)。基本上你是說用戶不存在,如果他們有超過1個配置文件。 – Kermit 2013-02-15 22:43:53