簡體   English   中英

PHP PDO:為什么在sql語句中導致此錯誤?

[英]PHP PDO: Why cause this error in sql statement?

好吧,我不明白為什么不正確執行這一行:

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

您只能對值使用綁定參數,而不能使用列名稱。

在這種情況下,您需要做的是在sql語句中使用普通變量,並根據允許列名的白名單檢查該變量。

SET `{$checked_against_whitelist_column_name}` = :valor

您不應該“綁定”列名稱。 你在哪里

SET :tipo = :valor

這不是合適的sytnax。 相反

SET tipo=:valor

你有它

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM