- 締切済み
未だpostgresにアクセス出来ません。教えて下さい。
こんにちわ。windowsXP,postgres8.2,perl5を使用して居ります。 postgresにperlからアクセスし、既存のテーブルの行に値を入れたいのですが、 valuesに数字以外の文字を指定するとpostgresに文字列が認識されません。教えて頂きたいことは、 仮に数字を6行目の$に入れると認識されるのですが、文字だと出来ないのは、どうしてでしょうか。$id='○○'と 文字を入れてみるとpostgresには1の結果だけが入ってきました。どのようにしたら良いかと、 思いprint'○○',$idとしてみました。すると下記のプロンプトでのエラーがでました。 構文が間違えていると思うので、良い方法があったら教えて下さい。宜しくお願いします。 #!c:/perl/bin/perl use DBD::Pg; use DBI; require'jcode.pl'; $dbh=DBI->connect("dbi:Pg:host=localhost;dbname=kensaku",'windws','aaaa')||die $dbh->errstr; print'9',$id;print'山田',$word1;print'd',$word2;print'w',$word3;print'c',$head;print'a',$img; @bindvalues=($id,$word1,$word2,$word3,$head,$img); &jcode::convert(*bindvalues,'euc'); my$b=(<<"EOL"); insert into kensaku(id,word1,word2,word3,head,img) values($id,$word1,$word2,$word3,$head,$img) EOL ; $sth=$dbh->prepare($b)||die $dbh->errstr; $sth->execute()||die $sth->errstr; $dbh->disconnect; $sth=$dbh->prepare($b)||die $dbh->errstr; $sth->execute()||die $sth->errstr; $dbh->disconnect; コマンドプロンプトのエラー DBD::Pg::st execute failed: ERROR: syntax error at or near "," at character 103 at test.pl line 19. ERROR: syntax error at or near "," at character 103 at test.pl line 19.
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- calltella
- ベストアンサー率49% (317/635)
やはり文字コードエラーの様ですね。 id,word1,word2,word3,head,img ↑それぞれのフィールドの属性を教えてください。
- calltella
- ベストアンサー率49% (317/635)
とりあえず正常に動かす事から初めて後から追加しながら どこでエラーになっているのかを突き止める方法が 遠周りですけど一番確実な方法だと思いますし勉強になると思います。 文字コードでエラーが出ているみたいなので これを $id ="321"; $word1 ="あ"; $word2 ="い"; $word3 ="う"; $head ="abc"; $img ="def"; ↓ $id ="321"; $word1 ="A"; $word2 ="I"; $word3 ="U"; $head ="abc"; $img ="def"; に変えてみてください。
補足
calltellaさん有難う御座います。前回のファイルを使い、A、I、Uに変えてチェックしてみました。このようなエラーが出ています。column "a" やcharacter 107 は全く意味不明です。ご指導を宜しくお願いします。 #!c:/perl/bin/perl use DBD::Pg; use DBI; $dbh=DBI->connect("dbi:Pg:host=localhost;dbname=kensaku",'windws','aaaa')||die $dbh->errstr; $id ="321"; $word1 ="A"; $word2 ="I"; $word3 ="U"; $head ="abc"; $img ="def"; $b= "insert into kensaku(id,word1,word2,word3,head,img) values($id,$word1,$word2,$word3,$head,$img)"; $sth=$dbh->prepare($b)||die $dbh->errstr; $sth->execute()||die $sth->errstr; $dbh->disconnect;以下がプロンプトのエラーです。 DBD::Pg::st execute failed: ERROR: column "a" does not exist at character 107 a t okkaitou.pl line 19. ERROR: column "a" does not exist at character 107 at okkaitou.pl line 19.
- calltella
- ベストアンサー率49% (317/635)
とりあえず↓これを動かしてみてください。 #!c:/perl/bin/perl use DBD::Pg; use DBI; $dbh=DBI->connect("dbi:Pg:host=localhost;dbname=kensaku",'windws','aaaa')||die $dbh->errstr; $id ="321"; $word1 ="あ"; $word2 ="い"; $word3 ="う"; $head ="abc"; $img ="def"; $b= "insert into kensaku(id,word1,word2,word3,head,img) values($id,$word1,$word2,$word3,$head,$img)"; $sth=$dbh->prepare($b)||die $dbh->errstr; $sth->execute()||die $sth->errstr; $dbh->disconnect;
補足
calltellaさん有難うございます。そのままペーストしてプロンプトでパール構文チェックをしたところ、このようなエラーが出ました。文字コードはpostgresのテーブルを作った時に既にテーブル全体に指定したので私も、先日のようにjcodeを用いる必要はあるのか疑問だったのですが、文字コードのエラーが出てしまったので半信半疑で入れてみたのですが、結局認識されず、どうしていいのか困ってしまいました。calltellaさん、今私は本当に八方塞がりです。更なるお導きをお願いします。 DBD::Pg::st execute failed: ERROR: invalid byte sequence for encoding "EUC_JP": 0x82a0 at okkaitou.pl line 18. ERROR: invalid byte sequence for encoding "EUC_JP": 0x82a0 at okkaitou.pl line 18.
- calltella
- ベストアンサー率49% (317/635)
>valuesに数字以外の文字を指定するとpostgresに文字列が認識されません。 postgres側のフィールドは数字しか入れられない設定になっていないですか?
補足
読んでいただき有難う御座います。postgresは文字列の設定にしてあります。何か気ずく点、アドバイスがあれば、ご助言下さい。宜しくお願いします。
補足
calltella有難う御座います。指定はこのようにしています。 テーブルはパールから作りました。その時の指定です word1 varchar(10), word2 varchar(10), word3 varchar(10), word4 varchar(10), head varchar(16), img varchar(16) そしてpostgresのテーブルをプロパティで見ると 全てcharacter varyingでidのみプラスで主キーになっているのでしょうか、NOT NULLになっていました。postgresの表現とperlの表現とが 異なるものを指すのでしょうか。calltellaさんそういう感じのことに何かあるのでしょうか。推理小説のようです。宜しくお願い致します。