【问题标题】:medoo select term doesn't work correctmedoo 选择术语不正确
【发布时间】:2015-08-28 08:09:07
【问题描述】:

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

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

感谢您的帮助。

【问题讨论】:

  • 第二个代码块是正确的,在第一个代码块中您使用了不正确的引号。使用第二个有什么问题?
  • 第一个块是db框架medoo的输出..所以我不能改变它......
  • 似乎很难相信框架会生成这样的损坏代码,您确定它不是来自您在某处使用附加引号初始化字段吗?
  • 不。它是框架。该框架设置了mysql的一个选项,将双引号转换为一个反引号。但是这个转换在我的服务器上不起作用。我不知道为什么.. 它不是托管服务器,所以我无法更改 mysql 的设置。也许这就是问题所在..

标签: mysql medoo


【解决方案1】:

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

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

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

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

【讨论】:

  • 是的,这就是 medoo 框架中的开关盒!我也找到了。我想我必须切换框架。你能推荐一个非常小的数据库框架吗?它应该使用mysqli ..谢谢你的回答。午饭后我会检查它是否正确。
  • 也许还有一条评论。如果我在 phpmyadmin 中输入 SET 命令和我的 SQL 查询(带有双引号的 SQL),它可以正常工作。
  • 您是否在 phpMyAdmin 和您的脚本中使用相同的登录凭据?然后很奇怪它不起作用
  • 是的,它是相同的登录数据。如果我尝试像设置全局 SQL_MODE 一样设置全局注释...它不起作用。我的权限被拒绝。
  • 这不是权限被拒绝。你能显示你正在使用的确切语法吗?
【解决方案2】:

如果 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 . '`';
}

【讨论】:

    猜你喜欢
    • 2015-08-27
    • 2020-10-30
    • 2019-10-24
    • 2011-03-10
    • 2012-04-08
    • 1970-01-01
    • 1970-01-01
    • 2012-09-21
    • 1970-01-01
    相关资源
    最近更新 更多