2013-08-26 172 views
0

所以現在我正在爲我的C#應用​​程序開發一個基本的會話系統。我有一個帶有id,用戶名,密碼和帶有id,code,start的會話表的表格。MySQL插入/更新問題

這兩個表的id列是相對於登錄的用戶(用戶表的id與會話表相同)。我想要做的是當它設置會話時,它首先檢查會話是否已經激活,如果是則更新當前會話,如果沒有會話會插入新會話。這工作正常。我的問題是,無論我登錄哪個用戶,ID始終設置爲0,因此我一次最多可以有一個活動會話。

這是我目前在做什麼:

//get id of inputted user. 
$id = getUserId($username); 

//first check if a session already exists that is connected to this username 
$query = mysql_query("SELECT * FROM sessions WHERE(`id`='$id')") or die("Couldn't query database: <br> <br> " . mysql_error());; 

if(mysql_num_rows($query) > 0) { 
    //session already exists, update it. 
    mysql_query("UPDATE sessions SET `code`='$code', `start`='$date' WHERE(`id`='$id')") or die("Failed to update session: <br> <br> " . mysql_error()); 
} else { 
    //session doesn't exist so lets create one 
    mysql_query("INSERT INTO sessions (`id`,`code`,`start`) VALUES('$id','$code', '$date')") or die("Failed to create session: <br> <br> " . mysql_error()); 
} 

而且我getUserId功能:

function getUserId($username) { 
    $query = mysql_query("SELECT * FROM users WHERE(`username`='$username')"); 
    $row = mysql_fetch_row($query); 
    return $row[0]; 
} 

我的問題,如果你沒有得到它了。爲什麼即使getUserId()函數返回用戶的正確ID,'id'始終設置爲0?

有什麼建議嗎?

+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)將幫助你決定哪個。如果你選擇PDO,[這裏是一個很好的教程](http://j.mp/PoWehJ)。 –

+0

是的,我知道我不應該。但爲此目的,我並不擔心在這一點上轉換。 –

+0

如果您將函數切換爲返回assoc_array並使用$ row ['id'],會發生什麼情況?或者只選擇ID,而不是* ..? – James

回答

0

剛剛發現了我的錯誤。

我有這行調用setSession函數。

//set session 
setSession($username. $password); 

它應該是隻解析用戶名,但我忘了把$密碼出來。因此,當它查找用戶名'user1'時,它實際上會查找'user1password',並因此返回0,因爲這些詳細信息中沒有記錄。