我正在尝试创建一个简单的搜索功能,它将从列中选择并显示所有内容。
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
。
答案 0 :(得分:1)
我担心这是对准备好的陈述的限制。
如果你绑定一个变量,它会在另一端被有效地看作一个字符串 - 这就是为什么你的结果总是“电子邮件”而不是电子邮件颜色。
同样的原因是为什么你cannot use a variable for the order by
field。