2011-12-28 40 views
1

我正在試圖製作一個簡單的搜索功能,它將從列中選擇並顯示所有內容。準備好的語句中的動態列表

if(isset($_GET["search"]) && ($_POST["filter"] != "all")) { 
    $filter = $_POST["filter"]; 
    $sql = "SELECT :table FROM johnson LIMIT 0,30"; 
    $stmt = $dbh->prepare($sql); 
    $stmt->bindValue(":table", $filter, PDO::PARAM_STR); 
    $stmt->execute(); 
} 

這段代碼似乎正常工作。

然後我試圖來顯示數據:

<?php } else if($filter != "all") { ?> 

<tr> 
    <td><?php echo $row["$filter"]; ?></td> 
</tr> 

<?php 
} 

$filter用正確的數據庫列對應,就像如果$filter == 'email',它應該是SELECT email FROM johnson

結果呢?查詢數據庫之後,它只是循環的列名,如:

email 
email 
email 
email 

而且不[email protected]等的哪些錯誤?使用PDO::FETCH_ASSOC

它甚至可以在硬編碼時使用,而不是使用:table

回答

1

恐怕這是準備好的陳述的限制。

如果你綁定一個變量,它會在另一端看到一個字符串 - 這就是爲什麼你的結果總是「電子郵件」,而不是電子郵件coloumn。
同樣的原因是你爲什麼cannot use a variable for the order by field

+0

因此沒有解決方法?我只需要對每列有1個查詢?比如「SELECT email FROM ...」,「SELECT employee FROM ...」等等? :/ – DreamHawk

+1

@DreamHawk不,只需列出像'SELECT email,foo,bar FROM table'這樣的列。 – Bojangles

+0

好吧,我做了一個簡單的開關箱,開關($ filter) - 電子郵件 - >選擇電子郵件從...,並且工作!謝謝 :) – DreamHawk