准备好的语句不返回任何内容

Prepared statement returning nothing

我正在尝试确认用户是否提交了有效凭据。

HTML

<form action="assets/php/account/login_user.php" method="post" id="login" class="center">
    <div id="register_errorloc"></div>
    <div class="form-group">
        <input type="text" name="login_username" id="login_username" class="form-control" placeholder="Username" />
    </div>

    <div class="form-group">
        <input type="password" name="login_password" id="login_password" class="form-control" placeholder="Password" />
    </div>

    <div class="form-group">
        <input type="submit" value="login" id="submit_login" class="btn btn-success form-control"/>
     </div>
</form>

PHP

$username = trim($_POST['login_username']);
$password = hash('sha512',trim($_POST['login_password']));

//to check if values are correct by myself
echo '<br>' . $username . '<br>' . $password . '<br>';

include_once '../../../assets/php/DB/DBConnect.php';

//check if valid credentials are entered
$stmt = $conn->prepare("SELECT * FROM tbl_users WHERE username = ?");
echo $stmt->bind_param('s', $username);
echo $stmt->execute();
echo $stmt->store_result();

if($stmt->num_rows == 1){
    echo 'Good Creds';
}else{
    echo 'Bad Creds';
}

当我这样做时,它总是显示 0 个结果。当我将查询字符串更改为

$stmt = $conn->prepare('SELECT * FROM tbl_users WHERE username = "abc"');

我得到了我想要的结果。我很困惑,因为我在不同的页面上使用了相同的方法,而且效果很好。

截图

Login form

Submitted form

Row I'm looking for

编辑:添加了所有代码。

Edit2:添加了屏幕截图

Edit3:添加表格 HTML

编辑4:

表单提交没有问题。当我像这样对变量进行硬编码时:

$username ='abc';

还是不行

很抱歉,您发布的屏幕截图对我们没有帮助。

为了避免进一步评论,我提交以下内容。

您的表单及其相关元素可能会失败,需要一个 POST 方法并且每个元素都存在名称属性。

即:

<form method="post" action="???">
    <input type="text" name="login_username">
...

编辑:

尝试以下方法,评论越来越多:

$check = $conn->prepare("SELECT * FROM tbl_users WHERE username=?");
    $check->bind_param("s", $username);
    $check->execute();
    $check->store_result(); 
    $row_chqry = $check->num_rows;

if($row_chqry  > 0 ) {

    echo "Exists";

$check->close(); 
$conn->close();

}


编辑#2:

OP 发布了一个回答,指出他们正在为他们的数据库连接使用相同的变量。

如果发布了完整的代码,我会立即发现并导致冲突的东西。我以前见过这种情况发生过好几次,记得也为他们发布了答案。至于具体在什么地方,我要花些时间才能找到;但我确实记得发布了相关问题的答案。

  • 哦,好的,问题解决了。

解决方案:

  • 为您的用户名使用不同的变量。
  • 使用唯一变量。

我终于找到错误了:

当连接到我的数据库时,我使用:

$servername = "";
$username = "";
$password = "";
$db = "";

// Create connection
$conn = mysqli_connect($servername, $username, $password, $db);

// Check connection
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}

在我的提交脚本中我也使用了$username。包含 DBconnection 文件导致我的本地变量($username,我从表单中获得)被 DBconnect 中找到的用户名覆盖。