我正在尝试将从$_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'");
答案 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();