【发布时间】:2013-01-11 06:06:32
【问题描述】:
我正在编写一个函数来验证用户。我创建与数据库的连接,然后准备查询,绑定参数,执行查询,将结果绑定到变量,检查查询是否返回结果。
如果是,我比较结果(绑定到变量),关闭语句,关闭连接,然后返回适当的值。好吧,这就是我认为我正在做的事情,但我不断收到语法错误,我无法弄清楚我做错了什么:
语法错误:预期:exit、if、标识符、变量、echo、do、while、for、foreach、declare、switch、break、continue、function、return、try、throw、use、global、unset、isset、空、类、接口、数组、{、}、包含、include_once、eval、require、require_once、print、';'、+、-、!、~、++、--、@、[、new、static、抽象的,最终的,(,$
我的代码:
/**
* 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 注入。
【问题讨论】:
-
哪一行出现语法错误?
-
从 user_info WHERE email=:s 中选择密码
-
@vodich 不。这是 MySQLi。您正在考虑 PDO。
-
如果删除他的 var 删除了他的错误,请不要忘记对答案进行投票并选择接受。
-
它消除了他的语法错误,那是你的问题。该代码可能有很多其他问题,但这与这个问题无关。 SO 不是调试服务。
标签: php database mysqli prepared-statement