[PHP-users 13720] PEAR DBのプレースホルダを使用してのNULLの挿入

php-users@php.gr.jp php-users@php.gr.jp
Tue, 4 Mar 2003 13:59:13 +0900 (JST)


お世話になります。室姫といいます。

PEAR DBライブラリのプレースホルダの機能を利用して
NULLを挿入したいと思いましたが、
うまくNULLが挿入できなく質問したく思います。

環境:
Windows2000
PHP 4.3.1
PostgreSQL 7.2.1 Windows Native版

TABLEは下記のような形で定義しております。
CREATE TABLE m_ppp(
  ppp_id    smallint,
  ppp       varchar(16)
);

php.ini-distと同一ディレクトリにあるPHP.exeを
下記のようにコマンドライン上にて実行しています。
C:\php4>php -q C:\php4\index.php

ソースの一部分を抜きだして提示していますが、
下記のような形で処理を定義し、
INSEER文にてNULLを挿入しようとすると、
うまくNULLが挿入できませんでした。

$sql = "insert into m_ppp( ppp_id, ppp ) values( ?, ? )";
$stmt = $dbHandle->prepare($sql);
$params = array(1, 'LNS');
$result = $dbHandle->execute($stmt, $params);

$insertNULL = "NULL";
$params = array(${insertNULL}, ${insertNULL});
# $params = array($insertNULL, $insertNULL);
# $params = array("", "");
$result = $dbHandle->execute($stmt, $params);
if($dbHandle->isError($result)){
    print_r($params);
    $resultNgCount++;
    $dbHandle->rollback();
}
else{
    $resultOkCount++;
    $dbHandle->commit();
}

echo "[:m_ppp:]\n";
echo "$resultOkCount record insert OK\n";
echo "$resultNgCount record insert NG\n";
echo "\n";

⇒ スクリプトの実行結果は下記です。
Array
(
    [0] => NULL
    [1] => NULL
)
[:m_ppp:]
1 record insert OK
1 record insert NG

⇒ SELECT文の実行結果は下記です。
Administrator=#  select * from m_ppp where ppp is null;
 ppp_id | ppp
--------+-----
(0 rows)


なお、コマンドライン上にて下記INSERT文を実行しますとうまくNULLを挿入できました。
insert into M_PPP( ppp_id, ppp ) values( NULL, NULL );
Administrator=# select * from m_ppp where ppp_id is null;
 ppp_id | ppp
--------+-----
(1 row)

Administrator=# select * from m_ppp where ppp is null;
 ppp_id | ppp
--------+-----
(1 row)


PEAR DBライブラリのプレースホルダの機能を使用した場合の
NULLの挿入方法をご教授の程よろしくお願いします。


フレッツ始めるなら今 !キャンペーン実施中!
               http://www.livedoor.com/flets/