我试图将从 $_SESSION
获得的用户名的 ID 存储到一个变量,但我无法使 SQL 语句工作。用户名存储在名为用户的数据库中,并以 ID 作为主键。有人可以告诉我如何纠正这个问题吗?谢谢
$name = $_SESSION['username']; //get username of user currently logged in
$rid = $db->exec("SELECT id FROM users WHERE username = '$name'");
最佳答案
来自 PDO::exec()
的 PHP 文档:
PDO::exec() does not return results from a SELECT statement. For a SELECT statement that you only need to issue once during your program, consider issuing PDO::query(). For a statement that you need to issue multiple times, prepare a PDOStatement object with PDO::prepare() and issue the statement with PDOStatement::execute().
这意味着您不能在 SELECT 查询上使用 exec()
- 相反,您必须使用 query()
或 prepare()
.对于使用变量或用户输入的任何查询,请在变量查询中使用 prepare()
和占位符,以保护您的数据库免受SQL 注入(inject)。
$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。根据您的获取类型,它可能是 $row['id']
、$row[0]
、$row->id
或这些的组合。
如果你期望不止一个结果,你需要循环while ($row = $stmt->fetch())
,或者使用$stmt->fetchAll();
关于php - 从等于行名的表中选择 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43333786/