Мне была предоставлена эта структура базы данных:
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, например:
(var_dump выше объекта результата - это запрос, который я отправляю)
Он работает, если я удаляю KEY из таблицы имени пользователя, поэтому я предполагаю, что там, где проблема. Как мне изменить свой запрос SELECT?
По какой-то причине, похоже, InnoDB был проблемой. Как только я удалил ENGINE = InnoDB из таблицы имени пользователя, все сработало.
Я считаю, что name
является зарезервированным словом в MySQL. Возможно, вам просто нужно сбежать от него, используя знак обратной линии,
SELECT 'name' FROM username;