【问题标题】:How do I IGNORE TABLE and Change ID in MySQL?如何在 MySQL 中忽略 TABLE 并更改 ID?
【发布时间】:2017-12-05 02:43:14
【问题描述】:

在我的网站上安装插件后出现以下错误消息。我想知道要运行什么查询来解决 MYSQL/PhpMyadmin 的这个问题?

Zend_Db_Statement_Mysqli_Exception:Mysqli 准备错误:你有一个 SQL 语法错误;检查与您对应的手册 在'IGNORE TABLE `xf_trophy_category` DROP PRIMARY KEY , CHANGE `trophy_category_id`' 附近使用正确语法的 MySQL 服务器版本 在第 1 行 - library/Zend/Db/Statement/Mysqli.php:77

更新。

这是堆栈跟踪。我已经询问了插件开发人员,但他们没有处理。

0 /home/admin/web/.com/public_html/library/Zend/Db/Statement.php(115):

Zend_Db_Statement_Mysqli->_prepare('ALTER IGNORE TA...')

1 /home/admin/web/.com/public_html/library/Zend/Db/Adapter/Mysqli.php(381):

Zend_Db_Statement->__construct(Object(Zend_Db_Adapter_Mysqli), 'ALTER 忽略TA...')

2 /home/admin/web/.com/public_html/library/Zend/Db/Adapter/Abstract.php(478):

Zend_Db_Adapter_Mysqli->prepare('ALTER IGNORE TA...')

3 /home/admin/web/.com/public_html/library/Waindigo/Install/20150313.php(758):

Zend_Db_Adapter_Abstract->query('ALTER IGNORE TA...')

4 /home/admin/web/.com/public_html/library/Waindigo/Install/20150313.php(216):

Windigo_Install->_makeTableChanges(Array)

5 /home/admin/web/.com/public_html/library/Waindigo/Install/20150313.php(88):

Windigo_Install->_install(Array, Object(SimpleXMLElement))

6 /home/admin/web/.com/public_html/library/XenForo/Model/AddOn.php(214):

Windigo_Install::install(false, Array, Object(SimpleXMLElement))

7 /home/admin/web/.com/public_html/library/XenForo/Model/AddOn.php(169):

XenForo_Model_AddOn->installAddOnXml(Object(SimpleXMLElement), false)

8 /home/admin/web/.com/public_html/library/XenForo/ControllerAdmin/AddOn.php(188):

XenForo_Model_AddOn->installAddOnXmlFromFile('/home/admin/tmp...')

9 /home/admin/web/.com/public_html/library/XenForo/FrontController.php(351):

XenForo_ControllerAdmin_AddOn->actionInstall()

10 /home/admin/web/.com/public_html/library/XenForo/FrontController.php(134):

XenForo_FrontController->dispatch(Object(XenForo_RouteMatch))

11 /home/admin/web/.com/public_html/admin.php(13): XenForo_FrontController->run()

12 {主}

【问题讨论】:

  • 您能否添加首先引发此错误的查询?
  • 您可能需要询问插件开发人员。您确定您的设置符合他们的最低要求吗?
  • 嗨,我添加了堆栈跟踪。对这个问题的任何建议都会有所帮助。感谢您的帮助。
  • 您真的在运行 phpMyAdmin 时遇到此错误吗?它看起来像是来自某个自定义应用程序的错误消息,而不是 phpMyAdmin 应用程序。

标签: php mysql mysqli phpmyadmin


【解决方案1】:

要么该插件与 MySQL 5.7 不兼容,要么编写代码的人显然不知道 ALTER IGNORE 在 MySQL Server 5.6 中已被弃用,并且已在 MySQL Server 5.7 中完全删除。这总是一个坏主意,因为它促进了草率的数据库管理。

IGNORE 是标准 SQL 的 MySQL 扩展。它控制ALTER TABLE 在新表中的唯一键上存在重复项或启用严格模式时出现警告时的工作方式。如果未指定IGNORE,则如果发生重复键错误,副本将中止并回滚。如果指定了IGNORE,则仅使用在唯一键上有重复的行中的一行。其他冲突的行被删除。不正确的值将被截断为最接近的匹配可接受值。

从 MySQL 5.6.17 开始,IGNORE 子句已弃用,使用它会产生警告。 IGNORE 在 MySQL 5.7 中被移除。

https://dev.mysql.com/doc/refman/5.6/en/alter-table.html

错误是指the correct syntax to use near 'IGNORE ...',服务器告诉你遇到了IGNORE,它是无效的。之前的所有内容都被正确解析,之后的所有内容可能是对的,也可能是错误的,但这无法确定,因为遇到了意想不到的事情。

如果我正确阅读了您的堆栈跟踪,它就在这里:

3 
/home/admin/web/.com/public_html/library/Waindigo/Install/20150313.php(758):
Zend_Db_Adapter_Abstract->query('ALTER IGNORE TA...')

从Waindigo/Install/20150313.php 第758 行中删除单词IGNORE,使其以ALTER TABLE ... 开头。

【讨论】:

  • 非常感谢。你是对的。我正在使用 MySQL 5.7 并且 IGNORE 已贬值。我在 20150313.php 的 3 个不同行中从“ALTER IGNORE TABLE”中删除了 IGNORE,并且插件安装正常。我要感谢你花时间帮助我,我真的很感激。
【解决方案2】:

如果只有一个简单的查询就能解决问题,但在这种情况下,我怀疑这样的查询是不存在的。好消息是错误指向软件插件有问题。虽然插件中可能存在错误,但仔细研究错误消息会发现更可能的情况:软件冲突。

OP 声明当前设置使用 PHPMyAdmin 和 MySQL。然而,在 PHP 的世界中,MySQL 现在被认为是过时的,并且敦促用户切换到 MySQLi。 Zend 的插件(可能是 ZendFramework?)显然期望 MySQLi 根据它引发的错误:

Zend_Db_Statement_Mysqli_Exception:Mysqli 准备错误:

根据discussion,如果你已经安装了 mysqli,你可能需要如下调整你的 PHP 配置文件:

$cfg['Servers'][$i]['extension'] = 'mysqli';

否则您可能只需要安装 MySQLi 即可使插件正常工作。

xerforo 提及的要求:

XenForo 系统要求 PHP: 5.2.11+ MySQL:5.0+ PHP 扩展: MySQLi、GD(支持 JPEG)、PCRE、SPL、SimpleXML、DOM、JSON、 iconv, ctype PHP 安全模式关闭

最后,您可能希望通过community 提出这个问题。

【讨论】:

  • 这是堆栈跟踪。我会问插件开发人员,但他们说他们不会这样做。
  • 您是否正确安装了 MySQLi 或仍在使用 MySQL?
  • 谢谢,我已经安装了 MySQLi,但问题是因为我使用的是 5.7 而不是 5.6 MySQL,并且 IGNORE 已贬值,正如@Michael - sqlbot 所解释的那样。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-07
  • 2020-02-04
  • 2022-06-23
  • 2013-10-31
  • 2020-01-18
  • 2011-04-19
相关资源
最近更新 更多