質問編集履歴
4
本文の修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
~~~ 経緯ここから ~~~
|
2
|
+
最初の質問は
|
3
|
+
https://teratail.com/questions/93539
|
4
|
+
です。
|
5
|
+
Doctrineを使用していたのですが、あまりにもメモリを消費するのでpdoを使用し、$obj->getXX()を使用しないように修正しました。
|
6
|
+
pdo検索でメモリを消費しなくなりましたが、取得件数が数百万件になり、ループする回数を減らしたいため
|
7
|
+
https://teratail.com/questions/99914
|
8
|
+
の質問をしました。
|
9
|
+
一度、数百万件で処理を実行したところ、問題なく出力できました。
|
10
|
+
しかし、ループでファイルに出力する処理で時間がかかりすぎるため、今回の質問をすることになりました。
|
11
|
+
~~~ 経緯ここまで ~~~
|
12
|
+
|
1
13
|
```ここに言語を入力
|
2
14
|
// ファイルの作成処理
|
3
15
|
$outputFile = '/test/test.txt';
|
3
コードの修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,9 +1,28 @@
|
|
1
1
|
```ここに言語を入力
|
2
|
+
// ファイルの作成処理
|
3
|
+
$outputFile = '/test/test.txt';
|
4
|
+
// 出力ファイルが既に存在する
|
5
|
+
if (file_exists($outputFile)) {
|
6
|
+
} else {
|
7
|
+
if (touch($outputFile)) {
|
8
|
+
// ファイル作成成功
|
9
|
+
if (chmod($outputFile, 0777)) {
|
10
|
+
// パーミッション変更成功
|
11
|
+
} else {
|
12
|
+
// パーミッション変更失敗
|
13
|
+
}
|
14
|
+
} else {
|
15
|
+
// ファイル作成失敗
|
16
|
+
}
|
17
|
+
}
|
18
|
+
|
19
|
+
// 以下の処理はパーミッション変更まで成功した前提で実行しています
|
20
|
+
|
2
21
|
// $connはPDO接続情報
|
3
22
|
// SELECTのSQL
|
4
23
|
$sqlStr = "SELECT test_table.id id FROM test_table tt WHERE tt.note LIKE :test";
|
5
24
|
// OUTFILEのSQL
|
6
|
-
$outFileStr = " INTO OUTFILE
|
25
|
+
$outFileStr = " INTO OUTFILE ". $outputFile;
|
7
26
|
// SQL作成
|
8
27
|
$sqlStr .= $outFileStr;
|
9
28
|
|
@@ -16,6 +35,7 @@
|
|
16
35
|
// SQL実行
|
17
36
|
$stmt->execute($sqlStr);
|
18
37
|
```
|
38
|
+
|
19
39
|
上記のSQLの結果をファイルに出力したいのですが、エラーが発生して出力できません。
|
20
40
|
エラーメッセージは以下が出力されます。
|
21
41
|
|
2
コードの修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
```ここに言語を入力
|
2
2
|
// $connはPDO接続情報
|
3
3
|
// SELECTのSQL
|
4
|
-
$sqlStr = "SELECT test_table.id id FROM test_table tt WHERE tt.
|
4
|
+
$sqlStr = "SELECT test_table.id id FROM test_table tt WHERE tt.note LIKE :test";
|
5
5
|
// OUTFILEのSQL
|
6
6
|
$outFileStr = " INTO OUTFILE '/test/test.txt'";
|
7
7
|
// SQL作成
|
@@ -10,6 +10,9 @@
|
|
10
10
|
// prepare
|
11
11
|
$stmt = $conn->prepare($sqlStr);
|
12
12
|
|
13
|
+
// ※バインド
|
14
|
+
$stmt->bindValue(':test', '%test%', PDO::PARAM_STR);
|
15
|
+
|
13
16
|
// SQL実行
|
14
17
|
$stmt->execute($sqlStr);
|
15
18
|
```
|
1
補足の追加
title
CHANGED
File without changes
|
body
CHANGED
@@ -17,7 +17,7 @@
|
|
17
17
|
エラーメッセージは以下が出力されます。
|
18
18
|
|
19
19
|
【エラーメッセージ】
|
20
|
-
SQLSTATE[28000]: Invalid authorization specification: 1045 Access denied for user 'user'@'123.456.789.
|
20
|
+
SQLSTATE[28000]: Invalid authorization specification: 1045 Access denied for user 'user'@'123.456.789.111' (using password: YES)
|
21
21
|
|
22
22
|
APサーバー:123.456.789.111
|
23
23
|
DBサーバー:123.456.789.000
|
@@ -25,4 +25,7 @@
|
|
25
25
|
|
26
26
|
上記のPHPを実行しているAPサーバーとDBサーバーが異なるため、
|
27
27
|
DBサーバーの結果をAPサーバーに出力できないと思います。
|
28
|
-
このような状態でSQLの結果をファイルに出力することは可能でしょうか?
|
28
|
+
このような状態でSQLの結果をファイルに出力することは可能でしょうか?
|
29
|
+
|
30
|
+
補足:
|
31
|
+
「INTO OUTFILE」が付与されていないときはエラーは発生しませんでした。
|