php mysql prepare语句不起作用

时间:2013-04-15 11:59:07

标签: 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

第40行在这里($ 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 个答案:

答案 0 :(得分:1)

确保您已正确定义$mysqli

$mysqli = new mysqli('host','user','pass','database_name');

答案 1 :(得分:0)

您尚未定义$mysqli - 您的连接。这就是它无法正常工作的原因。

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

答案 2 :(得分: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();
}

答案 3 :(得分:-1)

我建议全部使用Mysqli对象而不是混合过程函数。如果您编写了如下所示的连接逻辑,那么您之前就会发现错误:

<uniqueKey>

OP宣布连接为 $ con ,后来尝试以 $ mysqli 的形式访问它。 mysqli_connect_errno()报告 $ con是好的,但是 $ mysqli-&gt; errno将失败,因为$ mysqli在那时不是对象,因为他命名了连接$ con not $ mysqli