PHP PDO : Why cause this error in sql statement?

标签 php sql pdo

我不明白为什么不能正确执行这一行:

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

最佳答案

问题是:

SET :tipo = :valor

您只能对值使用绑定(bind)参数,不能对列名使用绑定(bind)参数。

在这种情况下,您需要做的是在您的 sql 语句中使用一个普通变量,并根据允许的列名白名单检查该变量。

SET `{$checked_against_whitelist_column_name}` = :valor

关于PHP PDO : Why cause this error in sql statement?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12232688/

相关文章:

php - 创建在网页上显示Codeigniter日志文件的页面

error-handling - PHP error_log错误到MySQL

php - 我可以在 PHP 中混合使用 MySQL API 吗?

php - PDO 在 pgsql 与 mysql 中准备语句

php - 使用捆绑信息发现无效或未找到证书颁发机构

java - hibernate 条件 : hibernate left join without association

mysql - SQL 查询分配

sql - 查询显示今天在 postgres 中输入的记录(纪元时间)

php - 使用 PHP/PDO 存储数据的安全性

php - 在 laravel 中对齐 Bootstrap 网格