这是我的函数。 一个简单的函数,它有一个传递给查询的默认参数。 但问题是,当表名在撇号中时,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附近使用的正确语法 状态 = 状态+1 其中 id='82'' 在第 1 行
PS:当我删除参数并手动编写它时,它可以工作。
默认情况下,不能参数化列名、表名或任何非值的内容。参数旨在清理 sql 语句中的值。
当您将表名作为参数传递时,它用单引号括起来,
UPDATE 'content' ....
导致触发语法错误。尝试使用一个函数来检查有效的表名并将其与更新语句连接起来。例如,
$tableName = yourFunction('content');
$stmt = $this->db->prepare("UPDATE $tableName SET status = status+1 WHERE id=:id");
用户定义类,允许您传递标识符,safemysql