medoo选择术语不正确

时间:2015-08-28 08:09:07

标签: mysql medoo

我有调试模式并获取此

mySQL字符串:

SELECT "dmd_key","id" 
FROM "keys" 
WHERE "dmd_key" = '140ec37b981042c8549b07d6d4589295' 
  AND "website" = 'test.de'

但那根弦不适合我。我收到数据库错误消息。 (标准信息..)

如果我将我的字符串更改为:

SELECT `id`,`dmd_key` 
FROM `keys` 
WHERE `dmd_key` = '140ec37b981042c8549b07d6d4589295' 
  AND `website` = 'test.de'

我得到了结果。 我想我必须在我的设置中改变一些东西,但我不知道是什么。

这是我第一次使用medoo,我觉得medoo并不爱我...

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

这似乎是Medoo中的一个问题。您不是唯一一个看到此问题的人(12)。根据{{​​3}},Medoo创建了mySQL代码,用双引号转义表名,然后更改mySQL选项以满足它:

case 'mysql':
    // Make MySQL using standard quoted identifier
    $commands[] = 'SET SQL_MODE=ANSI_QUOTES';

您的网络主机上似乎禁用了此选项,导致您的环境无法使用Medoo。

很难说出这是多么疯狂。框架应生成与其运行的数据库兼容的SQL。我会切换到另一个框架。

答案 1 :(得分:0)

如果MySQL重新启动并且需要再次执行它,

SET SQL_MODE=ANSI_QUOTES将变为无效。

或者您可以转到medoo.php并更新函数以使用反引号,如下所示:

protected function table_quote($table)
{
    return '`' . $this->prefix . $table . '`';
}

protected function column_quote($string)
{
    preg_match('/(\(JSON\)\s*|^#)?([a-zA-Z0-9_]*)\.([a-zA-Z0-9_]*)/', $string, $column_match);

    if (isset($column_match[ 2 ], $column_match[ 3 ]))
    {
        return '`' . $this->prefix . $column_match[ 2 ] . '`.`' . $column_match[ 3 ] . '`';
    }

    return '`' . $string . '`';
}