2015-08-28 78 views
0

我有調試作案,並得到這個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不愛我......

感謝您的幫助。

+0

第二個代碼塊是正確的,在您使用不正確引用的第一個。使用第二個問題有什麼問題? –

+0

第一塊是db framwork medoo的輸出..所以我不能改變它... – cgee

+0

似乎很難相信框架會產生這樣的破碎的代碼,你確定它不是來自你的用附加引號初始化字段? –

回答

1

這似乎是在Medoo內的一個問題。你不是唯一看到問題的人(12)。據this bug report,Medoo創建逃脫表名用雙引號MySQL的代碼,然後改變MySQL的選項,以滿足它:

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

此選項似乎您的虛擬主機上被禁用,渲染Medoo在無法使用您的環境。

這很難說出這是多麼瘋狂。框架應該生成與其運行的數據庫兼容的SQL。我會切換到不同的框架。

+0

是的,這是medoo framwork中的開關盒!我也找到了。 我想我必須切換框架。你能推薦一個真正的小型數據庫框架?它應該使用mysqli .. 謝謝你的回答。午餐後我會檢查它是否正確。 – cgee

+0

也許一個評論更多..如果我在phpmyadmin(雙引號SQL)中輸入SET命令和我​​的SQL查詢,它工作正常。 – cgee

+0

您是否在phpMyAdmin和腳本中使用相同的登錄憑據?然後奇怪它不起作用 –

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