[英]Dynamic column list in prepared statement
我正在嘗試制作一個簡單的搜索功能,該功能將從一欄中選擇並顯示所有內容。
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
而不是foo@bar.com
等。怎么了? 使用PDO::FETCH_ASSOC
。
甚至在不使用:table
硬編碼時也可以使用。
恐怕這是准備好的陳述的局限性。
如果您綁定變量,則該變量將在另一端有效地視為字符串-這就是為什么您的結果始終為“電子郵件”而不是電子郵件列的原因。
同樣的原因也是為什么您不能使用變量作為order by
字段的原因 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.