2

我正在编写一个函数来验证用户。我创建与数据库的连接,然后准备查询,绑定参数,执行查询,将结果绑定到变量,检查查询是否返回结果。

如果是,我比较结果(绑定到变量),关闭语句,关闭连接,然后返回适当的值。好吧,这就是我认为我正在做的事情,但我不断收到语法错误,我无法弄清楚我做错了什么:

语法错误:预期:exit、if、标识符、变量、echo、do、while、for、foreach、declare、switch、break、continue、function、return、try、throw、use、global、unset、isset、empty、class , 接口, 数组, {, }, include, include_once, eval, require, require_once, print, ';', +, -, !, ~, ++, --, @, [, new, static, abstract, final , (, $

我的代码:

/**
     * Authenticates a user. 
     * @param type $email - String value
     * @param type $hashedPassword - String value
     * @return true if user is authenticated or false otherwise - Boolean value
     */
    function isValidUser($email, $hashedPassword)
    {
        //This variable will hold the value returned from the query to the database.
        var $rPassword = NULL;

        //Establish a connection
        $mysqli = new mysqli($GLOBALS['dbServer'], $GLOBALS['dbUserName'], $GLOBALS['dbPassword'], $GLOBALS['dbName']);

        //Check if connection failed
        if($mysqli->connect_error)
        {
            die('Connect Error (' . $mysqli->connect_errno . ') ' 
                    . $mysqli->connect_error);
        }

        $stmt = $mysqli->prepare("SELECT password FROM user_info WHERE email=?");
        $stmt->bind_param('s', $email);
        $stmt->execute();
        $stmt->bind_result($rPassword);
        if($stmt->fetch())
        {
            if(($rPassword != null) && ($rPassword == $hashedPassword))
            {
                $stmt->close();
                $mysqli->close();
                return true;
            } 
        }           
        $stmt->close();
        $mysqli->close();
        return false;           
    }

我在没有使用准备好的语句的情况下这样做,并且代码运行良好,但后来我做了一些研究,发现准备好的语句是要走的路,因为它们有助于防止 SQL 注入。

4

3 回答 3

3
var $rPassword = NULL;

应该:

$rPassword = NULL;

var用于初始化类中的属性。请参阅文档。如果您使用的是类,则需要在方法(函数)之外对其进行初始化,然后通过$this->rPassword.

于 2013-01-27T22:17:44.943 回答
2

从 PHP 5.0 开始,该var关键字已被弃用...

它用于在 PHP4 中声明类成员变量,不再需要。它可以在 PHP5 中工作,但会E_STRICT在 PHP 5.0.0 到 5.1.2 版本中引发警告,从该版本开始,它已被弃用。

于 2013-01-27T22:25:07.640 回答
0

你有两个错误

一个不要重新启动 rPassword 为 NULL 只需让它像这样 $rPassword = 0; 或者使用大写使两个 NULL 和 null 相同的 NULL !其次,rPassword 没有得到你需要的结果,你需要通过正确的语言看这里

http://php.net/manual/en/mysqli-stmt.bind-result.php

 $stmt->bind_result($rPassword);
        if($stmt->fetch())
        {
            if(($rPassword == null) || ($rPassword != $hashedPassword))
            {
                $stmt->close();
                $mysqli->close();
                return false;
            } 
        }           
于 2013-01-27T22:19:08.693 回答