PHP绑定错误

PHP绑定错误,php,mysqli,Php,Mysqli,我正在尝试使用这个脚本来查看我的数据库中是否有注册的using,但在第6行遇到了问题。我不断得到错误: 致命错误:对中的非对象调用成员函数bind_param -第6行编辑-/check_login.php 我很困惑为什么它会失败,因为我有一个类似的语句在处理createuser函数 <?php ini_set('display_errors', 'On'); $db = new mysqli("localhost", "root", "-redacted-", "-redacted-")

我正在尝试使用这个脚本来查看我的数据库中是否有注册的using,但在第6行遇到了问题。我不断得到错误:

致命错误:对中的非对象调用成员函数bind_param -第6行编辑-/check_login.php

我很困惑为什么它会失败,因为我有一个类似的语句在处理createuser函数

<?php
ini_set('display_errors', 'On');
$db = new mysqli("localhost", "root", "-redacted-", "-redacted-");

$query = $db->prepare("SELECT user FROM users WHERE username = ? AND password = ?");
$query->bind_param('ss', $_POST['username'], md5($_POST['password']));
$query->execute();
$query->bind_result($result);
$query->fetch();

if($result->num_rows == 1) {
    session_start();
    $_SESSION['user'] = $_POST['username'];
    header("Location: 10.0.0.15/index.php");
}
?>

这通常是由于在数据库架构中引用不存在的列/表引起的。因此,为什么prepared是这个错误的根本原因

您应该做的是检查您的查询。确保您:

不使用保留的mysql关键字 引用 存在于模式中 SQL中没有语法错误 查询
这意味着prepare收到错误并返回false,而不是mysqli_stmt对象。您需要检查错误。我预计您的$查询失败-检查数据库中的返回值,看看它运行时发生了什么。我想这不是因为不存在引用,而是因为使用了保留字user?正确。它只是决定要大发雷霆。我换了个名字,它开始工作得很好。避免使用保留字是最佳做法,但如果必须这样做的话。你可以用一个反勾来逃避单词。。示例:从表中选择*,其中``user`=?这将告诉MySQL您引用了一个列名,并且没有尝试使用保留关键字-注意,只在保留字的每一侧使用一个反勾。有一个格式化的问题,所以我不知道如何克服。好吧,它的命名方式对我来说不是什么大问题。我只想避开关键词。稍微不同的是,有没有一种简单的方法来计算有多少结果会回来?上述内容被视为非对象而被拒绝。@Jacobm001我想你是在寻找:这正是计算当前结果时想到的。如果那不是你要的,那么不幸的是我不知道。