【发布时间】:2013-01-13 03:33:31
【问题描述】:
$InnerJoinQuery = $STD->query("
SELECT Users.ID, Users.Username, Users.Password, UserInformation.LastName, UserInformation.Firstname, UserInformation.DOB
FROM Users AS Users
INNER JOIN UserInformation AS UserInformation
ON Users.ID = UserInformation.UserID WHERE Users.Username=".$_SESSION['real_name']."");
$InnerJoinArray = $InnerJoinQuery->fetch_array(MYSQLI_ASSOC);
我上面的代码导致错误。它适用于我的WHERE 子句。
WHERE Users.Username=".$_SESSION['real_name']."
我怎样才能将它嵌入到我的内部连接中?
更新:
$InnerJoinQuery = $STD->query("
SELECT Users.ID, Users.Username, Users.Password, UserInformation.LastName, UserInformation.Firstname, UserInformation.DOB
FROM Users
INNER JOIN UserInformation
ON Users.ID = UserInformation.UserID WHERE Users.Username = '".$_SESSION['real_name']."'");
$InnerJoinArray = $InnerJoinQuery->fetch_array(MYSQLI_ASSOC);
$_SESSION['UID'] = $InnerJoinArray['ID'];
$_SESSION['Password'] = $InnerJoinArray['Password'];
$_SESSION['Firstname'] = $InnerJoinArray['Firstname'];
$_SESSION['LastName'] = $InnerJoinArray['LastName'];
$_SESSION['DOB'] = $InnerJoinArray['DOB'];
print_r($_SESSION);
这会返回:
Array ([real_name] => inhumaneslayer [Password] => [UID] => [Firstname] => [LastName] => [DOB] => )
这是意料之外的。
当我将查询更改为:
$InnerJoinQuery = $STD->query("
SELECT Users.ID, Users.Username, Users.Password, UserInformation.LastName, UserInformation.Firstname, UserInformation.DOB
FROM Users
INNER JOIN UserInformation
ON Users.ID = UserInformation.UserID WHERE Users.Username = 'inhumaneslayer'");
我得到了预期的结果:
Array ([real_name] => inhumaneslayer [Password] => PASSWORDHIDDEN [UID] => 5 [Firstname] => xx [LastName] => xx [DOB] => DOBHIDDEN)
这是预期的。
在更改 SQL 之前,我正在通过 unset($_SESSION); 取消会话
【问题讨论】:
-
此代码可能容易受到二阶 SQL 注入的影响。请参数化您的查询。
标签: php mysql inner-join