• 締切済み

PDOを使用しているのですが・・・

環境: PostgreSQL7.4 PHP5.2 PDOを使用してデータベースにアクセスして 一旦テーブル名を取得しのちに SELECT文を用いて選択されたテーブルの内容をすべて表示したいのですが テーブルの内容を表示する部分で Fatal error: Call to a member function query() on a non-object と表示されてうまくいきません。 <?php $dns='pgsql:host=;dbname=;user=;password='; try{ $dbh=new PDO($dns); $list = "<option>select</option>\n"; foreach ($dbh->query("SELECT * FROM pg_tables WHERE tableowner='db';", PDO::FETCH_COLUMN,1) as $row) { $arr= array($row); foreach($arr as $value) { $list .= "<option value=\"$value\">".$value."</option>\n"; } } $dbh=null; }catch (PDOException $e){ print 'エラー!: '. $e->getMessage(); die(); } ?> <form action="database.php" method="post"> <P> <select name="test"> <?php echo "$list";?> </select> </P> <input type="submit" value="送信!"> </form> <?php $born = $_POST['test']; $search =$dbh->query("SELECT * FROM $born"); // この部分 echo $search; ?>

みんなの回答

回答No.2

webで見つかるサンプル ------------ $dns = 'pgsql:host=;dbname=;user=;password='; try { $dbh = new PDO( $dns ); } catch( PDOException $e ) { echo $e->getMessage(); } ------------ foreach の前に上記のスクリプトで $dbh に正しくオブジェトが渡るかを確認した方がいいです。 エラーとなる条件を指定して、正しくエラーとなる事を確認するのも重要です。 SQLite では、パス名までしかチェックしないので、ファイル名が違ってもエラーとなりませんでした。 host, dbname, user, password も全て空白ですが・・・これでコネクトできます? PDOより先に PostgreSQL レベルでコネクトできる host, dbname, user, password をチェックする方が先だと思いますけど

fx-01
質問者

お礼

host, dbname, user, passwordがすべて空欄なのは こういった大衆の目にデータベースの情報を流さない方がよいのではないか? といった考えから消去してソースコードを掲示しました。 大変失礼いたしました。 データベースに接続はでき、、 SELECT * FROM pg_tables WHERE tableowner='db'; はデータを取得をできているのですが、 $search =$dbh->query("SELECT * FROM $born"); のほうがエラーを出しているのです。

回答No.1

MySQLとSQLiteの実績しかないですが・・・ dbのオープン処理がないと思いませんか? もういちどサンプルを見て、確実にdbをオープンしてコネクトされていることを確認して下さい。

fx-01
質問者

お礼

ご回答ありがとうございます。 知識が薄い為、言われている意味がよく分かりません。 もう少し詳しく指摘いただけないでしょうか?

関連するQ&A