【问题标题】:MySQL/phpMyAdmin comments in stored procedures removed已删除存储过程中的 MySQL/phpMyAdmin 注释
【发布时间】:2017-08-25 14:10:33
【问题描述】:

我面临一个简单的问题。我不知道,如果这是 MySQL 或 phpMyAdmin 的问题,但每次我在定义中使用 cmets 更新存储过程时,都会删除 cmets。我找到了很多讨论它的论坛,但没有解决。有人有解决方案或想法吗? MySQL 5.7.17 x64、phpMyAdmin 4.6.6、Windows 7 x64、Apache 2.4 VC14 x64。

非常感谢。

编辑 - 仅在导入 sql 文件或通过 SQL textarea 时发生。使用“钢笔工具”保存 cmets

要导入的示例存储过程:

DELIMITER $$
DROP PROCEDURE IF EXISTS `sp_Test`$$
CREATE PROCEDURE `sp_Test`()
BEGIN
  -- this comment will be removed
  # this comment will be removed as well
  /* this comment too */

  SELECT 1;

END$$
DELIMITER ;

试过 phpMyAdmin 4.7.0 - 同样的问题...

最简单的解决方案是切换到不同的应用程序 - Adminer (www.adminer.org),它只包含一个文件,速度非常快,不会做任何我不想做的事情,并且可以做任何 phpMyAdmin 可以做的事情也是。 phpMyAdmin 这么久了,再也不会了。

【问题讨论】:

  • 你能展示一下过程吗?
  • 程序的来源有帮助吗?
  • 请其他人确认此行为吗?我真的很绝望。
  • 我无法重现它(MySQL 5.7.17)。这种行为看起来很奇怪。可能是一个错误。
  • 你有什么版本的phpMyAdmin?

标签: mysql phpmyadmin


【解决方案1】:

好的,现在我确定了,这是 phpMyAdmin 的一个错误。我报告了两个错误:

  1. 存储过程中的 cmets 在导入期间和 SQL 文本区域中被删除
  2. 导出过程中删​​除了 cmets 后的新行,这会导致过程源代码的破坏:

所以,这个:

-- comment
SELECT 1;

变成这样:

-- comment SELECT 1;

这些是报告的错误和他们制作的两个补丁的链接:

  1. https://github.com/phpmyadmin/phpmyadmin/issues/11717
  2. https://github.com/phpmyadmin/phpmyadmin/issues/13139

第二个将是 4.7.1 版本的一部分,第一个尚未经过审核(截至 2017 年 3 月 4 日 9:25),但两个补丁都可以工作。

感谢大家的帮助。

【讨论】:

    【解决方案2】:

    您的问题很常见,并且有一个简单的解决方案。 您应该将 cmets 放在过程主体内,即 BEGINEND 之间的内容。其余代码是创建过程的说明,一旦运行它们就会丢失。

    cmets 的语法是:

    1. /* ..... */
    2. --内容

      BEGIN
      /*Comments*/
      --Comments
      END
      

    如果这不起作用,试试这个:

    PhpMyAdmin 中,选择与您相关的数据库后,单击左侧的wp_comments 表。

    这将显示与您的 cmets 关联的所有记录。如您所见,每个都附加了许多字段。如果您向右滚动,您会看到一个名为 comment_approved 的字段,其值为 10

    Pending cmets 的值为 0,已批准的 cmets 为 1。因此,要删除 WordPress 中所有待处理的 cmets,我们只需指定 comment_approved 值为 1 的记录即可阻止它删除它们。

    还要检查是否存在清除wp_comments 表的查询。

    【讨论】:

    • 查看我的示例存储过程。我总是将 cmets 放在 begin/end 内。它们在导入或使用 SQL textarea 期间无论如何都会被删除。
    • @Zelda 试试这个
    • 还有一件事 - 虚线注释的语法是“--comment”:两个破折号后跟一个空格。否则视为语法错误。
    • @Zelda 嘿伙计,我最近试过了。尝试将 cmets 放在 BEGIN 和 END 之外。至少让我们确认这是否可行。
    猜你喜欢
    • 1970-01-01
    • 2020-02-26
    • 1970-01-01
    • 2014-09-29
    • 1970-01-01
    • 2018-08-22
    • 1970-01-01
    • 2016-12-02
    • 1970-01-01
    相关资源
    最近更新 更多