2013-01-05 54 views
0

我在寫一個帶有兩個參數的函數,第一個是用戶的id(默認爲%),第二個是應檢索哪些字段(默認爲*)。第一個參數工作正常,但由於某種原因,當我嘗試使用星號作爲準備語句的參數值時,我得到了奇怪的結果(如下所示)。我有什麼理由不能在準備好的聲明中使用星號,但可以使用百分號?我的函數如下所示:在PDO準備語句中使用星號作爲值

public function getMembers($id = '%', $fields = '*') { 
    $sql = 'SELECT ? 
     FROM members 
     WHERE members.member_id LIKE ?;'; 

    return $this->executeQuery($sql, array($fields, $id)); 
} 

而這裏的executeQuery功能:

public function executeQuery($query, array $parameters = array(), $fetch_type = PDO::FETCH_ASSOC) { 
    $result = array(); 

    $sth = $this->handle->prepare($query); 

    if($sth->execute($parameters)) { 
     while($row = $sth->fetch($fetch_type)) { 
      array_push($result, $row); 
     } 
    } 

    return $result; 
} 

最後的結果,如果我使用默認的星號:

Array 
(
    [0] => Array 
     (
      [*] => * 
     ) 

) 

回答

1

參數表現爲值。字段名稱標識,沒有價值,所以你在做什麼結束像個:

SELECT '*' FROM ... 

這是當然的,無用的。

如果您需要將字段名稱傳遞到PDO查詢中,則需要適當地轉義它們並將它們插入到查詢中。不過,理想情況下,您的代碼的結構應該是這樣,這是沒有必要的。

+0

啊哈,這很有道理。我想我必須想出一個不同的方法來允許用戶定製他們想要的功能。要麼或者只是轉儲所有的字段,並允許他們過濾出他們想要的數據。謝謝您的幫助。 – KylePlusPlus