0

我有调试模式并得到这个

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

谢谢你的帮助。

4

2 回答 2

1

这似乎是 Medoo 内部的一个问题。您不是唯一看到此问题的人 ( 1 , 2 )。根据这个错误报告,Medoo 创建了用双引号对表名进行转义的 mySQL 代码,然后更改了一个 mySQL 选项以适应它:

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

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

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

于 2015-08-31T10:04:08.430 回答
0

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 . '`';
}
于 2016-08-17T06:28:40.187 回答