【问题标题】:MySQL query adds 0 to DB yet log says otherwise?MySQL 查询将 0 添加到数据库中,但日志另有说明?
【发布时间】:2014-04-16 17:20:03
【问题描述】:

我有一个三列表格,| id | systemid | VendorTxCode |

id = 1, systemid = -1VendorTxCode = 1

我正在运行以下查询:

UPDATE core_licences SET systemid = '51' WHERE VendorTxCode = '1'

它可以正常工作,但表中的 systemid 更改为 0 而不是 53。我打开了 mysql.log,它看起来很好:

110 Prepare   UPDATE core_licences SET systemid = ? WHERE VendorTxCode = ?
110 Execute   UPDATE core_licences SET systemid = '51' WHERE VendorTxCode = '1'

PHP 很好,没有报告任何错误,从上面的 mysql.log 文件中我们可以看到,查询正在构建并正常执行。 当更新查询显然工作正常时,什么会导致表字段更新为“0”?

该字段是 int,允许 30 个字符。我也尝试过没有运气的varchar。在绑定查询参数时,我也尝试过is

一切都很好,我 100% 确定。就是这个该死的表字段!我已经删除了 systemid 列并重新创建了它,没有运气。

【问题讨论】:

  • 我已将其标记为删除,这是一个非常集中的用户错误。

标签: mysql sql sql-update


【解决方案1】:

这并不能完全解释您的情况,但请记住'1'1 不同,'51'51 不同。您正在强制进行数据类型转换,看起来从 '1'1 的转换成功,因此查询匹配正确的记录,但不知何故,从 '51'51 的转换失败,这样结果为NULL,如果列中不允许有NULL,MySql会将其视为0

【讨论】:

  • 我允许在该字段中使用 null,但它仍将其设置为 0。这是一个 PHP 查询,因此值(例如 1)必须用撇号括起来?
  • 如果值在撇号中,则向数据库表明它是字符串类型,而不是数字类型。我很少接触 php,但我知道它能够创建正确处理数字的查询。
猜你喜欢
  • 1970-01-01
  • 2017-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多