配列データをDBのテーブルに入れる方法

このQ&Aのポイント
  • PHPの配列データをPostgreSQLデータベースの既存テーブルに追加する方法について質問です。
  • 質問者はPHPでファイルを読み込み、配列にデータを格納しています。対象の配列データを既存テーブルに追加したいが、うまくいかず困っているそうです。
  • 現在のコードではpg_insert関数を使用しているが、エラーが発生している。質問者はさまざまな方法を試しているが、解決に至っておらず、助言を求めている。
回答を見る
  • ベストアンサー

配列データをDBのテーブルに入れるには?

PHPでPostgreSQLを使って苦戦しています。 PHPでファイルを読み込み、PHPの配列 tsv にデータが格納されています。 1レコード30件ほどのデータで件数が数百件あります。 この配列tsvのデータをデータベース database にある既存テーブル 累積 に 追加したいのですが、どうにもうまくいかず困っています。 $result = pg_insert($database,"累積",$tsv); if (!$result) { rollback_tran(); print('pg_insertが失敗しました。'.pg_last_error()); $err_flg = 1; goto ENDCLR; } 色々な方法を試しすぎて、頭を冷やさないと、と思ってこちらにも 書かせていただきました。 ヒント等、いただけますと助かります。 よろしくお願いいたします。

  • PHP
  • 回答数2
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • t_ohta
  • ベストアンサー率38% (5083/13282)
回答No.2

> 上記で設定した「pg_insertが失敗しました。」が画面に表示されるのみです。 > 他に何かエラーメッセージなどを見る方法などあるのでしょうか? pg_last_error() の結果も一緒に表示するようになっているので、何らかのエラーメッセージが一緒に出るはずですが、そこには何も書かれていないと言う事ですかね。 あとは、Webサーバ(Apache等)のエラーログにもエラーメッセージが出ている可能性があるので、確認してみるといいと思います。

masa_biz
質問者

お礼

はい、他には何も書かれていませんでした。 サーバのログ、確認できるかどうか不明ですが、その線もあたるようにしてみます。 ありがとうございました。

その他の回答 (1)

  • t_ohta
  • ベストアンサー率38% (5083/13282)
回答No.1

エラーメッセージを書き出すようにプログラムされていますが、どのようなエラーメッセージが表示されましたか?

masa_biz
質問者

お礼

t_ohtaさん 回答ありがとうございました。 自己解決しました。 PHPをはじめてまだ半月も経っていないため、基礎的な知らないことが多く、やってしまいましたw コード後半に pg_query( 'COMMIT;' ) というのが必要だったんですね。 またご縁がありましたら、どうぞよろしくお願いいたします。

masa_biz
質問者

補足

PHPを触り始めて間もないため、おかしな回答でしたら申し訳ありません。 上記で設定した「pg_insertが失敗しました。」が画面に表示されるのみです。 他に何かエラーメッセージなどを見る方法などあるのでしょうか? 前任者のPHPコードを見ながら修正、という感じなのでよく意味がわからないまま使っている部分もあり、申し訳ないです。

関連するQ&A

  • PHPの配列をDBのテーブルに入れたいのですが

    完全に行き詰まりそうなので助けていただきたく投稿(投降)します。 PHP内でSQLを走らせた結果を、 $result に入れています。 $rows = pg_num_rows($result); print('レコード数は、'.$rows.'です<br><br>'); // 上記、2行のコードで件数が正しいことは確認しました。 $sabun = array(); $sabun = pg_fetch_all($result); $cnt1 = count($sabun); print('配列sabunのレコード数は'.$cnt1.'です<br><br>'); // 上記、4行のコードで配列に格納された件数が正しいことは確認しました。 // 最初の2行の件数とこの4行の件数は同じ件数です。 // ここで配列sabunのデータをテーブルに入れる /* エラーが出た */ $result = pg_insert( $link,テーブル,$sabun ); /* エラーが出た */ $result = pg_insert( $link,テーブル,$result ); /* エラーが出た */ $result = pg_copy_from( $link,テーブル, $sabun ); /* エラーが出た */ $result = pg_copy_from( $link,テーブル, $result ); // 上記、4種類のコードを試したのですが、全てエラーが出ました(泣) if (!$result) { print('テーブルへの登録が失敗!<br><br>'.pg_last_error()); $err_flg = 1; goto ENDCLR; } 「テーブルへの登録が失敗!」以外のエラーメッセージ等は 表示されませんでした。 エラーが出た4種類のいづれかでうまく行くと思ったのですが、 全滅してしまい途方に暮れています。 根本的にPHPへの理解が足りないのかもしれません。 何か解決の糸口などご教授いただけますと助かります。 どうぞよろしくお願いいたします。

    • 締切済み
    • PHP
  • php>postgresから得たデータを配列変数に

    PostgreSQL Ver13.7-2 php Ver7.2.24 htmlでphpを動かしながらPostgreSQLのデータをやりとしています。 pg_fetch_resutlで得たデータを配列変数に代入したいのですが、そんな関数はないでしょうか? イメージは以下の通りです。 $ma="select * from tb where 日付='2022-11-08'"; $mb=pg_qury($db,$ma); $h[]=pg_fetch_result($mb,*,1)   *はすべての列です。 仮に$mbの中に5つデータがあれば、$h[]にはゼロから4まで値が代入できればありがたいのですが。 以上、よろしくお願い致します。

    • 締切済み
    • PHP
  • PostgreSQLのデータ

    PHPにてデータの入っていないテーブルに対して”pg_result”の処理をすると ”Warning: 0 is not a PostgresSQL result index”という 警告文が出てしまいます。 これを何とか回避したいのです。 また、最悪警告文のみ(Error文ではなく)表示させないようにできればいいのですが方法が分かりません。 お分かりになられる方おりましたら、よろしくご教授ください。 環境: RedhatLinux6.2J apache-1.3.12-0jp1 php-3.0.15_i18n_ja-0vl2 postgresql-7.0.2-2.i386

  • PostgreSQLからSQLiteへの移行について

    次のPostgreSQL用PHP関数と同機能のSQLite用PHP関数もしくは、SQLite用PHP関数の組み合わせを教えてください。 pg_fetch_result pg_affected_rows pg_result_seek

    • 締切済み
    • PHP
  • 配列に格納された値の変更について

    お世話になります。現在下記のように配列に値を入れています $result=pg_query($db,$sql); $status=pg_result_status($result); $data=array(); while($row=pg_fetch_row($result)){ $data1[]=array("namae_id"=>$row[0],"namae"=>$row[1]); } 値を格納してからnamaeの部分の値を変更したいのですが、どのようにしたらいいでしょうか? 例えばnamae_id=4のnamaeの値を太郎から太郎 様という感じで変更したいのです。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • postgresql関数をつかったレコードの読み込みについて

    いつもお世話になっております。 早速ですが、 pg_fetch_array(result,i,PGSQL_BOTH) という関数でレコードのフィールドを配列で取得したいのですが、以下のようなエラーが出てしまいます。 Warning: Unable to jump to row 1 on PostgreSQL result index 2 in しかし、フィールド情報は取得しているようなのですが、何がいけないといわれているのでしょう? また、取得した配列はキーが連想配列になっていて、添字ではアクセスできません。オプション「PGSQL_NUM」も試してみましたが、ダメでした。 何をどのように調べたら良いか立ちつくしております。 どなたか、アドバイスを頂けないでしょうか php 4.06 postgresql 7.2

    • ベストアンサー
    • PHP
  • pg_insertで現在の時刻を挿入するには。

    こんばんわ, 今phpでpg_insertでPostgresのdete型のdataにINSERTしようとしているのですが, PostgreSQLのコマンドで # INSERT INTO hogetbl(data) VALUES('now') にあたることをpg_insertでしようとするとnowが認識されません。 $Array = array("data" => 'now'); pg_insert($resource, "hogetbl", $Array); がむりなソース行なのですが,どう変えればよろしいのでしょうか。 それともこちらでdataを取得して挿入する必要があるのでしょうか。 よろしくお願いします。

    • 締切済み
    • PHP
  • PostgreSQLの配列項目のデータ展開の方法がわかりません

    PostgreSQL7.4 + PHP4.3 + Pearの環境です。 配列の項目から要素を展開しようとしたところでハマりました。 $sql = "select * from T"; $result = $db->query($sql); $row = $result->fetchRow(DB_FETCHMODE_OBJECT)) $id = $row->id; $a1 = $row->a1; a1は配列項目で、0,1,2,3 のように要素が入っているのですが、上のソースだと、 $a1[1]='{' $a1[2]='0' $a1[3]=',' $a1[4]='1' のように展開されてしまいました。select文からみるとa1項目は {0,1,2,3} という文字列で入っているのがわかりました。 SQL文が select a1[1],a1[2],a1[3],a1[4] from T; のような形だと正しく取得できますが、実際は配列の要素数が不定なのでこのようなSQLは使えません(長くなるし) 色々調べてみましたが、 $a1='{0,1,2,3}' を $a1[1]='0' $a1[2]='1' $a1[3]='2' $a1[4]='3' に展開する関数が見当たらないみたいです。PostgreSQLの配列項目を扱ったのは初めてなのでとまどっているのですが、簡単にarray変数に展開する方法はないでしょうか。

    • 締切済み
    • PHP
  • php オブジェクトデータ内の配列にアクセスしたい

    失礼します。 phpでのオブジェクトデータ内の配列にアクセスしたいのですが、うまくいきません。 下記(phpunit)のtitle配列内データにアクセスする際にどういった表記をすれば良いのでしょうか? ご教授宜しくお願い致します。 object(PHPUnit_Extensions_Database_DataSet_DefaultTable)#334 (2) { ["tableMetaData":protected] => object(PHPUnit_Extensions_Database_DataSet_DefaultTableMetaData)#331 (2) { ["columns":protected] => array(2) { [0]=> string(2) "id" [1]=> string(5) "title" } ["primaryKeys":protected] => array(0) { } ["tableName":protected] => string(14) "hogehoge" } ["data":protected] => array(1) { [0]=> array(3) { ["id"]=> string(2) "1" ["title"]=> string(13) "test_titleです。" } } ["other":"PHPUnit_Extensions_Database_DataSet_AbstractTable":private] => NULL }

    • ベストアンサー
    • PHP
  • PostgreSQL へのINSERTについて

    度々失礼します。 現在、入力フォームからの新規データをPostgreSQLに登録する仕組みを作成しています。 そこで、リストボックスから選んだ複数のデータをPostgreSQLに入力したいのですが、配列ではなく1つのデータなら $in_hair=$_POST["inp_hair"]; //table_hairに登録 $sql =""; $sql .="INSERT INTO table_hair"; $sql .=" VALUES('$in_store_cd',"; $sql .=" '$in_hair')"; $result=pg_exec($sql); if ($result == false) { printf("SQL:\"$sql\"の実行に失敗しました。"); exit; } で、出来ますが、配列となると、上のコードを配列された数だけ作成し、また、$in_hairをその数だけ1つ1つ入れていかなければならないと思います。 その際の、特にコードの書き方が良く分かりません。 また、何か他に良い方法も思いつきません。 お手数ですがどなたかご教授ください。 よろしくお願いします。 phpは4.2です。

    • ベストアンサー
    • PHP

専門家に質問してみよう