php是否将撇号添加到函数的默认参数中?如果是的话,我怎么能阻止它呢?

时间:2013-10-30 11:45:48

标签: php mysql sql

这是我的功能。一个简单的函数,它有一个传递给查询的默认参数。但问题是当表名在撇号中时,sql将其视为字符串而不是表。

function toggleStatus($id, $table=content){
    try{
        $stmt = $this->db->prepare('UPDATE :table SET status = status+1 WHERE id=:id');
        $stmt->execute( array( "table"=> $table, "id"=> $id ) ); 
    }catch(PDOException $e){
        $debug .= "<br> ERROR:".$e->getMessage();
    }   
}

由于此查询,我收到此错误:

  

错误:SQLSTATE [42000]:语法错误或访问冲突:1064您有   SQL语法中的错误;查看与您的手册相对应的手册   MySQL服务器版本,用于在“内容”SET附近使用正确的语法   status = status + 1 WHERE id = '82''在第1行

PS:当我删除参数并手动编写它然后它工作。

1 个答案:

答案 0 :(得分:3)

默认情况下,您无法参数化列名,表名或任何非值的名称。设计参数以清理sql语句中的值。

当您将tablename作为参数传递时,它将用单引号

包围
UPDATE 'content' ....

导致语法错误。尝试使用检查有效表名的函数并将其与update语句连接。例如,

$tableName = yourFunction('content');
$stmt = $this->db->prepare("UPDATE $tableName SET status = status+1 WHERE id=:id");

用户定义允许您传递标识符的类safemysql