2017-07-01 60 views
-1

我曾嘗試下面執行代碼,但是當我嘗試var_dump $query我有下:... { ["queryString"]=> string(44) "SELECT * FROM帖子WHERE :where LIMIT 15;" }Pdo->準備,bindParam不起作用

代碼:

$query = Main::$data_base->pdo->prepare(

    'SELECT ' . $fields . ' ' . 
    'FROM `posts` ' . 
    'WHERE :where ' . 
    'LIMIT ' . $posts_quantity . ';' 
); 

$query->bindParam(':where', $where, PDO::PARAM_STR); 

$query->execute(); 
+2

您無法綁定表名,列名或完整的where子句。準備將用於編譯的查詢代碼傳遞給數據庫。當您不知道查詢的基本內容時,您無法編譯查詢 – RiggsFolly

+1

[如何使用準備好的PDO語句設置ORDER BY參數?](https://stackoverflow.com/questions/2542410/how-do- i-set-order-by-params-using-prepared-pdo-statement)這個問題的答案在這個頁面上的答案的解釋中。 – mickmackusa

回答

0

結合已與鍵值對來完成:

正確:

where a=:value 

在哪個值當然可以是任何名稱(不要使用保留的關鍵字出於對未來開發者的禮貌)。

與參數綁定是不允許更換查詢的完整部分:

where :my_where_clause 

隨着:my_where_clausea=b是不允許的。其原因是參數綁定是針對那個時候立即轉義的參數進行防止SQL注入的,這對於my_where_clause方法來說是不可能的。