php mysql准备语句不工作

php mysql准备语句不工作,php,mysqli,prepared-statement,Php,Mysqli,Prepared Statement,我目前正在学习php和mysql,并试图构建一个身份验证网页,用户可以在其中注册并登录到受成员保护的页面。注册过程运行良好,但由于某些原因,我在登录执行脚本中遇到了此错误 Fatal error: Call to a member function prepare() on a non-object in /homepages/8/d459264879/htdocs/tymbi_reg/login_exec.php on line 40 如果($stmt=$mysqli->prepare($S

我目前正在学习php和mysql,并试图构建一个身份验证网页,用户可以在其中注册并登录到受成员保护的页面。注册过程运行良好,但由于某些原因,我在登录执行脚本中遇到了此错误

Fatal error: Call to a member function prepare() on a non-object in /homepages/8/d459264879/htdocs/tymbi_reg/login_exec.php on line 40
如果($stmt=$mysqli->prepare($SELECT*FROM member,其中username=?和password=?),第40行在这里

我一直在努力寻找问题所在,但没有成功

这是我在登录脚本中使用的代码

<?php

session_start();
require_once('connection.php');
$errmsg_arr = array();
$errflag = false;
$username = $_POST['username'];
$password = $_POST['password'];

if($username == '') {
    $errmsg_arr[] = 'Username missing';
    $errflag = true;
}
if($password == '') {
    $errmsg_arr[] = 'Password missing';
    $errflag = true;
}

if($errflag) {
    $_SESSION['ERRMSG_ARR'] = $errmsg_arr;
    session_write_close();
    header("location: index.php");
    exit();
} else {


    if($stmt = $mysqli->prepare("SELECT * FROM member WHERE username=? AND password =?"))
    {
        $stmt->bind_param("ss", $username, $password);
        $stmt->execute();
        $stmt->store_results();

        if($stmt->num_rows > 0)
        {

            $SESSION['username'] = $username;
            header("Location: home.php");

        }

        else

        {

            $error['alert'] = "Username or password are incorrect";

        }

    }   

}


?>

这是我的connection.php代码

<?php
$con=new mysqli("test","test","test","test");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
?>


是的,我已经用我的详细信息替换了测试值

您还没有定义
$mysqli
-您的连接。这就是它不起作用的原因

除非它是在
connection.php
中定义的。你能试试var_dump
$mysqli
看看你得到了什么吗?

确保你已经正确定义了

$mysqli = new mysqli('host','user','pass','database_name');
这有助于读取连接错误

或者你也可以使用

try
{
//your connection
}catch(Exception $e)
{
  echo $e->getMessage();
}

我建议大家继续使用Mysqli对象,不要在过程函数中混用。如果您编写了如下连接逻辑,您可能会更早地发现错误:

$con = new mysqli("host","user","pass","db");

if ($mysqli->errno)
{
    echo "Failed to connect to MySQL: " . $mysqli->error;
}

OP将连接声明为$con,然后尝试以$mysqli的身份访问它。mysqli_connect_errno()报告说,$con正常,但是,$mysqli->errno将失败,因为$mysqli此时不是一个对象,因为他将连接命名为$con而不是$mysqli

你确定成功创建了连接吗?我看不到$mysqli连接在任何地方给出var\u dump($mysqli)看看你得到了什么?你在connection.php中使用了
$con
,在其他页面上使用了
$mysqli
,所以你在connection.php中使用了$con,在登录脚本中使用了$mysqli?用mysqli_connect_errno()捕捉错误有什么不对?你的代码报告的OP失败的原因是什么?这并不是因为它本身是错误的。它回答了错误的问题。
$con = new mysqli("host","user","pass","db");

if ($mysqli->errno)
{
    echo "Failed to connect to MySQL: " . $mysqli->error;
}