【问题标题】:Using PDOStatement::fetch() like mysql_fetch_array使用 PDOStatement::fetch() 像 mysql_fetch_array
【发布时间】: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 也在移动它。你有什么问题?

标签: php pdo fetch


【解决方案1】:

首先,请使用extract,这样很丑且容易出错。

其次,您缺少获取部分:

if ($query->rowCount() == 1 ){
    $data = $query->fetch(PDO::FETCH_ASSOC);
    $_SESSION['auth'] = "yes";
    $_SESSION['uname'] = $data['fuser'];
    $_SESSION['lev'] = $data['access_level'];
}

【讨论】:

    猜你喜欢
    • 2012-04-21
    • 1970-01-01
    • 2018-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-15
    • 1970-01-01
    相关资源
    最近更新 更多