PHP MySQL,不返回数据,即使它在数据库中
PHP MySQL, data not returned, even though it is in database
所以我现在做的项目是在Cloud9开发平台上搭建的,遇到了问题。这个特定的 MySQL 查询缺少其中一个列数据,它只是拒绝 return 它。
我的部分登录代码,带查询;
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
唯一没有 return 任何数据的列是“状态”列。
所有其他查询都工作正常。
列status为int类型,长度为11。没有其他特别之处。
$result->fetch_array()
,如果像你这样多次运行,每次都会跳到下一行,因此它会尝试从你的查询结果的第二行获取状态,这不存在。
您可以使用例如
$data = $result->fetch_array();
$user = $data[0];
$status = $data[1];
不是拒绝取数组。它 DID - 你只是扔掉了结果:
这会获取一行:
$user = $result->fetch_array()[0];
这会获取 NEXT 行:
$status = $result->fetch_array()[1];
大概您的查询只会 return 一行,因此第二次提取将 return 布尔值 false,表示 "no more data"。
您的代码应该是:
$row = $result->fetch_array();
$user = $row[0];
$status = $row[1];
所以我现在做的项目是在Cloud9开发平台上搭建的,遇到了问题。这个特定的 MySQL 查询缺少其中一个列数据,它只是拒绝 return 它。
我的部分登录代码,带查询;
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
唯一没有 return 任何数据的列是“状态”列。
所有其他查询都工作正常。
列status为int类型,长度为11。没有其他特别之处。
$result->fetch_array()
,如果像你这样多次运行,每次都会跳到下一行,因此它会尝试从你的查询结果的第二行获取状态,这不存在。
您可以使用例如
$data = $result->fetch_array();
$user = $data[0];
$status = $data[1];
不是拒绝取数组。它 DID - 你只是扔掉了结果:
这会获取一行:
$user = $result->fetch_array()[0];
这会获取 NEXT 行:
$status = $result->fetch_array()[1];
大概您的查询只会 return 一行,因此第二次提取将 return 布尔值 false,表示 "no more data"。
您的代码应该是:
$row = $result->fetch_array();
$user = $row[0];
$status = $row[1];