[PHP-users 29533] PDO::prepareの疑問符パラメータの挙動に関して

Eishi Kuroda kuroda @ jetsetrecords.net
2006年 6月 29日 (木) 22:30:58 JST


はじめまして、黒田と申します。

php5.1.2
mysql4.1.20

という環境で、
PDOのプリペアドステートメントを使用して、
テーブル内のデータをファイル出力しようと考えています。
出力先ファイル名を、疑問符パラメータを使用して指定しようとしたところ、
上手く行く場合といかない場合があり困っています。

例えば、下記のようなスクリプトを、
windows2000と、FreeBSD4.7上のそれぞれで実行してみます。
(mysql、phpのバージョンは合わせてあります。)

<?php
    $db = null;
    $dsn = 'mysql:dbname=test;host=localhost';
    $user = 'root';
    $password = 'test';
    $db = new PDO($dsn, $user, $password);
    $sql = "select * into outfile ? fields terminated by '\t' from testtable";
    $stmt = $db->prepare($sql);
    var_dump($stmt);
    $stmt->execute(array("/tmp.txt"));
 ?>

windows2000ではprepareが成功し、
var_dump($stmt);
の出力は下記のようになります。

object(PDOStatement)#2 (1) {
  ["queryString"]=>
  string(63) "select * into outfile ? fields terminated by '	' from testtable"
}

FreeBSD4.7では失敗し、
var_dump($stmt);
の出力は下記のようになります。

bool(false)

更に、windowsからFreeBSDのデータベースに接続するようにdsnを設定して
同様に実行した場合、prepareは成功します。
従って、mysqlサーバに問題がある訳ではないように思います。

FreeBSD側のphp.iniの設定に問題があるのかも?と思いましたが、
windows側と殆ど変わらず、それらしいディレクティブも見つかりません。

下記によれば、prepareの引数statementについて、
    http://php.plus-server.net/function.pdo-prepare.html
"これは対象のデータベースサーバに対して有効な SQL 文でなければなりません。"
とありますが、これはPDOが有効なSQLを判断していると考えて良いのでしょうか?
だとすると、やはりmysqlサーバ側の問題ではないと思うのですが・・・。
上述のように、実行環境により異なる結果となるのは、
どのような原因が考えられるでしょうか?

ちなみに、"where afield = ? ..."といったような
where句での単純パラメータの場合、
windows, FreeBSDどちらの環境でも問題なく動作しています。

では、よろしくお願いいたします。

黒田映史



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