这个主题有很多提示,我试过这个:How to create a secure mysql prepared statement in php? 和许多其他人一样,但没有任何工作。如果我想从数据库中选择一些东西而不用参数进行查询,那就没问题了。但是,如果我想要一个带有参数的列和表的数据,它不起作用,它返回空数组。任何提示?
有我的代码:
function getDataByColumn($column, $table) {
try {
$connection = new PDO("mysql:dbname=vydap;charset=utf8;host=127.0.0.1", "...","...");
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
$query = "SELECT ? FROM ?";
// $query = "SELECT :column FROM :table";
$stmt = $connection->prepare($query);
// $stmt->bindParam(':column', $column);
// $stmt->bindParam(':table', $table);
$stmt->bindParam(1, $column);
$stmt->bindParam(2, $table);
$stmt->execute();
$result = $stmt->fetchAll();
var_dump($result);
}
答案 0 :(得分:2)
这是完全错误的:
$query = "SELECT ? FROM ?";
占位符只能代表 VALUES 。您不能对字段/表/数据库名称使用占位符 - 这些不是值 - 它们是识别符。
SELECT foo FROM bar WHERE foo = 'baz'
a b c d e f g h
a- sql keyword
b- field identifier
c- sql keyword
d- table identifier
e- sql keyword
f- field identifier
g- operator
h- value
在整个查询中,只有h
部分才是使用占位符的候选者。
答案 1 :(得分:0)
您不能在表名或列名上使用PDO占位符。这些仅用于值:
$query = "SELECT * FROM yourTable WHERE someCol = ?";
$stmt->bindParam(1, $value);