【问题标题】:Trouble updating rows in node-mysql无法更新 node-mysql 中的行
【发布时间】:2013-12-06 05:31:43
【问题描述】:

我刚刚开始使用 node-mysql,并创建了一个数据库“用户”。我可以按照repository 的说明进行选择和创建。数据库当前有值

[ { id: 1, user_login: 'mwilson' },
  { id: 2, user_login: 'newbie' } ]

和字段 [id, user_login, user_nicename]。

但是,当我运行更新函数来更新第二个用户时,我的结果显示我有 1 行匹配但 0 行已更改,并且 SELECT 确认没有更新。

我的代码:

connection.query('UPDATE users SET user_nicename = ? WHERE user_login = ?', ['New User','newbie'],
 function(err, results) {
  if(err) {
    console.log("Failed on query",err);
  } else {
  console.log(results);

结果:

{ fieldCount: 0,
  affectedRows: 1,
  insertId: 0,
  serverStatus: 34,
  warningCount: 0,
  message: '(Rows matched: 1  Changed: 0  Warnings: 0',
  protocol41: true,
  changedRows: 0 }

在connection.query('SELECT id, user_login FROM users')之后:

[ { id: 1, user_login: 'mwilson' },
  { id: 2, user_login: 'newbie' } ]

我能找到的最接近的其他问题是Node.js mysql query syntax issues UPDATE WHERE。我的代码遵循第一个答案给出的格式;其他尝试给出了查询错误。我还看到有人在尝试增加 NULL 字段时得到此结果的帖子。

如果我使用 WHERE id = 2 我会得到同样的错误。我的配置参数使用了我授予权限的帐户(GRANT ALL PRIVILEGES ON testdb.* TO 'dev'@'%' IDENTIFIED BY 'dev';)

关于如何更新我的更新有什么想法吗?

编辑:形成我运行的数据库:

CREATE TABLE users( 
   id int auto_increment primary key, 
   user_login varchar(25), 
   user_nicename varchar(75) 
);

所以默认情况下,除了 id 之外的用户字段都是 NULL。

【问题讨论】:

  • 您正在更新user_nicename,您没有在选择或示例数据中显示。该字段在更新之前/之后有什么值?
  • 只是 NULL。我只运行'INSERT INTO users SET ?', {user_login: 'newbie'} 来创建第二行。
  • 是的,但是更新后你没有显示user_nicename,你的SELECT只选择iduser_login
  • 哇!它在那里。通过将我的 SELECT 更改为 * 它可以工作。我之前确实检查过 mysql 并且 nicename 没有更新;现在运行该选择后,结果显示更改(匹配行:1 更改:1 警告:0')。谢谢!

标签: mysql sql node.js sql-update node-mysql


【解决方案1】:

在发表评论后,我在 UPDATE 之前运行了 SELECT *,而不仅仅是 SELECT id、user_login。这很有趣,因为我的选择和更新脚本位于不同的脚本中(因此连接不同)。我会以为我刚刚错过了更新(当然!),但是当我再次运行 UPDATE 时没有任何变化,我的结果是

Rows matched: 1  Changed: 1  Warnings: 0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-22
    • 2018-03-13
    • 2021-08-31
    • 2020-10-19
    • 2014-01-13
    • 2014-04-12
    • 1970-01-01
    相关资源
    最近更新 更多