[s2container-php5:39] Re: S2Daoでのselect ... insert intoの実行に関して

Eishi Kuroda kuroda @ jetsetrecords.net
2006年 7月 4日 (火) 01:09:15 JST


ハタ様

御対応ありがとうございます。

> # 手元にwindows機が無いのですが、Win32のPDOはあまり良い動きをしてくれなかったのを記憶しています。
> # 機会があればWindows版でも試してみます。

確かにPDOの挙動はおかしいような気がします。

そこで、ついでにといっては何ですが、insert into絡みで、
もう一点疑問があります。
出力先ファイルを動的に決定したいと思い、

     const outputAll_SQL = "select * into outfile /*file*/
     fields terminated by '\t' from some_table";
     public function outputAll($file);

として
outputAll("/tmp/out.txt")などと呼び出すと、
こちらもやはりwindowsでは成功し、FreeBSDではエラーとなります。
これについては、そもそもPDOの仕様であるのか、
例えば下記のようなスクリプトを実行すると
prepareに失敗し、
var_dumpは
bool(false)
を出力します。

<?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 some_table";
    $stmt = $db->prepare($sql);
    var_dump($stmt);
    $stmt->execute(array("/tmp/out.txt"));
 ?>

色々試しましたが、
どうやらinto outfileの後にパラメータ(疑問符パラメータ、名前つきパラメータどちらも)
を置くことは出来ないようです。
windowsで成功するのが"たまたま"なのか、
FreeBSD側のPDOがおかしいのか、この他の環境がないので判断出来ないのですが、
他の環境で再現するかどうかだけでも分かると助かるのですが・・・。
そもそも、PDOというよりもMySQLのプリペアドステートメントの扱いに
問題があるのかも知れません。
(PDOが内部でmysql_stmt_prepare()を使っているようなので、そこら辺かな・・・と。)

さて、パラメータが使用出来ないとなると、
出力先ファイルを動的に変化させるにはどうするべきでしょうか?
よろしくお願いいたします。

黒田映史



S2Container-PHP5 メーリングリストの案内