从表中选择id等于行名称的id

时间:2017-04-10 22:21:33

标签: php mysql pdo

我正在尝试将从$_SESSION获取的用户名的id存储到变量中,但我无法使SQL语句生效。用户名存储在名为users的数据库中,并具有ID作为主键。有人能告诉我如何纠正这个问题吗?感谢

$name = $_SESSION['username']; //get username of user currently logged in

$rid = $db->exec("SELECT id FROM users WHERE username = '$name'");

1 个答案:

答案 0 :(得分:1)

来自PDO::exec()上的PHP文档:

  

PDO :: exec()不返回SELECT语句的结果。对于在程序中只需要发出一次的SELECT语句,请考虑发出PDO :: query()。对于需要多次发出的语句,请使用PDO :: prepare()准备PDOStatement对象,并使用PDOStatement :: execute()发出语句。

这意味着您无法在SELECT查询中使用exec() - 而是必须使用query()prepare()。对于使用变量或用户输入的任何查询,请在查询中使用prepare()和占位符(如下所示)来保护数据库免受 SQL-injection 的影响。

$stmt = $db->prepare("SELECT id FROM users WHERE username = :name");
$stmt->execute(["name" => $name]);
if ($row = $stmt->fetch()) {
    // $row holds the id
} else {
    // No rows were returned at all! No matches for $name
}

如果查询返回任何结果,则$row保留id(s)。根据您的提取类型,它可能是$row['id']$row[0]$row->id或其组合。

如果您预计会有多个结果,则需要循环while ($row = $stmt->fetch()),或使用$stmt->fetchAll();