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