• 締切済み

データベース(PostgreSQL)のフィールドとpg_field_num()について

現在私は、あるシステムを構築しています。 開発言語にPHP、データベースにPostgreSQLを使用しています。 そのシステムの中で、データベース(テーブル)にアクセスし、指定したカラムの保持しているデータを更新する処理をしているところがあります。 各カラム名は、システム使用者のIDとなっています。 実際のスクリプトとしては、 ************************************************ $id = (使用ユーザのID); $rs = (テーブルをセレクトした際のリソース); $row = pg_fetch_row($rs); $new_data = $row[pg_field_num($rs, $id)] + 1; // 該当する値をインクリメント ************************************************ という感じになります(問題箇所のみ)。 IDには大きく分けて二種類あり、  ・数字だけのもの  ・数字が英字混ざったもの があります。 上記のスクリプトで、数字だけのIDでは正常に動作するのですが、数字と英字が混ざったものは正常に動作しません。 pg_field_num($rs, $id)の値を出力してみると、-1 が出ます。 しかし、指定しているカラムはしっかり存在しています。 念のため、pg_field_name($rs, (該当するカラム番号))を出力してみても、出力されたカラム名は正しいです。 即ち、 ************************************************ $new_id = pg_field_name($rs, (該当するカラム番号)); $test = pg_field_num($rs, $new_id); ************************************************ としても、$testの値は -1 となります。 -1 が出力されると言う事はエラーが出力されているという事なので、pg_result_error等でエラーを出力してみても、エラーはありません。。。(もしかしたら、正しくないやり方をしてるのかもしれませんが) 現状では手の施しようがありません。 どなたか、ご教授お願いします。

みんなの回答

回答No.1

だいぶ前の質問で放置されている様なので(笑。 数字だけの場合大丈夫という事は、上記でははっきりしませんが、恐らく、SQL作成時の問題ではないかと思います。 多分、質問者さんのが発行したSQLは下のようでは無いかと思います。 $sql = "SELECT * FROM dbname WHERE id={$id}"; の場合、$idは数字以外ではエラーが発生します。 文字列の場合は、シングルクォーテーションでくくる必要があります。 すなわち、 $sql = "SELECT * FROM dbname WHERE id='{$id}' "; とならなければならないはずです。 ピント外れでしたか?

関連するQ&A