2013-08-26 175 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,因为这些详细信息中没有记录。