-1

我目前正在学习 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

第 40 行在这里 if($stmt = $mysqli->prepare("SELECT * FROM member WHERE username=? AND password =?"))

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

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

<?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();
}
?>

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

4

4 回答 4

1

确保您正确定义了 $mysqli

$mysqli = new mysqli('host','user','pass','database_name');
于 2013-04-15T12:02:59.857 回答
0

你还没有定义$mysqli- 你的连接。这就是为什么它不起作用。

除非它在connection.php​​. 你能试试 var_dump$mysqli看看你得到了什么吗?

于 2013-04-15T12:02:55.627 回答
0
$link = mysqli_connect("localhost", "user", "my_password", "world");

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

这有助于读取连接错误。

或者你也可以使用

try
{
//your connection
}catch(Exception $e)
{
  echo $e->getMessage();
}
于 2013-04-15T12:11:24.613 回答
-1

我建议全力使用 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

于 2016-07-08T10:41:08.273 回答