[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 メーリングリストの案内