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