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 内の問題のようです。この問題を見ているのはあなただけではありません ( 12 )。このバグ レポートによると、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_QUOTESMySQL が再起動し、再度実行する必要がある場合は無効になります。

または、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 に答える