2

当我使用 phpMyAdmin 执行查询时,返回的任何错误都缺少错误描述。返回的错误只是:

#1064 -

phpMyAdmin 缺少错误描述

...而不是预期的:

#1064 - You have an error in your SQL syntax; check the manual...

我的 PHP 代码使用mysql_error().

我花了 2 天时间在 Google 和 SO 上寻找解决方案的答案,但找不到。因此,以供我自己和其他任何寻找此问题答案的人将来参考,我将在这里回答。如果您有更好的解决方案,请添加您的答案。

4

1 回答 1

1

我最终发现了一个相关的问题PHPMyadmin does not show mysql error messages。我会说我不明白如何用这个答案解决问题。我确实注意到@anomie 指出:

如果 mysql_error 有效,那么问题似乎更可能出PMA_DBI_convert_message在 library/database_interface.lib.php中 phpMyAdmin 的字符集转换函数中

我在 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',现在可以正确显示完整的错误描述。

我不确定是否还有其他编码问题可能导致其他功能丢失文本,但这至少解决了我的问题。

于 2013-02-28T12:30:52.080 回答