2011-01-19 88 views
4

我遇到了mysqli_stmt準備函數的一個小問題。這裏是我的查詢:Mysqli準備語句+綁定順序BY

$params = array(
    "sisi", 
    "some_string", 
    5000, 
    "date_added DESC" 
); 

$sql = "SELECT * 
     FROM scenes 
     WHERE scene_title LIKE ? 
     AND scene_id > ? 
     ORDER BY ? 
     LIMIT ?"; 

現在,當我的PARAMS綁定到這樣的陣列(我有一個實例有效mysqli_stmt對象):由

call_user_func_array(array($this->mysql_stmt, 'bind_param'), $params); 

順序沒有綁定。我在php.net閱讀(http://ca3.php.net/manual/en/mysqli.prepare.php

的標誌是僅在SQL語句一定 地方法律。例如, 它們可以在INSERT語句的VALUES()列表 (用於指定行的列值 )或與WHERE 子句中的列進行比較以指定比較值。

然而,他們沒有允許 標識符(如表或列 名),在名稱 列由一個SELECT 語句返回,或者指定兩個操作數的二進制的 選擇列表運算符如= 等號。

有沒有辦法解決這個問題,或者我將不得不使用mysql_real_escape_char()作爲ORDER BY子句?

回答

0

作爲php.net鏈接,你發現狀態,你不能使用綁定變量的標識符。你需要一個解決方法。 mysql_real_escape_char肯定是一種方法。

+0

Bah,是的,我會強制應用程序開發人員使用我的db類的函數來設置這些屬性。我想讓mysqli prepare語句處理用戶定義輸入的所有消毒。 – gprime 2011-01-20 16:20:32