外键约束使SELECT查询返回0行

时间:2018-05-25 01:05:17

标签: php mysql mysqli

我已经获得了这个数据库结构:

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工作台中,我得到了我正在寻找的结果:

SELECT name FROM username;

然而,当在PHP中使用mysqli查询时,我得到num_rows =>在我的结果对象中为0,如下所示:

(结果对象上方的var_dump是我发送的查询)

如果我从用户名表中删除KEY,它就可以工作,所以我认为这就是问题所在。我该如何改变我的SELECT查询?

2 个答案:

答案 0 :(得分:0)

我相信name是MySQL中的保留字。你可能只需要使用像这样的反引号字符来逃避它,

SELECT `name` FROM username;

请参阅Keywords and Reserved Words

答案 1 :(得分:0)

出于某种原因,似乎InnoDB就是问题所在。一旦我从用户名表中删除了ENGINE = InnoDB,一切正常。