質問編集履歴

4

本文の修正

2017/11/17 07:58

投稿

red13
red13

スコア79

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

コードの修正

2017/11/17 07:58

投稿

red13
red13

スコア79

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 '/test/test.txt'";
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

コードの修正

2017/11/17 06:47

投稿

red13
red13

スコア79

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.id = 1";
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

補足の追加

2017/11/17 06:12

投稿

red13
red13

スコア79

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.000' (using password: YES)
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」が付与されていないときはエラーは発生しませんでした。