2012-09-02 112 views
3

好吧,我不明白为什么不正确执行这一行:PHP PDO:为什么在sql语句中导致这个错误?

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 

回答

2

的问题是:

SET :tipo = :valor 

您只能使用值绑定参数,而不是列名。

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

SET `{$checked_against_whitelist_column_name}` = :valor 
+1

当然......我固定的:SET $这个 - > TIPO =:勇气...谢谢! – SoldierCorp

0

您不应该是“绑定”列名称。你在哪里

SET :tipo = :valor 

这是不适当的sytnax。相反,做

SET tipo=:valor 

和你有它

相关问题