- 締切済み
postgresに内容を送ることが出来ません。宜しくお願いします
#!c:/perl/bin/perl -- こんにちわ。perl5.8,windowsXP,postgreSQL8.2を使って居ります。postgresにperlから内容を入力できず困っております。今回入力するテーブルには既にsqlに直接行を2行分のみ入力してあり、その部分、3行目からはperlでテストしています。postgresのpg_logというフォルダにログが入っていたので見たのですが特にエラーも書いてありませんし、コマンドプロンプトでもエラーにはなっていませんでした。アドバイスをお願いします。宜しくご指導下さい。 use DBD::Pg; use DBI; require'jcode.pl'; $dbh=DBI->connect("dbi:Pg:host=localhost;dbname=kensaku",'dd','ee'); my$b=(<<"EOL"); convert('PostgreSQL' using sjis_to_euc_jp); insert into kensaku(id,word1,word2,word3,head,img) values(?,?,?,?,?,?); EOL ; @bindvalues=('w','d','q','g','c','v'); &jcode'convert(*bindvalues,'euc_jp'); $sth=$dbh->prepare($b); foreach (@csvdata){ @bindvalues=split(/,/,$_); $v=$sth->execute(@bindvalues);} $d=$dbh->disconnect;
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- bgbg
- ベストアンサー率53% (94/175)
全く反応がないというのはどのような状態でしょうか? 何も出力されないだけなのか、プログラム自体が固まってしまうのか。 データベースに接続できていないのかもしれません。 とりあえず、traceを取ることをお勧めします。 traceの取り方や注意点を含め、参考URLをご覧下さい。 > データベースへのアクセスをパールで初めて送った時はどのような勉強をされましたか? Webで検索し、既存のプログラムを片っ端から見よう見まねで覚えていきました。特に本は買っていません。
- bgbg
- ベストアンサー率53% (94/175)
my$b=(<<"EOL"); convert('PostgreSQL' using sjis_to_euc_jp); insert into kensaku(id,word1,word2,word3,head,img) values(?,?,?,?,?,?); EOL 通常、DBIで処理するSQL文は一度に2文以上同時に処理することはできないのではないかと思いますが。 convertは毎回insertする前に行う必要はないと思うので、foreachの中とは別に最初1度だけ実行するようにしたらどうでしょう。 なお、SQLのエラーメッセージは、executeしたあと print $sth->errstr; で取得できます。
補足
bgbgさんご回答頂き有難うございます。SQL文中に2文以上入れることは出来ないと言うことを教えて頂き、助かりました。しかし、まだコンバートを削除してもダメです。(SQLのデータベース作成の時にコンバートの指定はしてありましたので、今回は削除してテストしてみました。)何が間違えた部分なのか勉強不足で不明です。print $sth->errstr;も教えて下さり有難う御座いました。この一文を足してコマンドプロンプトでチェックしたのですが、全く反応がありません。とりあえず一休みしています。SQLを一から勉強するのが先なのでしょうか、bgbgさんはデータベースへのアクセスをパールで初めて送った時はどのような勉強をされましたか?参考に良い方向があったら教えて下さい。良い本なども教えて下さい、宜しくお願い致します。
補足
bgbgさんご返事有難う御座います。全く反応がないというのはプロンプトでエラーが出ず、通ってしまうと言う事でした。データベースには接続できていると思います。テーブルやデータベースをプロンプトから作りましたので大丈夫だと思っています。トレースはもう少し理解するように時間を取ってみたいと思います。今週は着手が出来ず、また来週になってしまいますが、トライしてみたいと思います。bgbgさん、またご報告します。bgbgさんはwebで材料を収集して研究されたのですね、私も少しは見習いたいと思います。とりあえず今回はテーマに近いものだけ、頑張ってみます。有難う御座いました。