2012-07-06 76 views
1

我有這個代碼來檢查用戶是否存在於數據庫中。如果退出,我想將$account指定爲1,如果不存在0。我認爲這個代碼會工作,但它不斷設置$account0所以我想我錯過了一個竅門。任何幫助,將不勝感激。PHP如果數據庫設置變量存在/ else用戶存在0或1

$con = mysql_connect(DB_HOST, DB_USER, DB_PASS) or die("Couldn't make connection."); 

if (!$con) 
{ 
die('Could not connect: ' . mysql_error()); 
} 

mysql_select_db(DB_NAME, $con); 

$sql="SELECT user_name FROM users"; 

$result = mysql_query($sql) or die(mysql_error()); 
$row = mysql_fetch_assoc($result); 
if ($row['user_name'] == '$user_name'){ 
$account = 1; 
}else{ 
     $account = 0;} 

感謝

+0

當你比較字符串,最好的做法是使用[STRCOMP](http://php.net/manual/en/如果(strcomp($ row ['user_name'],$ user_name)== 0)' – alfasin 2012-07-06 22:37:20

+0

@alfasin:'==='在這種情況下也是足夠的並且更具可讀性[相關](http://stackoverflow.com/questions/3333353/php-string-comparison-vs-strcmp))。 – jmdeldin 2012-07-06 22:43:08

+0

@jmdeldin你絕對正確! – alfasin 2012-07-06 22:44:36

回答

3

你不能把變量中的字符串,如果你使用單引號'(再加上它是沒有必要的!)。下面解決這個問題,並將你的if/else語句縮短爲一行。

$account = $row['user_name']==$user_name ? 1 : 0; 
+0

您可以將變量放入一個字符串中,但是爲了變量被插入,換行引用必須是雙重的。 – trickyzter 2012-07-06 22:37:10

+0

是的,這就是爲什麼我說「..如果你使用單引號「 - 但在這種情況下引號是毫無意義的 – SmokeyPHP 2012-07-06 22:38:43

+1

你也可以將結果強制轉換爲int:'(int)($ row ['user_name'] == $ user_name);'但是,如果你不要使用PHP的=='或'if($ account)'等同的思想,那麼不需要顯式地將一個布爾值轉換爲一個int(例如'true =='1'')。 – jmdeldin 2012-07-07 02:39:37

1

您正在查詢返回多行,並且您正在與第一行進行比較。你需要做的是這樣的follwing指定單個用戶(請參閱SQL語句更改):

$sql="SELECT user_name FROM users WHERE user_name='".$user_name."' "; 

$result = mysql_query($sql) or die(mysql_error()); 
$row = mysql_fetch_assoc($result); 
if ($row['user_name'] == '$user_name'){ 
$account = 1; 
}else{ 
     $account = 0;} 

也,遍歷行,你可以從http://php.net/manual/en/function.mysql-fetch-assoc.php看到這個例子:

while ($row = mysql_fetch_assoc($result)) { 
    echo $row["userid"]; 
    echo $row["fullname"]; 
    echo $row["userstatus"]; 
} 
2

我認爲這可能是做一個更好的方法:

$con = mysql_connect(DB_HOST, DB_USER, DB_PASS) or die("Couldn't make connection."); 

if (!$con) 
{ 
die('Could not connect: ' . mysql_error()); 
} 

mysql_select_db(DB_NAME, $con); 

$account = (int)mysql_query("SELECT COUNT(*) FROM Users WHERE user_name='$user_name'"); 

這應該存儲在帳戶的正確值,即1,如果用戶被發現,否則爲0。

1

變化:

if ($row['user_name'] == '$user_name'){ 

到:

if ($row['user_name'] == $user_name){ 

單引號表示字符串。因此,通過將變量放在單引號之間,您試圖匹配$row['user_name']$user_name(不是$ user_name變量中的字符串,而是STRING「$ user_name」)。

雙引號也表示一個字符串,但您可以將您的變量放在雙引號之間,$row['user_name']將與$user_name(變量內的字符串)匹配。

所以,下面的兩個例子是正確的,而你的是不是:

if ($row['user_name'] == $user_name){ 
if ($row['user_name'] == "$user_name"){ 
相關問題