准备好的语句中的动态列列表

时间:2011-12-28 10:53:36

标签: php mysql pdo

我正在尝试创建一个简单的搜索功能,它将从列中选择并显示所有内容。

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

1 个答案:

答案 0 :(得分:1)

我担心这是对准备好的陈述的限制。

如果你绑定一个变量,它会在另一端被有效地看作一个字符串 - 这就是为什么你的结果总是“电子邮件”而不是电子邮件颜色。
同样的原因是为什么你cannot use a variable for the order by field