我有一个变量($q=$_GET["q"];
),我想用它运行准备好的语句。它包含我的数据库表的列名。PDO - 准备好的语句不处理变量的权利
该变量的值来自下拉列表。当我运行以下代码时,输出是在列表中选择的确切值。所以它只是一个列名。
$q=$_GET["q"];
$dsn = "mysql:host=$host;port=$port;dbname=$database";
$db = new PDO($dsn, $username, $password);
$sql = "SELECT DISTINCT ? FROM repertoire";
$stmt = $db->prepare($sql);
$stmt->execute(array($q));
echo "<select>";
while ($row = $stmt->fetchObject()) {
echo "<option>";
echo "{$row->{$q}}";
echo "</option>";
}
echo "</select>";
然而,当我改变此行$sql = "SELECT DISTINCT ? FROM repertoire";
到$sql = "SELECT DISTINCT ".$q." FROM repertoire";
的我从数据库中获取所需的行...
我不是用PHP那么好,所以我想这我的语法在某个地方是错误的。
非常感谢您的帮助。
的可能重复[灿PHP PDO语句接受表名作为参数?](http://stackoverflow.com/questions/182287/can-php-pdo-statements-accept-the-table-name-as-参数) – hakre 2012-07-08 23:48:38
当我看到这些类型的问题时,不禁要问,从用户输入中需要什么类型的应用程序来获取表和/或列名。 – Mahn 2012-07-09 00:00:38