php - 在 MySQL 中进行多个不同的动态查询

标签 php mysql pdo

这是我的第一个问题...我正在制作一个动态博客模板,我想显示来自 MySQL 数据库的接下来 4 篇博客文章,这就是我现在正在做的事情:

$stmt = $conn->prepare("SELECT id, title, filename, date, content FROM blogs WHERE id=:id");

// bind in execute with an array. 

$values = [
    'id' => $id+1
];

$stmt->execute($values);

while ($row = $stmt->fetch())
{

$filename1 = $row['filename'];
$title1 = $row['title'];
$date1 = date_format(date_create($row['date']),"F j, Y");
$content1 = substr($row['content'], 0, 85);


$photo1 = preg_replace("/\..+/", "-thumb.jpg", $row['filename']);
}

$stmt = $conn->prepare("SELECT id, title, filename, date, content FROM blogs WHERE id=:id");

// bind in execute with an array. 

$values = [
    'id' => $id+2
];

$stmt->execute($values);

while ($row = $stmt->fetch())
{

$filename2 = $row['filename'];
$title2 = $row['title'];
$date2 = date_format(date_create($row['date']),"F j, Y");
$content2 = substr($row['content'], 0, 85);


$photo2 = preg_replace("/\..+/", "-thumb.jpg", $row['filename']);
}

(3、4 相同)

虽然这确实有效,但我认为这是一种相当低效且昂贵的实现方式。完成这项任务的正确方法是什么?

最佳答案

使用 ORDER BYLIMIT 指定要获取的行数。

$stmt = $conn->prepare("
    SELECT id, title, filename, date, content 
    FROM blogs 
    WHERE id > :id
    ORDER BY id
    LIMIT 4");
$stmt->execute([':id' => $id]);
$posts = $stmt->fetchAll(PDO::FETCH_ASSOC);

$posts 将是一个二维数组,其中包含接下来 4 个帖子的所有数据。

如果 id 值不像您的代码那样连续,则不会出现问题。如果帖子被删除,这种情况就可能发生。

关于php - 在 MySQL 中进行多个不同的动态查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59795783/

相关文章:

mysql - 有 SUM 问题

mysql - SQL JOIN - 不明白

php - 使用 pdo 回显结果的最佳且最安全的方法

javascript - 奇怪的错误: Uncaught TypeError: Illegal invocation ajax

php - symfony 内存不足错误

mysql - mamp mysql 无法启动

php - 如何使用 php pdo 从 mysql 中具有外键约束的数据库中删除数据

php - 使用文本区域修改 MySQL 表字段

php - 无法让 PHP 在 IIS Web 服务器上运行

php - 防止调用 error_reporting() 和/或 ini_set ('display_errors' , 'On' ) 覆盖 php.ini 设置