- ベストアンサー
Resource idの渡し方
- データベースの主キー(serial)を別のテーブル(category_xref)で外部キーとして使おうとした際に、エラーが発生しました。
- エラーメッセージでは、Resource id #3の解析に失敗していることが分かります。
- gcodeがinteger型で定義されているため、エラーが発生しているようです。Resource idを別のテーブルに渡す方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
再度。 >mixed pg_result(int result_id, int row_number, mixed fieldname); なのですから、 $gcode = pg_result($resource_id,0,2)); は2ではなく、 $gcode = pg_result($resource_id,0,"last_value"); なのではないでしょうか? なんとなく、テーブル構成やカラムの型もあまり理解してないままいろいろされてるのかな~、という雰囲気を感じます。 PostgreSQLには、書籍だけでなくMLもありますので、過去ログなど参考にされてください。
その他の回答 (1)
- noopee
- ベストアンサー率38% (114/297)
こんにちは。 質問の意味があまりよくわからないので、ハズしているかもしれませんが。 「Resource id #3」はpg_execの戻り値のようです。 pg_execでは、実行結果のオブジェクトが作られそのハンドルが返されます。 「Resource id #3」とは、そのハンドルなのではないでしょうか。 そのハンドルをpg_resultに渡すか、最初からpg_resultを使えばお望みのことができるのではないかと思います。 蛇足ですが、seriaiで登録されていても数値型であることには違いなのですから、intのカラムにinsertできないということはないと思うんですが...。
補足
すいません。 データベース初心者で、ご迷惑をおかけしております。 ご返信本当にありがとうございます。非常に助かります。 質問の目的は、 ご返信を頂いたおかげで 「シリアルキーを得たい」ということであるとわかりました。 そこで pg_execによるハンドルをpg_resultに渡そうとしたのですが、 Warning: Bad column offset specified in /home/*** と出てしまいます。 手元の書籍によると mixed pg_result(int result_id, int row_number, mixed fieldname); とあるのですが、 コマンドラインから select * from gurume_gcode_seq; を実行すると左から2番目にあるlast_valueという 値が毎回増えておりましたので、これがシリアルキーだと 思い fieldname の所に 2 と入れたのですが、これは正しいのでしょうか? 以下のようにソースを書きましたが、pg_resultの行が 正しくないようで動きません。どうぞよろしくお願いいたします。 // serial 型のGCODE値の取得 $sql = "select currval('gurume_gcode_seq')"; $resource_id = pg_exec($db_con, $sql); // 実行結果のオブジェクトが作られそのハンドルが返される $gcode = pg_result($resource_id,0,2)); // これによりserial値を取得 if($gcode == false) {print "cannot connect"; exit;} print "$gcode";
お礼
たびたび、どうもありがとうございました。 SQLの初心者向けの書籍を腰を据えて勉強します。 ご指導、本当に助かりました。 ありがとうございました。