[PHP-users 30605] PEAR MDB2.phpでPostgresqlにプレイスホルダをつかって数字のinsert

MAO mao @ nextyle.com
2006年 10月 26日 (木) 21:19:07 JST


こんばんは。
MAOです。

現在、DB.phpからMDB2.phpへ移行しているのですが、
うまくいかずにいます。

データのinsertなのですが、プレイスホルダを利用して、
integerのフィールドにデータを登録しようとすると、
"fld_int" is of type integer but expression is of type text
と、intgerのフィールドにテキスト入れてるよ。と怒られます。
DB.phpの命令をMDB.phpに書き換えただけなのですが、
何かお作法を追加しないといけないのでしょうか?


DB.phpのときは、

require_once 'DB.php';
$dbh = DB::connect('pgsql://hoge:hoge@localhost/test_db');
$sql = 'insert into tbl_test(fld_int) values(?)';
$sql_array = array(1);
$sth = $dbh->prepare($sql);
if (PEAR::isError($sth)){print_r($sth->getUserInfo());exit;
}else{
 $res = $dbh->execute($sth,$sql_array);
 if (PEAR::isError($res)){print_r($res->getUserInfo());exit;
 }
}

とかいてて、うまくいっています。
それを、

require_once 'MDB2.php';//←ここ修正
$dbh = & MDB2::factory('pgsql://hoge:hoge@localhost/test_db');//←ここ修正
$sql = 'insert into tbl_test(fld_int) values(?)';
$sql_array = array(1);
$sth = $dbh->prepare($sql);
if (PEAR::isError($sth)){print_r($sth->getUserInfo());exit;
}else{
 $res = $sth->execute($sql_array);//←ここ修正
 if (PEAR::isError($res)){print_r($res->getUserInfo());exit;
 }
}

にしました。
なお、環境ですが、
CENT OS 3
PHP 4.3.2
Postgres 7.3.15-RH
PEAR.php 1.4.11
MDB2.php 2.2.2

です。
なお、同じ構文でMySQL4.1.20につないでテストした場合は
DB.php MDB2.php 共に問題なく動きました。

また、
プレイスホルダを利用せずに、
insert into tbl_test(fld_int) values(1)
とした場合は問題なく動きます。

以上、よろしくお願いいたします。



PHP-users メーリングリストの案内