Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP MySQL,数据不返回,即使它在数据库中_Php_Mysql_Sql - Fatal编程技术网

PHP MySQL,数据不返回,即使它在数据库中

PHP MySQL,数据不返回,即使它在数据库中,php,mysql,sql,Php,Mysql,Sql,因此,我正在从事的项目是在Cloud9开发平台上构建的,我遇到了一个问题。这个特定的MySQL查询缺少一个列数据,它只是拒绝返回它 我的部分登录代码,带查询 代码: $sql_command = "SELECT Salt FROM User WHERE Name ='" . $username . "';"; $result = $conn->query($sql_command); if($result->num_rows > 0) {

因此,我正在从事的项目是在Cloud9开发平台上构建的,我遇到了一个问题。这个特定的MySQL查询缺少一个列数据,它只是拒绝返回它

我的部分登录代码,带查询

代码:

$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;
            }
有问题的数据,状态栏

唯一不返回任何数据的列是Status列

其他每一个查询都可以正常工作

列状态为int类型,长度为11。没有其他特殊特性。

$result->fetch\u数组,如果像您这样多次运行,每次都会跳转到下一行,因此它会尝试从您的查询结果的第二行(不存在)获取状态

你可以用

 $data = $result->fetch_array();
 $user = $data[0];
 $status = $data[1];

它并没有拒绝获取数组。确实如此-你只是简单地放弃了结果:

这将获取一行:

  $user = $result->fetch_array()[0];
这将获取下一行:

您的查询可能只返回一行,因此第二次获取将返回布尔值false,表示不再返回数据

您的代码应该是:

$row = $result->fetch_array();
$user = $row[0];
$status = $row[1];

请在这里发布您的代码,以便为将来的so访客保留。我建议完全不同的方法。为什么要对数据库进行查询以比较密码。为什么不根据用户名一次选择所有需要的列,然后进行比较呢。没有必要将其分解为两个单独的查询。您可能还想考虑使用PHP的内置PaseWordHASH和PaseWordSuffice函数来避免将盐单独存储在DB表中。您是否尝试从数据库中选择所有*并使用一段时间?$result=fetch_array{$status=$result['status'];echo$status;}///这可能是非常随机的,您的代码编辑器是什么D您提出的问题不完整,请添加更多细节!莫斯塔法,克劳德9号,如回答中所说。也是很有帮助的建议谢谢,就是这样!谢谢你解决了这个问题,尽管这可能只是我的一个简单的后见之明。
$row = $result->fetch_array();
$user = $row[0];
$status = $row[1];