2

您好,我有这个查询来通过电子邮件获取用户,这是数据库中的一个唯一字段。

但是,当我想获取上面的数据时,它只是返回 null。

这是代码

    public function getUserByEmail($email)
    {

            $statement = "SELECT id_user,nome,email,permissao,activo FROM sys_users 
                          WHERE email=$email";

            try
            {

             $sth = $this->db->query($statement);
             $sth->setFetchMode(PDO::FETCH_OBJ);
             $rcs_users = $sth->fetchAll();
             return $rcs_users;

            }
            catch(PDOException $e)
            {
                "DB Error".$e->getMessage();
            }

    }

以及各自的函数调用

$user_rcs = $user->getUserByEmail($email);

    var_dump($user_rcs); //returns null




    $_SESSION['email'] = $email;
    $_SESSION['user'] = $user_rcs->nome;
    $_SESSION['permissao'] = $user_rcs->permissao;

然后我得到这个错误

Notice: Trying to get property of non-object in C:\xampp\htdocs\inacesso\admin\modules\auth\authhandler.php on line 24

很高兴你能帮助我!

4

2 回答 2

5

SQL 中的字符串必须用引号引起来,因此除非$email在函数中包含''围绕它到达,否则 SQL 将出错。

但是无论如何,您不应该通过将 PHP 字符串混搭来构建 SQL。将 PDO 或 mysqli_* 与绑定参数(和准备好的语句)一起使用,这将为您处理引用(和转义)。

于 2012-06-14T15:03:42.093 回答
1

首先,认真看看PDO

其次,我会想象该email列是一个字符串。因此,您需要在查询中用引号括起来(当然,在大力$email清理它之后......)

WHERE email='$email'

PDO 版本:

$pdo = new PDO(...);
$query = $pdo->prepare('SELECT id_user,nome,email,permissao,activo '.
                       'FROM   sys_users '.
                       'WHERE  email = ?');
$result = $query->execute(array($email));
于 2012-06-14T15:04:22.980 回答