好吧,我不明白为什么不能正确执行这一行:
try {
$sql = "UPDATE t_perfiles_permisos
SET :tipo = :valor
WHERE Area_Permiso = :area AND Id_Perfil = :idp";
$result = $this->dbConnect->prepare($sql) or die ($sql);
$result->bindParam(':tipo',$this->tipo,PDO::PARAM_STR);
$result->bindParam(':valor',$this->valor,PDO::PARAM_INT);
$result->bindParam(':area',$this->area,PDO::PARAM_STR);
$result->bindParam(':idp',$this->idp,PDO::PARAM_INT);
$result->execute();
} catch (PDOException $e) {
echo "Error!! No se puede establecer el permiso: ".$e->getMessage()."<br/>";
return false;
}
错误:
Error!! No se puede establecer el permiso: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''Buscar' = '1' WHERE Area_Permiso = 'Perfiles' AND Id_Perfil = '4'' at line 2
答案 0 :(得分:2)
问题是:
SET :tipo = :valor
您只能对值使用绑定参数,而不能使用列名。
在这种情况下,您需要做的是在sql语句中使用普通变量,并根据允许列名的白名单检查该变量。
SET `{$checked_against_whitelist_column_name}` = :valor
答案 1 :(得分:0)
您不应该“绑定”列名。你在哪里
SET :tipo = :valor
这不是合适的sytnax。而是做
SET tipo=:valor
并且你有它