~~~ 経緯ここから ~~~
最初の質問は
https://teratail.com/questions/93539
です。
Doctrineを使用していたのですが、あまりにもメモリを消費するのでpdoを使用し、$obj->getXX()を使用しないように修正しました。
pdo検索でメモリを消費しなくなりましたが、取得件数が数百万件になり、ループする回数を減らしたいため
https://teratail.com/questions/99914
の質問をしました。
一度、数百万件で処理を実行したところ、問題なく出力できました。
しかし、ループでファイルに出力する処理で時間がかかりすぎるため、今回の質問をすることになりました。
~~~ 経緯ここまで ~~~
// ファイルの作成処理 $outputFile = '/test/test.txt'; // 出力ファイルが既に存在する if (file_exists($outputFile)) { } else { if (touch($outputFile)) { // ファイル作成成功 if (chmod($outputFile, 0777)) { // パーミッション変更成功 } else { // パーミッション変更失敗 } } else { // ファイル作成失敗 } } // 以下の処理はパーミッション変更まで成功した前提で実行しています // $connはPDO接続情報 // SELECTのSQL $sqlStr = "SELECT test_table.id id FROM test_table tt WHERE tt.note LIKE :test"; // OUTFILEのSQL $outFileStr = " INTO OUTFILE ". $outputFile; // SQL作成 $sqlStr .= $outFileStr; // prepare $stmt = $conn->prepare($sqlStr); // ※バインド $stmt->bindValue(':test', '%test%', PDO::PARAM_STR); // SQL実行 $stmt->execute($sqlStr);
上記のSQLの結果をファイルに出力したいのですが、エラーが発生して出力できません。
エラーメッセージは以下が出力されます。
【エラーメッセージ】
SQLSTATE[28000]: Invalid authorization specification: 1045 Access denied for user 'user'@'123.456.789.111' (using password: YES)
APサーバー:123.456.789.111
DBサーバー:123.456.789.000
※数値は適当
上記のPHPを実行しているAPサーバーとDBサーバーが異なるため、
DBサーバーの結果をAPサーバーに出力できないと思います。
このような状態でSQLの結果をファイルに出力することは可能でしょうか?
補足:
「INTO OUTFILE」が付与されていないときはエラーは発生しませんでした。
回答3件
あなたの回答
tips
プレビュー