如何在MySQL中IGNORE TABLE和Change ID?

时间:2017-07-01 07:06:11

标签: php mysql mysqli phpmyadmin

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

  

Zend_Db_Statement_Mysqli_Exception:Mysqli准备错误:你有一个   SQL语法错误;查看与您的手册相对应的手册   MySQL服务器版本,以便在'IGNORE TABLE `xf_trophy_category` DROP PRIMARY KEY , CHANGE `trophy_category_id`'附近使用正确的语法   在第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   IGNORE TA ......')

     

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

     

Zend_Db_Adapter_Mysqli->准备('ALTER IGNORE TA ...')

     

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

     

Zend_Db_Adapter_Abstract->查询('ALTER IGNORE TA ...')

     

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

     

Waindigo_Install-> _makeTableChanges(阵列)

     

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

     

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

     

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

     

Waindigo_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( '/家庭/管理/ 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->调度(对象(XenForo_RouteMatch))

     

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

     

12 {main}

2 个答案:

答案 0 :(得分:2)

插件与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子句,并使用它生成警告。 MySQL 5.7中删除了IGNORE

     

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...')

IGNORE第758行删除单词Waindigo/Install/20150313.php,使其开始ALTER TABLE ...

答案 1 :(得分:0)

如果只是一个简单的查询会把事情做对,但在这种情况下,我怀疑这样的查询是不存在的。好消息是错误指向软件插件有问题。虽然插件中可能存在错误,但研究错误消息可能会提示更可能的情况:软件冲突。

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

  

Zend_Db_Statement_Mysqli_Exception:Mysqli准备错误:

根据这个discussion,您可能需要按照以下方式调整PHP配置文件,前提是您安装了mysqli:

$ 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 safe_mode off

最后,您可能希望使用此community提出此问题。