Ограничение внешнего ключа заставляет запрос SELECT возвращать 0 строк

0

Мне была предоставлена эта структура базы данных:

DROP TABLE IF EXISTS 'account';
CREATE TABLE IF NOT EXISTS 'account' (
  'accountType' varchar(120) NOT NULL,
  PRIMARY KEY ('accountType')
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

DROP TABLE IF EXISTS 'username';
CREATE TABLE IF NOT EXISTS 'username' (
  'usernameID' int(11) NOT NULL AUTO_INCREMENT,
  'password' varchar(200) NOT NULL,
  'name' varchar(200) NOT NULL,
  'phoneNr' int(15) NOT NULL,
  'email' varchar(120) NOT NULL,
  'accountType' varchar(120) NOT NULL,
  PRIMARY KEY ('usernameID'),
  KEY 'accountType' ('accountType')
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

ALTER TABLE 'username'
  ADD CONSTRAINT 'username_ibfk_1' FOREIGN KEY ('accountType') REFERENCES 'account' ('accountType') ON DELETE CASCADE ON UPDATE CASCADE;
COMMIT;

Теперь я хочу ВЫБРАТЬ пользователя из таблицы имени пользователя. В workbench MySQL я получаю результаты, которые я ищу:

SELECT name FROM username;

Однако при использовании запроса mysqli в PHP я получаю num_rows => 0 в моем объекте result, например:

Изображение 174551 (var_dump выше объекта результата - это запрос, который я отправляю)

Он работает, если я удаляю KEY из таблицы имени пользователя, поэтому я предполагаю, что там, где проблема. Как мне изменить свой запрос SELECT?

Теги:
mysqli

2 ответа

0

По какой-то причине, похоже, InnoDB был проблемой. Как только я удалил ENGINE = InnoDB из таблицы имени пользователя, все сработало.

0

Я считаю, что name является зарезервированным словом в MySQL. Возможно, вам просто нужно сбежать от него, используя знак обратной линии,

SELECT 'name' FROM username;

См. Ключевые слова и зарезервированные слова.

  • 0
    К сожалению, это тоже не работает. Даже SELECT * FROM username; работает.
  • 0
    А в таблице логинов есть данные?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню