php - 从 ID = $id_variable 的数据库中选择

标签 php mysql pdo

我的数据库中有一个名为 posts 的表,其中有一列 poster_id 链接到 users 中的 id通过外键表。

现在,我想从 users 表中选择一些数据,其中 id 等于 poster_id。我正在使用 PDO,我阅读了很多关于它的文章,但我仍然无法修复我的错误。

我从 posts 中选择帖子的代码是:

$post_records = $conn->prepare('SELECT * FROM posts ORDER BY RAND()');
$post_records->execute();
$post_results = $post_records->fetchall();

$post_data = NULL;
$posts_count = $conn->query("SELECT count(*) FROM posts")->fetchColumn();

foreach ($post_results as $post_data) {

}

users 中选择用户用户名的代码,其中 id 等于 poster_id:

$poster_id = $post_data['id'];

// Collect poster data from database
$poster_records = $conn->prepare('SELECT username FROM users WHERE id = {$poster_id}');
$poster_records->execute();
$poster_results = $post_records->fetchall();

$poster_data = NULL;
foreach ($poster_results as $poster_data) {

}

posts 表结构:http://prntscr.com/kh8gqz

users 表结构:https://prnt.sc/kh8h0f

外键链接posts 表中的poster_idusers 表中的id

额外:这段代码给我以下错误:

Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''users' WHERE 'id' = '1'' at line 1 in F:\xampp\htdocs\home.php:57 Stack trace: #0 F:\xampp\htdocs\home.php(57): PDOStatement->execute() #1 {main} thrown in F:\xampp\htdocs\home.php on line 57

提前致谢。

最佳答案

在这里:

$poster_records = $conn->prepare('SELECT username FROM users WHERE id = {$poster_id}');

您在 SQL 语句中使用了单引号,因此字符串将按字面意义获取,这意味着变量 $poster_id 不会扩展为其值。用双引号替换语句并重试:

$poster_records = $conn->prepare("SELECT username FROM users WHERE id = {$poster_id}");

编辑:好的,如果这不起作用,请尝试使用绑定(bind)参数的准备好的语句,如下所示:

$poster_records = $conn->prepare('SELECT username FROM users WHERE id = ?');
$poster_records->bind_param('i', $poster_id);
$poster_records->execute();

编辑 2:使用 PDO:

$poster_records = $conn->prepare('SELECT username FROM users WHERE id = :id');
$poster_records->execute([':id' => $poster_id]);

关于php - 从 ID = $id_variable 的数据库中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51794734/

相关文章:

php - 如何增加 Firebase token 的到期时间?

php - WordPress 在前端显示旧数据

php - 创建空表并插入数据

c# - 在 GridView 中,我的 Roe 未更新或删除

php - 使用 MySQL 计算唯一 IP 地址

php - 表单未填写表格并返回空白页

mysql - 对主键列使用 mediumint 而不是 int 的好处?

php - 插入时 PDO 2300,但不存在行

php - 我如何知道准备好的语句是否被缓存?

php - 如何在单个查询中获取两个单独的错误结果