我正在编写一个验证用户身份的函数。我创建了与数据库的连接,然后准备查询,绑定参数,执行查询,将结果绑定到变量,检查查询是否返回结果。
如果是,我比较结果(绑定到变量),关闭语句,关闭连接,然后返回适当的值。嗯,这就是我认为我正在做的事情,但我一直得到一个语法错误,我无法弄清楚我做错了什么:
语法错误:expect:exit,if,identifier,variable,echo,do,while,for,foreach,declare,switch,break,continue,function,return,try,throw,use,global,unset,isset, empty,class,interface,array,{,},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注入。
答案 0 :(得分:3)
var $rPassword = NULL;
应该是:
$rPassword = NULL;
var
用于初始化类中的属性。见documentation。如果您正在使用类,则需要在方法(函数)之外对其进行初始化,然后通过$this->rPassword
访问该属性。
答案 1 :(得分:2)
在PHP 5.0上不推荐使用var
关键字...
用于在PHP4中声明类成员变量,不再需要它。它将在PHP5中运行,但会在PHP中从版本5.0.0到版本5.1.2引发E_STRICT
警告,因为它已被弃用。
答案 2 :(得分:0)
一个不重启rPassword为NULL只是让它像这样 $ rPassword = 0; 或者使用大写两次使用NULL和null相同的NULL! 第二个rPassword没有像你这样得到它的结果 你需要传递正确的verbails看这里
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;
}
}