php - 使用带有 MySQL 查询变量的 PDO 准备语句
问题描述
我正在尝试使用 PHP PDO 增加表中的行,我想出了这个查询
UPDATE users SET log = ?
我正在尝试根据日志每一列的先前值进行更新
所以,如果我的桌子之前是这样的
+----+------+------+-----------+--------+
| id | name | age | eye_color | log |
+----+------+------+-----------+--------+
| 21 | OLa | 19 | black | 1 |
| 22 | OLa | 19 | Green | 2 |
| 23 | OLa | 19 | Grey | 3 |
+----+------+------+-----------+--------+
我期待得到这个结果
+----+------+------+-----------+--------+
| id | name | age | eye_color | log |
+----+------+------+-----------+--------+
| 21 | OLa | 19 | black | 2 |
| 22 | OLa | 19 | Green | 3 |
| 23 | OLa | 19 | Grey | 4 |
+----+------+------+-----------+--------+
我发现我可以使占位符的价值成为
log + 1
通过进行完整查询
UPDATE users SET log = log + 1
当我使用 PDO 的查询方法以及从我的终端时,这很有效,当我尝试使用准备好的语句更新它时,问题就出现了,如果我这样做了
$stmt = $this->pdo->prepare("UPDATE users SET log = ?");
$stml->execute(['height + 1']);
然后所有的日志列都变为 0。
有什么做错了吗?我也知道我可以让查询变得简单
$stmt = $this->pdo->prepare("UPDATE users SET log = log + 1");
$stmt->execute(['log + 1']);
但我更喜欢我最初的方法,我正在处理一些限制。
解决方案
由于您没有从用户那里获取信息,并且要将 1 与列相加,因此您可以安全地执行常规查询。
UPDATE users SET log = log + 1
如果您使用准备语句,则必须查询该列以获取当前值,然后在第二个查询中进行更新并为其添加 1。
推荐阅读
- json - 如果使用 Combine 和 Swift 第一次解码失败,则解码另一个响应
- sql - 通过 eloquent 或 fluent 获取相关的 'far' 记录
- highcharts - 从旧版本迁移 Highcharts 数据
- php - 更改弹性豆茎中的权限
- android - 我以后可以使用列表项中的文本吗?
- javascript - 在包含用于登录应用程序的电子邮件地址和密码的表单字段中按 [ENTER] 会导致表单绕过验证器并提交
- javascript - 在javascript中设置输入元素的初始值不会传播到输出元素
- sparql - 从 sparql 中的绑定变量中提取具有不同语言的标签
- python - 尝试从 Heroku dyno 发送请求会导致 python discord bot 出现连接错误
- css - 如何在网络上获取颜色 emois