首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从PHP调用MySQL存储过程不能如预期的那样工作。

问从PHP调用MySQL存储过程不能如预期的那样工作。
EN

Stack Overflow用户
提问于 2021-05-20 00:33:21
回答 1查看 47关注 0票数 0

使用PHP5.6,我尝试从MySQL (PDO)运行一个MySQL查询,但结果与从PHP运行时不同,所以我最终放弃了,改为编写一个存储过程,我再次从PHP调用它。然而,我得到了相同的无效结果:-(为了证明结果是不同的,我修改了代码,只返回记录数。存储过程可以在这里看到...

代码语言:javascript
复制
CREATE PROCEDURE `test`()
BEGIN
    SELECT count(*)
    FROM
    (
        SELECT id, date, 
            @var_num := if(@var_id = id, @var_num + 1, 1) as row_number,
            @var_id := id 
        FROM `data`
        GROUP BY id, date
        HAVING row_number <= 2
        ORDER BY id DESC, date DESC
    ) s2
ORDER BY id ASC, date DESC;
END

当我从MYSQL Workbench运行存储过程时,它返回7,328,这是正确的,但是当我从PHP运行它时使用...

代码语言:javascript
复制
$pdo = $this->database->getPdo();
$stmt = $pdo->prepare('CALL test()');
$stmt->execute();
$data = $stmt->fetchAll();

结果是4925479。如果我试图返回实际的数据,那么它就会耗尽内存!我假设存储过程无论从何处调用都会以相同的方式运行,我做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2021-05-20 16:49:42

尽管存储过程可能不完整,但我将在此处显示更新后的过程,这对我来说是有效的。希望这能让其他人免于浪费时间:-(

代码语言:javascript
复制
CREATE PROCEDURE `test`()
BEGIN
    SELECT count(*)
    FROM
    (
        SELECT id, date, 
            @var_num := if(@var_id = id, @var_num + 1, 1) as row_number,
            @var_id := id 
        FROM `data`
        CROSS JOIN (select @var_num := 0, @var_id := 0) cj 
        GROUP BY id, date
        HAVING row_number <= 2
        ORDER BY id DESC, date DESC
    ) s2
ORDER BY id ASC, date DESC;
END
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67607278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档