gpt4 book ai didi

php - 联合选择与变量,在 PHP 中与 PDO。怎么做才对?

转载 作者:行者123 更新时间:2023-11-30 23:08:48 24 4
gpt4 key购买 nike

我正在尝试运行一个返回随机行的查询,以及该行周围的 2 行(上一行和下一行)。

我已将随机结果值保存在一个变量中,以便它可供以下所有查询使用。

我的查询如下:

SET @rand := (SELECT CEIL(RAND() * MAX(id)) FROM data); 
(SELECT * FROM `data` where `id` < @rand AND safe = 1 ORDER BY ID DESC LIMIT 1) UNION
(SELECT * FROM `data` where `id` = @rand AND safe = 1 ORDER BY ID DESC LIMIT 1) UNION
(SELECT * FROM `data` where `id` > @rand AND safe = 1 ORDER BY ID ASC LIMIT 1);

@rand 确实包含一个有效的随机 ID。

原来是我在大学电脑上使用的 phpmyadmin 界面上的显示问题。

查询正确执行,并且在 mysql 命令行界面中正确显示行。但是在 PHP/pdo 中它现在返回

PDOStatement::fetchAll(): SQLSTATE[HY000]: General error

虽然相同的代码在查询中没有 @rand 并使用静态 id 进行测试,但它会按预期返回 3 行。

最佳答案

我怀疑 PDO 在运行两个 SQL 语句时遇到问题。我会创建一个存储过程来运行语句并使用 PDO 调用存储过程:

CREATE PROCEDURE spGetThreeRandomRows()
BEGIN
@rand := (SELECT CEIL(RAND() * MAX(id)) FROM data);
(SELECT * FROM `data` where `id` < @rand AND safe = 1 ORDER BY ID DESC LIMIT 1) UNION
(SELECT * FROM `data` where `id` = @rand AND safe = 1 ORDER BY ID DESC LIMIT 1) UNION
(SELECT * FROM `data` where `id` > @rand AND safe = 1 ORDER BY ID ASC LIMIT 1);
END;

然后这样调用它:

$stmt = $dbh->prepare("CALL spGetThreeRandomRows()");
$stmt->execute();

关于php - 联合选择与变量,在 PHP 中与 PDO。怎么做才对?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20702991/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com