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