2013-07-19 56 views
0

我試圖參數化列以創建一個非常動態的查詢。 我的嘗試是:準備與字段作爲參數奇怪的結果

$db = new PDO("mysql:host=".$this->host.";dbname=myDB",$this->user,$this->pass);  
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$arr = array("g"=>"My Date","p"=>"Prono Score","a"=>"Age"); 
$param = ""; 
foreach($arr as $key=>$value) $param.=(':'.$key.','); 
$param = substr($param, 0,count($param)-2); 
$query = $db->prepare("SELECT $param FROM myTable LIMIT 1"); 
foreach($arr as $key=>$value) $query->bindValue($key,$value); 
$query->execute(); 
$res = $query->fetchAll(PDO::FETCH_ASSOC); 
return $res; 

有了這樣的結果:

Array 
(
    [0] => Array 
     (
      [My Date] => My Date 
      [Prono Score] => Prono Score 
      [Age] => Age 
     ) 

) 

什麼是我的錯誤?我不知道爲什麼會發生。

回答

0

這一行你的綁定佔位叫gpa您選擇字段

$query = $db->prepare("SELECT $param FROM myTable LIMIT 1"); 

然後你這一行分配給它文字值

foreach($arr as $key=>$value) $query->bindValue($key,$value); 

你真的執行了一個名爲查詢

"Select 'My Date', 'Prono Score', 'Age' FROM myTable LIMIT 1" 
+0

如果我選擇bindPara結果是:Array([0] => Array([Age] => Age)),我該如何改變? – JackTurky

+0

你只能綁定字面值而不是列名,字面值可以綁定到php變量,它們用在where子句或存儲過程中(IN/OUT) – DevZer0

+0

=沒有解決方案嗎? :( – JackTurky