Проблема с обновлением строк в node-mysql

Я только что начал с node-mysql и создал базу данных «пользователи». Я могу выбирать и создавать, следуя инструкциям из репозитория. В настоящее время в базе данных есть значения

[ { 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 выдает ОБНОВЛЕНИЕ ГДЕ. Мой код соответствует формату, указанному в первом ответе; другие попытки дали ошибки запроса. Я также видел сообщение от кого-то, кто получил этот результат при попытке увеличить поле NULL.

Если я использую WHERE id = 2, я получаю ту же ошибку. В моих параметрах конфигурации используется учетная запись, которой я дал разрешения (ПРЕДОСТАВЛЯЙТЕ ВСЕ ПРИВИЛЕГИИ НА testdb.* 'dev'@'%', ИДЕНТИФИЦИРОВАННО 'dev';)

Любые мысли о том, как я могу обновить свое обновление?

РЕДАКТИРОВАТЬ: Чтобы сформировать базу данных, которую я запустил:

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

Таким образом, по умолчанию пользовательские поля, кроме идентификатора, имеют значение NULL.


person arilaan    schedule 06.12.2013    source источник
comment
Вы обновляете user_nicename, который не отображается в выбранных или примерных данных. Какое значение имеет это поле до/после обновления?   -  person Joachim Isaksson    schedule 06.12.2013
comment
Просто НОЛЬ. Я запустил 'INSERT INTO users SET ?', {user_login: 'newbie'} только для создания второй строки.   -  person arilaan    schedule 06.12.2013
comment
Да, но вы не показываете user_nicename после обновления, ваш SELECT выбирает только id и user_login.   -  person Joachim Isaksson    schedule 06.12.2013
comment
Ух ты! Вот оно. Изменив мой SELECT на *, он работает. Я проверял mysql раньше, и nicename не обновлялось; теперь после запуска этого выбора результат показывает изменение (совпадающих строк: 1 изменено: 1 предупреждение: 0'). Спасибо!   -  person arilaan    schedule 06.12.2013


Ответы (1)


После комментария я запустил SELECT *, а не просто SELECT id, user_login, перед UPDATE. Это интересно, потому что мои сценарии выбора и обновления находятся в разных сценариях (и, следовательно, в разных соединениях). Я бы подумал, что просто пропустил обновление (конечно!), но когда я снова запустил ОБНОВЛЕНИЕ без изменений, мои результаты были

Rows matched: 1  Changed: 1  Warnings: 0
person arilaan    schedule 06.12.2013