首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用动态字段更新MySQL

用动态字段更新MySQL
EN

Stack Overflow用户
提问于 2017-06-27 19:37:49
回答 2查看 1.4K关注 0票数 0

我正在用MySQL制作一个游戏,我需要一个更新查询,在这个查询中,字段名可以从一个用户更改到另一个用户。

我的代码是:

代码语言:javascript
复制
$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、p小麦和$type,它们只能是“小麦”、“石头”或“木头”。

我想更新所选字段(这取决于$type),以增加p2 (这里是10)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-27 19:51:53

请参见http://php.net/manual/fr/pdo.prepare.php,特别是下面的评论:

“对于那些想知道为什么在占位符周围添加引号是错误的,以及为什么不能将占位符用于表或列名:

对于准备好的语句中的占位符是如何工作的,有一种常见的误解:它们不是简单地在as (转义)字符串中被替换,并且得到的SQL被执行。相反,被要求“准备”语句的DBMS提出了一个完整的查询计划,说明它将如何执行该查询,包括它将使用哪些表和索引,不管您如何填写占位符,它们都是相同的。

"SELECT name FROM my_table,id = :value“的计划将与替代":value”的计划相同,但似乎类似的"SELECT name :table = :value“无法计划,因为DBMS不知道您实际上要从哪个表中选择。

票数 2
EN

Stack Overflow用户

发布于 2017-06-28 13:35:24

谢谢你的回答,我改正了:

代码语言:javascript
复制
$upd = $sql->prepare("UPDATE empire_users SET p".$type." = p".$type." + :p2 WHERE id = :id");
$upd->execute(array(
    ':p2' => 10,
    ':id' => $_SESSION["id"]
));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44788504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档