【发布时间】:2014-05-20 04:15:45
【问题描述】:
所以,为了防止 MYSQL 注入,我尝试将 PDO 用于登录表单,但遇到了一个问题。虽然以前我使用过这样的代码:
$fuser = $_POST['fusername'];
$fpass = $_POST['fpassword'];
$query = "SELECT * FROM person WHERE username='$fuser' AND password='$fpass'";
$result = mysql_query($query);
$num = mysql_num_rows($result);
if ($num==1) {
$row = mysql_fetch_array($result);
extract($row);
$_SESSION['auth'] = "yes";
$_SESSION['uname'] = $fuser;
$_SESSION['lev'] = $accesslevel;
我现在正在尝试使用 PDO 来执行此操作(忽略变量名称的更改)
$loginemail = $_POST['lemail'];
$loginpass = $_POST[('lpassword')];
$loginpass = sha1($loginpass);
$query = $hsdbc->prepare('SELECT * FROM user WHERE email =
:loginemail and password = :loginpass');
$query->bindParam(':loginemail', $loginemail, PDO::PARAM_STR, 75);
$query->bindParam(':loginpass', $loginpass, PDO::PARAM_STR, 255);
$query->execute();
if ($query->rowCount() == 1 ){
但是,我不确定如何执行分配会话变量的最后一部分。我研究了 fetch 并且可能认为 FETCH_CLASS 可能是答案,但我不确定
【问题讨论】:
-
那么,其他变种没有吸引你?
-
$row = $hsdbc->fetch(PDO::FETCH_ASSOC); $_SESSION['uname'] = $row['fuser'];(我建议不要使用extract())。 -
在询问之前尝试 fetch() 怎么样?
-
这个问题的答案就在mysql_fetch_assoc手册页上。
-
mysql_fetch_array 也在移动它。你有什么问题?