PhpMyAdmin 导出程序结果

Posted

技术标签:

【中文标题】PhpMyAdmin 导出程序结果【英文标题】:PhpMyAdmin exporting procedure result 【发布时间】:2020-11-29 20:05:18 【问题描述】:

我在 mysql 中有一个存储过程。

我想将结果导出为 CSV(或其他),但由于某些未知原因,导出按钮不会显示。

我可以导出程序,但不能导出程序生成的结果。

从常规选项卡:routinetab

我尝试从 SQL 选项卡并从那里调用我的程序,但仍然没有导出按钮: sqltab

当我对任何其他查询执行此操作时,会显示该按钮。

所以我尝试了一种解决方法来欺骗 phpMyAdmin,并通过使用“tbl_export.php”将其更改为“tbl_export.php”,就像如果按钮在那里,它通常会重定向一样,将用于创建视图的 URL 从查询结果更改为导出结果。

导出页面加载,但是当我尝试导出它时,我得到 Bad parameter 错误:bad_param。

不知何故,我使用 4.7 版本将其存档,我可以下载一个 JSON 文件,但只能下载一次,我无法再复制它,甚至无法运行最新版本 5.1

我真的不知道为什么这个导出按钮不能用于程序,它只是一个查询结果。

提前致谢,

编辑

尽可能不使用输出文件。

【问题讨论】:

【参考方案1】:

这不是一个正确的解决方案,而是一种解决方法:

您可以使用浏览器中的元素检查器从常规查询结果中复制任何导出按钮的外部 html,然后将其粘贴到 CALL 命令的结果中以导出结果。一些修改是必要的。

您应该从常规查询导出按钮复制带有href="tbl_export.php" 的锚标记。请注意,<a> 标记有一个 data-post 属性,其中包含 url 编码的表单数据。在data-post 字符串的所有字段中,我们对sql_querytable 字段感兴趣。即,我们要替换sql_query 并断言table 字段不为空。

在 PhpMyAdmin 中执行 CALL 命令时,您应该在页面底部的字段集中打开元素检查器,将复制的外部 HTML 粘贴为字段集的最后一个子项并编辑 sql_query 值以匹配相邻创建视图按钮中的sql_query

以下 Greasemonkey 脚本会自动执行上述所有操作,并在可能的情况下创建“强制导出”按钮:

// ==UserScript==
// @name      Force export button in phpMyAdmin
// @namespace https://<your phpmyadmin host>/*
// @include   https://<your phpmyadmin host>/*
// @version   1
// @grant     none
// ==/UserScript==

setInterval(function() 
  // See https://***.com/a/35385518/5254685
  /**
   * @param String HTML representing a single element
   * @return Element
   */
  function htmlToElement(html) 
      var template = document.createElement('template');
      html = html.trim(); // Never return a text node of whitespace as the result
      template.innerHTML = html;
      return template.content.firstChild;
  

  let create_view_a = document.querySelector('span>a.create_view');
 
  if (create_view_a == null) 
    return;
  
  
  if (document.querySelector('a[href="tbl_export.php"]') != null) 
    return;
  

  let data_post = create_view_a.getAttribute('data-post');

  let fieldset = create_view_a.parentElement.parentElement;
  
  let form_data = Object.fromEntries(
    data_post.split('&').map(v => v.split('=', 2))
    );


  if (form_data['table']) 
    let forced_export_btn = htmlToElement(`
      <a href="tbl_export.php" data-post="$data_post">
        <span class="nowrap"><img src="themes/dot.gif" title="Export"  class="icon ic_b_tblexport">&nbsp;Forced Export</span>
      </a>
    `);
    fieldset.appendChild(forced_export_btn);
  
, 2500);

【讨论】:

以上是关于PhpMyAdmin 导出程序结果的主要内容,如果未能解决你的问题,请参考以下文章

PhpMyAdmin - 导出与查询结果不同

定期以自动方式导出 phpmyadmin 的查询

Mint/Ubuntu 安装 phpMyadmin

apache mysql php phpMyadmin

如何始终使用 python 下载最新版本的 phpmyadmin?

无法登录到 phpmyadmin 并且没有显示错误