bugfix> php > 投稿

私はこのデータベース構造を与えられました:

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 件
  • 私は name を信じています  MySQLの予約語です。バックティック文字を使用してエスケープする必要がある場合があります。

    SELECT `name` FROM username;
    
    

    キーワードと予約語を参照してください。

  • 何らかの理由で、InnoDBが問題だったようです。ユーザー名テーブルからENGINE = InnoDBを削除するとすぐに、すべてが機能しました。

あなたの答え