当我使用phpMyAdmin执行查询时,返回的任何错误都缺少错误描述。返回的错误只是:
#1064 -
...而不是预期的那个:
#1064 - You have an error in your SQL syntax; check the manual...
我的PHP代码正在使用mysql_error()
正确返回MySQL错误描述。
我花了两天时间在Google和SO上搜索答案,找不到解决方案。 因此,为了将来我自己和其他任何寻找这个问题答案的人参考,我将在这里回答。如果您有更好的解决方案,请添加您的答案。
答案 0 :(得分:1)
我最终找到了一个相关的问题PHPMyadmin does not show mysql error messages。我将说明我不明白如何用这个答案解决问题。我注意到@anomie声明:
如果mysql_error正常工作,那么问题似乎更可能出在php / database_interface.lib.php中phpMyAdmin的字符集转换函数
PMA_DBI_convert_message
中
我在libraries / database_interface.lib.php中找到了设置编码的部分:
function PMA_DBI_convert_message($message)
{
// latin always last!
$encodings = array(
'japanese' => 'EUC-JP', //'ujis',
'japanese-sjis' => 'Shift-JIS', //'sjis',
'korean' => 'EUC-KR', //'euckr',
'russian' => 'KOI8-R', //'koi8r',
'ukrainian' => 'KOI8-U', //'koi8u',
'greek' => 'ISO-8859-7', //'greek',
'serbian' => 'CP1250', //'cp1250',
'estonian' => 'ISO-8859-13', //'latin7',
'slovak' => 'ISO-8859-2', //'latin2',
'czech' => 'ISO-8859-2', //'latin2',
'hungarian' => 'ISO-8859-2', //'latin2',
'polish' => 'ISO-8859-2', //'latin2',
'romanian' => 'ISO-8859-2', //'latin2',
'spanish' => 'CP1252', //'latin1',
'swedish' => 'CP1252', //'latin1',
'italian' => 'CP1252', //'latin1',
'norwegian-ny' => 'CP1252', //'latin1',
'norwegian' => 'CP1252', //'latin1',
'portuguese' => 'CP1252', //'latin1',
'danish' => 'CP1252', //'latin1',
'dutch' => 'CP1252', //'latin1',
'english' => 'CP1252', //'latin1',
'french' => 'CP1252', //'latin1',
'german' => 'CP1252', //'latin1',
);
我将英语行更改为'english' => 'UTF-8',
,现在可以正确显示完整的错误说明。
我不确定是否还有其他编码问题导致其他功能丢失文字,但这至少解决了我的问题。