我正在尝试使用PDO更新MySQL中字段的值,我尝试使用不同类型的预处理语句,但没有一个工作。 这是我的代码:
$table = $_POST['table'];
$field = $_POST['field'];
$value = $_POST['value'];
try{
$available = "Available";
$cero = 0;
$q = "UPDATE ? SET $available = $cero WHERE ? = ? ";
$stmt = $connection->getPdo()->prepare($q);
$stmt->execute( array ($table,$field,$value) );
echo true;
}catch(PDOException $exception){
echo $exception;
}
解决问题:
$q = "UPDATE $table SET $available = $cero WHERE $field = ? ";
$stmt = $connection->getPdo()->prepare($q);
$stmt->execute( array ($value) );
答案 0 :(得分:2)
您不能使用?
替换准备好的查询中的表名,或实际上任何对象名(列,数据库等)。参数化仅适用于值。你必须这样做:
$q = "UPDATE $table SET $available = $cero WHERE $field = ? ";
$stmt = $connection->getPdo()->prepare($q);
$stmt->execute( array ($value) );
您尝试这样做的事实表明您从用户输入获取表名,这是一个非常坏主意,即使您正在逃避它。