非オブジェクトのセルフチェックでメンバー関数fetch()を呼び出して、問題を解決します



Call Member Function Fetch Non Object Self Check Solve Problem



これは他とは異なる場合があります

理由

今日、私はphpコードをデバッグしていて、mysqlデータベースデータを取得するためにpdoを使用する必要がありました。タイトルのようにエラーが発生しました。ただし、最初にこの方法を使用して正常に取得し、次にインターネットでいくつかの理由を確認しましたが、いずれも解決されませんでした。私の質問。

解決プロセス

元のコード



$keys = $PDO->query('SELECT key FROM `t_paper_1`')->fetchAll(PDO::FETCH_ASSOC) var_dump($keys)

正常にデータを取得できるその他のコード

$xms = $PDO->query('SELECT xm FROM xsinfo WHERE bjid='1'')->fetchAll(PDO::FETCH_ASSOC) var_dump($xms)

何度も比較してみると、いきなりどこかで鍵が使われているように感じました。自分のコードを検索したところ、次のことがわかりました。



CREATE TABLE `t_paper` ( `id` mediumint(8) NOT NULL AUTO_INCREMENT, `name` varchar(30) NOT NULL, `type` mediumint(1) NOT NULL, `code` text, PRIMARY KEY (`id`), KEY `type` (`type`) )

これがoneKEYで、このキーがmysqlの予約語であることを示しています。つまり、そのように直接クエリを実行します。これは、mysqlの予約語と競合します。変更されたコードは次のとおりです。

$keys = $PDO->query('SELECT `key` FROM `t_paper_1`')->fetchAll(PDO::FETCH_ASSOC) var_dump($keys)

今回は正常に動作し、上記の分析と一致していました。

総括する

今後は2つの点に注意してください。



  1. システム予約語は使用されません。
  2. 通常のテーブル名とフィールド名の「マーカー(キーボード番号の左上隅にある1の隣のマーカー)を追加します。