Ограничение внешнего ключа заставляет запрос SELECT возвращать 0 строк - PullRequest
0 голосов
/ 25 мая 2018

Мне дали такую ​​структуру базы данных:

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;

Теперь я хочу выбрать пользователя из таблицы имен пользователей.В MySQL Workbench я получаю результаты, которые я ищу с:

SELECT name FROM username;

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

(переменная var_dump над объектом результата является запросом, который я отправляю)

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

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

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

0 голосов
/ 25 мая 2018

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

SELECT `name` FROM username;

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...