【发布时间】:2019-02-21 18:50:22
【问题描述】:
我正在尝试使用 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']);
但我更喜欢我最初的方法,我正在处理一些限制。
【问题讨论】:
-
查询在你使用
height + 1的地方执行,高度应该是多少?使用单引号将其传递给不是您想要的更新的文字字符串。 -
你需要
UPDATE users SET log = height + ?和$stml->execute(['1']); -
高度应该是db表中高度的前一个值,sql就是这样工作的
-
另外,你有一个错字:
$stmtvs$stml -
这篇文章毫无意义。如果您需要
height + 1那么为什么您的代码显示log + 1