2015-03-19 83 views
0

我試圖使用fuelphp生成數據庫查詢。爲什麼fuelphp生成不正確的查詢

$query = DB::query("SELECT LCASE(:field) FROM :table WHERE :field = :val AND 'id' != :id"); 

$query->bind('field',$field); 
$query->bind('table',$table); 
$query->bind('val',$val); 
$query->bind('id',$id); 

$result = $query->execute(); 

我的代碼返回此MySQL查詢:

SELECT LCASE('short_code') FROM 'events' WHERE 'short_code' = 'uvt2015' AND 'id' != '0` 

這給了我這個錯誤

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'events' WHERE 'short_code' = 'uvt2015' AND 'id' != '0' 

當我更換身邊的列名的單引號我這樣的語句,給了我我想要的結果。

SELECT LCASE(`short_code`) FROM `events` WHERE `short_code` = 'uvt2015' AND `id` != '0' 

爲什麼fuelphp使用錯誤的引號生成查詢?我懷疑這可能是與我的fuelphp/php/mysql版本有關的錯誤。

  • PHP版本:5.5.12
  • MySQL版本:5.6.17
  • FuelPHP版本:1.7.2

回答

1

不能在表名綁定在準備語句中的參數。它將作爲一個字符串進行處理,因此這個名稱周圍有單引號。

,你必須使用:

$query = DB::query("SELECT LCASE($field) FROM `$table` WHERE $field = :val AND 'id' != :id"); 
+0

所以完整的查詢應該是: $查詢= DB ::查詢(「SELECT LCASE('$ field')FROM'$ table'其中'$ field' =:val AND'id'!=:id「); ? – Fester 2015-03-19 09:28:01

+1

是的,應該是。 – Jens 2015-03-19 09:28:43

+0

啊,是的,確實做到了! – Fester 2015-03-19 09:31:38

相關問題