- - PR -
postgres + phpで上手くいかないです
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-04-08 12:42
すいません
fedora6 Apache/2.2.3 (Fedora) PHP Version 5.1.6 PostgreSQL 8.1.8 phpで動かしてまして PHP Warning: pg_errormessage(): supplied argument is not a valid PostgreSQL link resource in /home/test/Ko_Web-Master/inc/database.php on line 46 とでるんです・・・ これは なにでエラーになってるのかわからないです ↓database.php↓ <? // ***************************************************************************** // (C)1999- itconsulting Corporation All rights reserved. System D1 Ver2.1.6 // ***************************************************************************** // -------------------------------------------------------------------------- // ■関数bconnect // 機能:データベース接続 // -------------------------------------------------------------------------- function dbconnect($dbname){ // 接続できない場合は0.5秒間隔で10回リトライ(約 5 秒) for($i=1; $i<11; $i++){ $conn_id=@pg_connect($dbname); // データベースに接続する if($conn_id){break;} // 接続成功!! usleep(500000); // 0.5 秒 } if(!$conn_id){ return 0; } return $conn_id; } // -------------------------------------------------------------------------- // ■関数bdisconnect($conn_id) // 機能:データベース切断 // -------------------------------------------------------------------------- function dbdisconnect($conn_id){ @pg_close($conn_id); // データベースとの接続切断 } // -------------------------------------------------------------------------- // ■関数bproc($conn_id,$sql) // 機能:SQL発行処理 // -------------------------------------------------------------------------- function dbproc($conn_id,$sql){ $result=@pg_exec($conn_id,$sql); // sqlを実行 // $result=@pg_query($conn_id,$sql); $errmes=pg_errormessage($conn_id); if($errmes){ print("$sql<br><font size=\"2\" color=\"$GLOBALS[errorcolor]\">$errmes</font><br>"); exit; } return $result; } // -------------------------------------------------------------------------- // ■関数:recsget($result) // 機能:レコード件数取得 // -------------------------------------------------------------------------- function recsget($result){ $recs = @pg_numrows($result); // 行数を取得 return $recs; } // -------------------------------------------------------------------------- // ■関数:itemget($result,$line,$itemname) // 機能:項目値取得 // -------------------------------------------------------------------------- function itemget($result,$line,$itemname){ $rbuf=@pg_result($result,$line,$itemname); // 項目値の取得 return $rbuf; } // -------------------------------------------------------------------------- // ■関数:get_schema($query); // 機能:データベースのスキーマを取得 // -------------------------------------------------------------------------- function get_schema($query){ global $items,$iname,$itype,$dbname,$pmax,$select_item,$table; // --------------------------------------------------- // テーブル名を取得 // --------------------------------------------------- $wk=explode(" ",$query); $wkcnt=sizeof($wk); for($j=0;$j < $wkcnt;$j++){ $wk2=strtolower($wk[$j]); if($wk2=="from"){ $jj=$j+1; $table=$wk[$jj]; break; } } // --------------------------------------------------- // 項目の名称と属性を取得 // --------------------------------------------------- $sql="select * from $table limit 1"; // 項目名・属性取得の為、1行仮発行 $result=pg_exec($sql); // select を実行 $items=pg_numfields($result); // フィールド数の取得 // セレクト対象の取得 ereg("select(.*)from",$query,$wk0); // select の対象の部分を取得 $selecter=str_replace(" ","",$wk0[1]); // スペースを削除 if($selecter=="*"){ // select * の場合 for($j=0; $j < $items; $j++){ // 全項目対象 $iname[$j]= pg_fieldname($result, $j); // 名前をセット $itype[$j]= pg_fieldtype($result, $j); // 属性をセット } }else{ // select itemn,itemn・・の場合 $allitems=$items; // 全項目数を退避 $iname=explode(",", $selecter); // itemn,itemn・・の項目をテーブルへ分解 $items=sizeof($iname); // セレクト項目数の再セット for($j=0; $j < $allitems; $j++){ // 全項目をチェック $nmwk=pg_fieldname($result, $j); // 項目名の取得 for($i=0;$i < $items;$i++){ // セレクト項目の名前と比較 if($iname[$i]==$nmwk){ // 項目名が一致した場合は属性セット $itype[$i]= pg_fieldtype($result, $j); } } } } } // 関数の終わり ?> すいません アドバイス欲しいです | ||||||||
|
投稿日時: 2007-04-08 13:26
エラーではなく Warning ですね。 リソースが有効でないと言っています。 警告が出ているのは pg_errormessage 関数ですが、 実際には、他の PostgresSQL に関連する関数も正常に動作していないのではないでしょうか。 エラーも握り潰しているようですから、@ を取り除いてテストすることをお勧めします。 # 有効な接続がない限りは、データベースのエラーなんて取りようがないですからね。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2007-04-09 00:02
ところどころ関数が違っているような・・・。
新規に作成しているものですか? 以前動いていたものをfedora6で動かそうとしているのですか? 気になるところは、 (1) dbconnect 関数 $dbname にはどういう値を渡していますか? (2) dbproc 関数 pg_errormessage ではなく、pg_last_error か pg_result_error pg_query ではなく、pg_exec を利用しているのですか? (3) recsget 関数 pg_numrows ではなく、pg_num_rows (4) itemget 関数 pg_result ではなく、pg_fetch系だと思う。。。 (5) get_schema 関数 pg_numfields ではなく、pg_num_fields pg_fieldname ではなく、pg_field_name pg_fieldtype ではなく、pg_field_type 見たところ、DB接続ができていないと思う。 #dbname の引数だと、ユーザは、apache、パスワードなしで #接続しにいっているのかな? dbconnect 関数で返された値をきちんとチェックしていないんじゃないかな? | ||||||||
|
投稿日時: 2007-04-09 01:21
ありがとうございます はい 以前動いてたものを動かそうとしてました。 少し指摘していただいた点を見直そうと思います。 がんばってみます | ||||||||
|
投稿日時: 2007-04-09 01:22
ありがとうございます Warning なんですね。 もう少し いろいろやってみます。 有効な接続手段をですね。 | ||||||||
|
投稿日時: 2007-04-09 13:34
PHP3 で動いていたものを、PHP5 で利用したいんですね。。。
database.php だけでなく、他のファイルも確認した方がよいですよ。 #PHP5 で利用できない関数もあるかもしれませんので、、、 |
1