我正在使用PHP与MySQL进行游戏,我需要一个UPDATE查询,其中字段名称可以从一个用户更改为另一个用户。
我的代码是:
$upd = $sql->prepare("UPDATE empire_users SET :p = :p + :p2 WHERE id = :id");
$upd->execute(array(
':p' => "p".$type,
':p2' => 10,
':id' => $_SESSION["id"]
));
在我的数据库中,用户有3列:pwood,pstone,pwheat,$ type只能是“wheat”,“stone”或“wood”。
我想更新所选字段(取决于$ type)以增加p2(此处为10)。
答案 0 :(得分:2)
请参阅http://php.net/manual/fr/pdo.prepare.php,特别是以下评论:
有些人想知道为什么在占位符周围添加引号是错误的,以及为什么你不能使用占位符来表或列名:
关于预处理语句中的占位符如何工作存在一个常见的误解:它们不是简单地替换为(转义的)字符串,而是执行生成的SQL。相反,DBMS要求"准备"一个语句提供了一个完整的查询计划,用于说明它将如何执行该查询,包括它将使用哪些表和索引,无论你如何填写占位符,它都是相同的。
" SELECT name FROM my_table WHERE id =:value"无论你用什么代替":value",但看似相似的" SELECT名称FROM:表WHERE id =:value"无法规划,因为DBMS不知道您实际要从哪个表中进行选择。
答案 1 :(得分:0)
感谢您的回答,我更正了:
$upd = $sql->prepare("UPDATE empire_users SET p".$type." = p".$type." + :p2 WHERE id = :id");
$upd->execute(array(
':p2' => 10,
':id' => $_SESSION["id"]
));