medoo select 术语不正确

medoo select term doesn't work correct

我打开了调试模式并得到了这个

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不爱我...

感谢您的帮助。

这似乎是 Medoo 中的一个问题。你不是唯一看到这个问题的人(1,). According to this bug report,Medoo 创建 mySQL 代码,用双引号转义 table 名称,然后更改 mySQL 选项以满足它:

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

此选项似乎在您的虚拟主机上被禁用,导致 Medoo 在您的环境中无法使用。

很难用语言来形容这有多疯狂。框架应该生成与其运行的数据库兼容的 SQL。我会切换到不同的框架。

SET SQL_MODE=ANSI_QUOTES如果MySQL重启就失效了,需要重新执行

或者您可以转到 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 . '`';
}