所以我正在开发的项目建立在Cloud9开发平台上,我遇到了一个问题。这个特定的MySQL查询缺少其中一个列数据,它只是拒绝返回它。
我的部分登录代码,带有查询;
http://i.stack.imgur.com/kmx9O.png
代码:
$sql_command = "SELECT Salt FROM User WHERE Name ='" . $username . "';";
$result = $conn->query($sql_command);
if($result->num_rows > 0)
{
//echo "<p> username: ". $username . "</p>";
//echo "<p> password: ".$password . "</p>";
$salt = $result->fetch_array()[0];
//echo "<p>salt " . $salt . "</p>";
$hashed_password = hash("sha256", $salt . $password);
$sql_command = "SELECT `ID`, `Status` FROM User WHERE Password ='" . $hashed_password .
"' AND Name = '" . $username . "';";
$result = $conn->query($sql_command);
//echo $hashed_password;
if($result->num_rows > 0)
{
$user = $result->fetch_array()[0];
$status = $result->fetch_array()[1];
if($status != -1)
{
$_SESSION['login_user'] = $user;
$_SESSION['login_status'] = $status;
$_SESSION['login_user_name'] = $username;
}
有问题的数据,状态栏;
http://puu.sh/ec3fP/de1e63b384.png
唯一不返回任何数据的列是Status列。
其他所有查询都可以。
列状态是int类型,长度为11。没有其他特殊的特征。
答案 0 :(得分:1)
$result->fetch_array()
,如果像你那样多次运行,每次都会跳转到下一行,因此它会尝试从查询结果的第二行获取状态,这是不存在的。
你可以使用例如
$data = $result->fetch_array();
$user = $data[0];
$status = $data[1];
答案 1 :(得分:0)
它不会拒绝获取数组。它 DID - 你只是扔掉了结果:
这会获取一行:
$user = $result->fetch_array()[0];
这会获取 NEXT 行:
$status = $result->fetch_array()[1];
据推测,您的查询只返回一行,因此第二次获取将返回一个布尔值false,表示“没有更多数据”。
您的代码应为:
$row = $result->fetch_array();
$user = $row[0];
$status = $row[1];