未だ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.
補足
(1)pg_hba.confは、以下のようにしています。 Webサーバと、DBサーバは同一のマシンに格納していますので、localhostからの接続は、許可しました。 # TYPE DATABASE USER CIDR-ADDRESS METHOD # "local" is for Unix domain socket connections only local all all trust # IPv4 local connections: #host all all 127.0.0.1/32 trust # IPv6 local connections: #host all all ::1/128 trust host all all 192.168.1.0/24 trust host all all 192.168.3.0/24 trust host all all 192.168.4.0/24 trust host all all 127.0.0.1 255.255.255.255 trust (2)postgresは、マシン起動時にあがるようにinit.dに以下のようなファイルを置き起動しています。 #!/bin/sh # # PostgreSQL start and shutdown script # # chkconfig: 345 90 11 # description: PostgreSQL start and shutdown script . /etc/init.d/functions case "$1" in start) su - postgres -c "pg_ctl -l /usr/local/pgsql/log/log${$}.txt -D /usr/local/pg sql/data/ -o \"-S -i\" start" touch /var/lock/subsys/postgres ;; stop) su - postgres -c "pg_ctl stop -D /usr/local/pgsql/data/ -m fast" rm -f /var/lock/subsys/postgres ;; *) echo "Usage: /etc/rc.d/init.d/postgres {start|stop}" esac