【问题标题】:Execute statement only returns #Rows执行语句只返回#Rows
【发布时间】:2015-05-28 06:08:49
【问题描述】:

我正在使用 PMA 来测试一些数据透视查询(动态列),一切似乎都运行良好,但是,我只在结果中得到 #Rows,而不是实际的行集。

如何查看我的结果集?

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(IF(t.week_end = ''',
      t1.week_end,
      ''', t.st_hours, NULL)) AS ''',
      t1.week_end, '\''
    )
  ) INTO @sql
FROM timesheets t1 WHERE t1.week_end > "2015-03-01";

SET @sql = CONCAT('SELECT t.assignment_id
                    , ', @sql, ' 
                   FROM timesheets t
                  LEFT JOIN timesheets t1 ON t.timesheet_id = t1.timesheet_id
                   GROUP BY t.assignment_id');

PREPARE stmt FROM @sql;
EXECUTE stmt;

返回# Rows: 440

SELECT * FROM table - 返回实际的行集

【问题讨论】:

  • 我们可以……看看声明吗?
  • @dgig 我不认为该声明与它有任何关系。如果我复制该语句并将其作为静态查询运行,我会得到结果。当通过准备好的语句和用户定义的变量执行时,我只得到行数
  • 好吧@dgig 是对的,我们需要看看语句是什么......或者整个存储过程会更好。您的 prepare stmt 语法最后只缺少分号,这是我在这里看到的唯一缺少的东西...
  • @AleksandarMiladinovic 好的,声明的其余部分,但就像我说的,声明很好。我只是不知道如何让 PMA 在使用 PREPARED->EXECUTE 而不是标准的静态查询时返回实际结果集
  • 我刚刚使用了准备好的语句,你的看起来还不错,它应该按预期从 SELECT 语句返回结果。我不够聪明,看不出这里有什么问题。唯一的问题可能出在第一部分 Select Group_Concat(Disti... INTO sql 中。您能否尝试将 Select 语句设置为更简单的内容为 't1.week_end' 然后看看发生了什么?逐步调试先排除一个部分。 ..希望有人能提出解决方案。GL

标签: mysql phpmyadmin prepared-statement


【解决方案1】:

这将在最新的 PHPMyAdmin 版本中得到解决,并应在 4.6 版中发布。

[Prepared statements] 可以在查询中发送,因为这现在在 phpMyAdmin 中几乎可以使用。唯一的问题是显示结果。如果您执行上述所有操作,您将仅从最后一个查询 (DEALLOCATE) 中获得结果,该查询显示 0 行,但如果您在没有 DEALLOCATE 的情况下执行此操作,则据报道您会获得 1 行,但未显示。

Reference

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多