質問編集履歴

8

セキュリティの関わる問題なので削除させていただきました。

2018/06/18 09:42

投稿

amaguri
amaguri

スコア227

test CHANGED
@@ -1 +1 @@
1
- cakephp データ抽出方法 ループ文
1
+ セキュリティ関わる問題なで削除させていただました。
test CHANGED
@@ -1,99 +1 @@
1
- 下記の文を$resultsから一つずつデータを出して処理する
2
-
3
- ループ文に書き直したいのですがどうしたらいいでしょうか?
1
+ セキュリティ関わる問題なの削除させていただきました
4
-
5
-
6
-
7
-
8
-
9
- ```php
10
-
11
- $results=CommonComponent::CheckExplainParce($u_userid,$u_id);
12
-
13
-
14
-
15
- //$u_type=$results[$cnt]->type;で$resultsからデータを取得。
16
-
17
- $u_type=$results[$cnt]->type;
18
-
19
-
20
-
21
- //u_typeに"insert|create table|create database|drop database|drop tablegが含まれるかの確認をする。
22
-
23
- if( eregi($u_type,"insert|create table|create database|drop database|drop table")){
24
-
25
-
26
-
27
- //対象のDBを$results[$cnt]->dbを$resultsから抽出
28
-
29
- $u_db=$results[$cnt]->db;
30
-
31
- //対象のDBが個人情報DBか識別
32
-
33
- $dbcheck = $this->PrivateHiveDb->find('count', [
34
-
35
- 'conditions' => ['PrivateHiveDb.hive_database' => $u_db]
36
-
37
- ]);
38
-
39
- //対象のDBが個人情報系の場合
40
-
41
- if($dbcheck){
42
-
43
- // 接続元IP情報
44
-
45
- $ips=CommonComponent::IpCheck();
46
-
47
-
48
-
49
- if (empty($ips)) {
50
-
51
- $this->set("result" , array("result" => "error"));
52
-
53
- return;
54
-
55
- }
56
-
57
- }else{
58
-
59
- /参照系の場合
60
-
61
- //対象のDBを$results[$cnt]->dbを$resultsから抽出
62
-
63
- $u_db=$results[$cnt]->db;
64
-
65
- //対象のDBが個人情報DBか識別
66
-
67
- $dbcheck = $this->PrivateHiveDb->find('count', [
68
-
69
- 'conditions' => ['PrivateHiveDb.hive_database' => $u_db]
70
-
71
- ]);
72
-
73
- //対象のDBが更新系の場合
74
-
75
- if($dbcheck){
76
-
77
- // 接続元IP情報
78
-
79
- $ips=CommonComponent::IpCheck();
80
-
81
-
82
-
83
- if (empty($ips)) {
84
-
85
- $this->set("result" , array("result" => "error"));
86
-
87
- return;
88
-
89
- }
90
-
91
- }
92
-
93
- }
94
-
95
-
96
-
97
-
98
-
99
- ```

7

文言修正

2018/06/18 09:42

投稿

amaguri
amaguri

スコア227

test CHANGED
File without changes
test CHANGED
@@ -18,9 +18,9 @@
18
18
 
19
19
 
20
20
 
21
- //そのデータに"TOK_INSERT|TOK_CREATETABLE|TOK_CREATEDATABASE|TOK_DROPDATABASE|TOK_DROPTABLE"に含まれるかの確認をする。
21
+ //u_typeに"insert|create table|create database|drop database|drop tablegが含まれるかの確認をする。
22
22
 
23
- if( eregi($u_type,"TOK_INSERT|TOK_CREATETABLE|TOK_CREATEDATABASE|TOK_DROPDATABASE|TOK_DROPTABLE")){
23
+ if( eregi($u_type,"insert|create table|create database|drop database|drop table")){
24
24
 
25
25
 
26
26
 

6

文法の修正

2016/07/25 01:54

投稿

amaguri
amaguri

スコア227

test CHANGED
File without changes
test CHANGED
@@ -1,322 +1,6 @@
1
- $results=CommonComponent::CheckExplainParce($u_userid,$u_id);
1
+ 下記の文を$resultsから一つずつデータを出して処理する
2
2
 
3
- 下記コード取得した
4
-
5
- $resultsのから
6
-
7
-
8
-
9
- データを一個ずつデータを取り出し
10
-
11
-
12
-
13
- $results[$cnt]->typemで宣言されたクエリが"TOK_INSERT|TOK_CREATETABLE|TOK_CREATEDATABASE|TOK_DROPDATABASE|TOK_DROPTABLE"に含まれるかの確認をする。
14
-
15
- その文字が含まれるなら
16
-
17
- $results[$cnt]->dbでDBを取得しprivate_hibe_dbsに登録されたDBかの確認をする。
18
-
19
-
20
-
21
- $results[$cnt]->dbがprivate_hibe_dbsに登録されたDBなら
22
-
23
- allow_ipsに登録したIPの範囲内かチェックをする。
24
-
25
- IPが範囲に含まれないならエラーを返す
26
-
27
-
28
-
29
- $results[$cnt]->dbがprivate_hibe_dbsに登録されたDBでないなら
30
-
31
- allow_ipsに登録したIPの範囲内かチェックをする。
32
-
33
- IPが範囲に含まれないならエラーを返す
34
-
35
-
36
-
37
- というループ文を書きたいです
38
-
39
- 詳細は一番下のコードを見ていただきたいです。
40
-
41
-
42
-
43
-
44
-
45
- $resultsの解読文
46
-
47
- ```php
48
-
49
- function CheckExplainParce($u_userid,$u_id){
50
-
51
- $cnt=0;//$cnt=無効
52
-
53
- $results=array();//結果=配列()
54
-
55
- $cur_db="default";//$cur_db(使用DB)="default"
56
-
57
- $sql_query="";//$sql_query=""(クエリ種類?)存在価値ある??
58
-
59
- $sql_query_no=0;//$sql_query_no=無効
60
-
61
- $exp_file=DIR_RESULT."/${u_userid}/${u_id}.exp";//大事
62
-
63
-
64
-
65
- if ( !($fp=fopen($exp_file,"r")) ){ return $results; }//fopen()=ファイルをオープン。 $fp=開けた$exp_fileが"r"ではない場合 $resultsを返す。
66
-
67
- while(!feof($fp)){//while=ループ文 feof — ファイルポインタがファイル終端に達しているかどうか調べる $fのファイルポインタがファイル終端に達していない場合以下をループする。
68
-
69
-
70
-
71
-
72
-
73
- $data = fgets($fp, 10240); //fgets — ファイルポインタから1行取得する $data = ($fp, 10240)でファイルポインタから1行取得する
74
-
75
- $data=str_replace(array("\r\n","\n","\r"), '', $data);//str_replace — 検索文字列に一致したすべての文字列を置換する 配列(改行、改行、改行),空白,fgets($fp, 10240); かいぎょうを空白に変換
76
-
77
- if ( eregi("^use ",$data) ){//eregi — 大文字小文字を区別せずに正規表現によるマッチングを行う useからはじまる、$data(どうなってるか不明?)の場合
78
-
79
- list($dummy,$cur_db)=split("[ ;]",$data); //list — 配列と同様の形式で、複数の変数への代入を行う split — 正規表現により文字列を分割し、配列に格納する ($dummy,$cur_db("default"?))=("[ ;]"を,$dataに配列に格納する)
80
-
81
- }"[ ;]",$data//よくわからない
82
-
83
-
84
-
85
- //クエリ
86
-
87
- if ( eregi("^explain ",$data) ){//explainからはじまる,$data(どうなっているか不明)の場合
88
-
89
- $sql_query=substr($data,8);//substr — 文字列の一部分を返す $sql_query=($dataの8)を返す
90
-
91
- //$this->log("QUERY=[$sql_query]",LOG_DEBUG);
92
-
93
- $sql_query_no++;//$sql_query_noに1を足す
94
-
95
- }
96
-
97
-
98
-
99
- // トークン部分の解析
100
-
101
- //
102
-
103
- // 【解析仕様】
104
-
105
- // ・トークンは『ABSTRACT SYNTAX TREE』行と『STAGE DEPENDENCIES』行の間にある
106
-
107
- // ・データベース名及びテーブル名(以降 オブジェクト部)は次のターゲットトークンの次の行以降にインデントされて定義されている
108
-
109
- // → TOK_TABNAME、TOK_TABTYPE、TOK_ALTERTABLE、TOK_TABTYPE、TOK_SHOW
110
-
111
- // ・オブジェクト部には『データベース名行 + テーブル名行』または『テーブル名行』のパターンがある
112
-
113
- // ・オブジェクト部の範囲はターゲットトークンのインデントと同じまたは浅い行の前行までとする
114
-
115
- // ・オブジェクト部に別のターゲットトークンがあった場合、オブジェクト部はその前行までとし、別のターゲットトークン以降を新しいオブジェクト部として処理する
116
-
117
- //
118
-
119
- if (eregi("^ABSTRACT SYNTAX TREE", $data) and !feof($fp)) {//^ABSTRACT SYNTAX TREE"からはじまる$data(どうなってるか不明?)と$fpがファイルポインタがファイル終端に達していない場合
120
-
121
- $data = fgets($fp, 10240);//$data = ($fp, 10240)でファイルポインタから次の1行取得する
122
-
123
- $data = str_replace(array("\r\n","\n","\r"), '', $data);//配列(改行、改行、改行),空白,fgets($fp, 10240); かいぎょうを空白に変換
124
-
125
-
126
-
127
- $sql_type="";//$sql_type=空白
128
-
129
-
130
-
131
- while (!feof($fp)) {//$fのファイルポインタがファイル終端に達していない場合以下をループする。
132
-
133
- if (eregi("^STAGE DEPENDENCIES", $data)) { break; }//STAGE DEPENDENCIESからはじまる$data(どうなってるか不明?)の場合、ループ終了
134
-
135
-
136
-
137
- $sql_type = CommonComponent::CheckTOK2SQLtype(trim($data), $sql_type);//トークン名からクエリに変換 //trim — 文字列の先頭および末尾にあるホワイトスペースを取り除く
138
-
139
-
140
-
141
- if (eregi("^TOK_TABNAME|^TOK_TABTYPE|^TOK_ALTERTABLE|^TOK_TABTYPE|^TOK_SHOW|^TOK_CREATEDATABASE|^TOK_DROPDATABASE", trim($data))) {//trim — 文字列の先頭および末尾にあるホワイトスペースを取り除く "^TOK_TABNAME|^TOK_TABTYPE|^TOK_ALTERTABLE|^TOK_TABTYPE|^TOK_SHOW|^TOK_CREATEDATABASE|^TOK_DROPDATABASE"からはじまる(文字列の先頭および末尾にあるホワイトスペースを取り除いた$data())の場合
142
-
143
- $tok_indent = strlen($data) - strlen(ltrim($data));//strlen — 文字列の長さを得る ltrim — 文字列の最初から空白 (もしくはその他の文字) を取り除く $tok_indent = ($data)の長さ - (($data))の文字列の最初から空白 (もしくはその他の文字) を取り除いた長さ
144
-
145
- $token = trim($data);// $token =文字列の先頭および末尾にあるホワイトスペースを取り除いた($data)(何が入っているかさっぱり)
146
-
147
-
148
-
149
- $data = fgets($fp, 10240);//$data = ($fp, 10240)でファイルポインタから次の1行取得する
150
-
151
- $data = str_replace(array("\r\n","\n","\r"), '', $data);//配列(改行、改行、改行),空白,fgets($fp, 10240); かいぎょうを空白に変換
152
-
153
-
154
-
155
- $objects = array();//$objects = 配列()
156
-
157
-
158
-
159
- while (!feof($fp)) {//fpがファイルポインタがファイル終端に達していない場合
160
-
161
- if (eregi("^TOK_TABNAME|^TOK_TABTYPE|^TOK_ALTERTABLE|^TOK_TABTYPE|^TOK_SHOW|^TOK_CREATEDATABASE|^TOK_DROPDATABASE", trim($data))) { break; }//"^TOK_TABNAME|^TOK_TABTYPE|^TOK_ALTERTABLE|^TOK_TABTYPE|^TOK_SHOW|^TOK_CREATEDATABASE|^TOK_DROPDATABASE"からはじまる(文字列の先頭および末尾にあるホワイトスペースを取り除いた$data())の場合,ループ終了 break=ループ終了
162
-
163
- if ($tok_indent >= (strlen($data) - strlen(ltrim($data)))) { break; }//>= より多いか等しい $tok_indentの長さが($data) -(($data))の文字列の最初から空白 (もしくはその他の文字) を取り除いた長さと等しいかそれより多い場合、ループ終了
164
-
165
-
166
-
167
- if (!eregi("^TOK_|\.", trim($data))) {//^TOK_|\.からはじまる文字列の先頭および末尾にあるホワイトスペースを取り除いた$data(どうなってるか不明?)ではない場合
168
-
169
- $objects[] = trim($data);//$objectsの[]の中身=先頭および末尾にあるホワイトスペースを取り除いた$data(どうなってるか不明?)
170
-
171
- }
172
-
173
- $data = fgets($fp, 10240);//$data = ($fp, 10240)でファイルポインタから1行取得する
174
-
175
- $data=str_replace(array("\r\n","\n","\r"), '', $data);//配列(改行、改行、改行),空白,fgets($fp, 10240); かいぎょうを空白に変換
176
-
177
- }
178
-
179
-
180
-
181
- if (count($objects) >= 2) {//count — 変数に含まれるすべての要素、 あるいは$objectsつまりarray()に含まれる何かの数を数える $objectsが2と等しいかそれより大きい場合
182
-
183
- $results[$cnt]->no = $sql_query_no;
184
-
185
- $results[$cnt]->type = $sql_type;
186
-
187
- $results[$cnt]->db = $objects[0];
188
-
189
- $results[$cnt]->tbl = $objects[1];
190
-
191
- $cnt++;
192
-
193
- } else if (count($objects) == 1) {//上のifが偽で$objectsつまりarray()が1と等しい場合
194
-
195
- $results[$cnt]->no = $sql_query_no;
196
-
197
- $results[$cnt]->type = $sql_type;
198
-
199
- if (eregi("^TOK_SHOW|^TOK_CREATEDATABASE|^TOK_DROPDATABASE", $token)) {//"^TOK_SHOW|^TOK_CREATEDATABASE|^TOK_DROPDATABASE"からはじまる $tokenつまり(trim($data)の場合
200
-
201
- $results[$cnt]->db = $objects[0];
202
-
203
- $results[$cnt]->tbl = "";
204
-
205
- } else {//上のifが偽の場合
206
-
207
- $results[$cnt]->db = $cur_db;
208
-
209
- $results[$cnt]->tbl = $objects[0];
210
-
211
- }
212
-
213
- $cnt++;
214
-
215
- } else if (count($objects) == 0 and eregi("^TOK_SHOW", $token)) {//上のeleseifが偽で$objectsつまりarray()が0と等しい&"^TOK_SHOW"からはじまる $tokenつまり(trim($data)の場合
216
-
217
- $results[$cnt]->no = $sql_query_no;
218
-
219
- $results[$cnt]->type = $sql_type;
220
-
221
- $results[$cnt]->db = $cur_db;
222
-
223
- $results[$cnt]->tbl = "";
224
-
225
- $cnt++;
226
-
227
- }
228
-
229
- } else {//上のif,eleseifが全て偽の場合
230
-
231
- $data = fgets($fp, 10240);//$data = ($fp, 10240)でファイルポインタから1行取得する
232
-
233
- $data = str_replace(array("\r\n","\n","\r"), '', $data);//配列(改行、改行、改行),空白,fgets($fp, 10240);
234
-
235
- }
236
-
237
- }
238
-
239
-
240
-
241
- $sql_query = "";//$sql_query = 空白
242
-
243
- }
244
-
245
- }
246
-
247
- fclose($fp);//fclose — オープンされたファイルポインタをクローズする $fpをクローズする
248
-
249
- return $results;//$resultsを返す。
250
-
251
- }
252
-
253
-
254
-
255
- //トークン名からクエリに変換
256
-
257
- function CheckTOK2SQLtype($data,$sql_type){
258
-
259
- if ( $data == "TOK_DESCTABLE" ){ return "desc"; }
260
-
261
- if ( $data == "TOK_CREATETABLE" ){ return "create table"; }
262
-
263
- if ( $data == "TOK_TABREF" ){ return "select"; }
264
-
265
- if ( $data == "TOK_INSERT" ){ return "insert"; }
266
-
267
- if ( $data == "TOK_DROPTABLE" ){ return "drop table"; }
268
-
269
- if ( eregi("^TOK_SHOW",$data) ){ return "show"; }
270
-
271
- if ( eregi("^TOK_ALTER",$data) ){ return "alter table"; }
272
-
273
-
274
-
275
- if ( $data == "TOK_CREATEDATABASE" ){ return "create database"; }
276
-
277
- if ( $data == "TOK_DROPDATABASE" ){ return "drop database"; }
278
-
279
-
280
-
281
- return $sql_type;
282
-
283
- }
284
-
285
-
286
-
287
-
288
-
289
- ```
290
-
291
-
292
-
293
- これでおそらく
294
-
295
- $results[$cnt]->db;
296
-
297
- $results[$cnt]->type;
298
-
299
- データの取得ができると考えています。
300
-
301
- ```php
302
-
303
- $results=CommonComponent::CheckExplainParce($u_userid,$u_id);
304
-
305
-
306
-
307
- $u_db=$results[$cnt]->db;
308
-
309
- $results[$cnt]->type;
310
-
311
-
312
-
313
- ```
314
-
315
-
316
-
317
- $resultsから一つずつデータを取得し確認するため
318
-
319
- 下記のプログラムをループで書きたいです。。
3
+ ループ文に書き直したいのですがどうしたらいいでしょうか?
320
4
 
321
5
 
322
6
 

5

修正

2016/07/22 09:34

投稿

amaguri
amaguri

スコア227

test CHANGED
File without changes
test CHANGED
File without changes

4

修正

2016/07/22 09:24

投稿

amaguri
amaguri

スコア227

test CHANGED
File without changes
test CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
 
8
8
 
9
- $results[$cnt]->dbからデータを一個ずつデータを取り出し
9
+ データを一個ずつデータを取り出し
10
10
 
11
11
 
12
12
 

3

情報の追加

2016/07/22 09:11

投稿

amaguri
amaguri

スコア227

test CHANGED
File without changes
test CHANGED
@@ -2,23 +2,11 @@
2
2
 
3
3
  下記のコードで取得した
4
4
 
5
- $resultsのから$results[$cnt]->dbと$results[$cnt]->typemのデータを抽出したいのですがどう書けば抽出できるでしょうか?
6
-
7
- $results[$cnt]->db
8
-
9
- $results[$cnt]->typem
10
-
11
- のデータが複数の場合もあるので一つずつ取り出せるようなプログラムを書きたいです
12
-
13
-
14
-
15
- 取得した後、やりたいことが
16
-
17
- $resultsから
5
+ $resultsから
18
-
6
+
7
+
8
+
19
- $results[$cnt]->dbを取
9
+ $results[$cnt]->dbからデータ一個ずつデータをり出
20
-
21
- 一個ずつデータを取り出し
22
10
 
23
11
 
24
12
 
@@ -48,370 +36,380 @@
48
36
 
49
37
  というループ文を書きたいです
50
38
 
39
+ 詳細は一番下のコードを見ていただきたいです。
40
+
41
+
42
+
43
+
44
+
45
+ $resultsの解読文
46
+
47
+ ```php
48
+
49
+ function CheckExplainParce($u_userid,$u_id){
50
+
51
+ $cnt=0;//$cnt=無効
52
+
53
+ $results=array();//結果=配列()
54
+
55
+ $cur_db="default";//$cur_db(使用DB)="default"
56
+
57
+ $sql_query="";//$sql_query=""(クエリ種類?)存在価値ある??
58
+
59
+ $sql_query_no=0;//$sql_query_no=無効
60
+
61
+ $exp_file=DIR_RESULT."/${u_userid}/${u_id}.exp";//大事
62
+
63
+
64
+
65
+ if ( !($fp=fopen($exp_file,"r")) ){ return $results; }//fopen()=ファイルをオープン。 $fp=開けた$exp_fileが"r"ではない場合 $resultsを返す。
66
+
67
+ while(!feof($fp)){//while=ループ文 feof — ファイルポインタがファイル終端に達しているかどうか調べる $fのファイルポインタがファイル終端に達していない場合以下をループする。
68
+
69
+
70
+
71
+
72
+
73
+ $data = fgets($fp, 10240); //fgets — ファイルポインタから1行取得する $data = ($fp, 10240)でファイルポインタから1行取得する
74
+
75
+ $data=str_replace(array("\r\n","\n","\r"), '', $data);//str_replace — 検索文字列に一致したすべての文字列を置換する 配列(改行、改行、改行),空白,fgets($fp, 10240); かいぎょうを空白に変換
76
+
77
+ if ( eregi("^use ",$data) ){//eregi — 大文字小文字を区別せずに正規表現によるマッチングを行う useからはじまる、$data(どうなってるか不明?)の場合
78
+
79
+ list($dummy,$cur_db)=split("[ ;]",$data); //list — 配列と同様の形式で、複数の変数への代入を行う split — 正規表現により文字列を分割し、配列に格納する ($dummy,$cur_db("default"?))=("[ ;]"を,$dataに配列に格納する)
80
+
81
+ }"[ ;]",$data//よくわからない
82
+
83
+
84
+
85
+ //クエリ
86
+
87
+ if ( eregi("^explain ",$data) ){//explainからはじまる,$data(どうなっているか不明)の場合
88
+
89
+ $sql_query=substr($data,8);//substr — 文字列の一部分を返す $sql_query=($dataの8)を返す
90
+
91
+ //$this->log("QUERY=[$sql_query]",LOG_DEBUG);
92
+
93
+ $sql_query_no++;//$sql_query_noに1を足す
94
+
95
+ }
96
+
97
+
98
+
99
+ // トークン部分の解析
100
+
101
+ //
102
+
103
+ // 【解析仕様】
104
+
105
+ // ・トークンは『ABSTRACT SYNTAX TREE』行と『STAGE DEPENDENCIES』行の間にある
106
+
107
+ // ・データベース名及びテーブル名(以降 オブジェクト部)は次のターゲットトークンの次の行以降にインデントされて定義されている
108
+
109
+ // → TOK_TABNAME、TOK_TABTYPE、TOK_ALTERTABLE、TOK_TABTYPE、TOK_SHOW
110
+
111
+ // ・オブジェクト部には『データベース名行 + テーブル名行』または『テーブル名行』のパターンがある
112
+
113
+ // ・オブジェクト部の範囲はターゲットトークンのインデントと同じまたは浅い行の前行までとする
114
+
115
+ // ・オブジェクト部に別のターゲットトークンがあった場合、オブジェクト部はその前行までとし、別のターゲットトークン以降を新しいオブジェクト部として処理する
116
+
117
+ //
118
+
119
+ if (eregi("^ABSTRACT SYNTAX TREE", $data) and !feof($fp)) {//^ABSTRACT SYNTAX TREE"からはじまる$data(どうなってるか不明?)と$fpがファイルポインタがファイル終端に達していない場合
120
+
121
+ $data = fgets($fp, 10240);//$data = ($fp, 10240)でファイルポインタから次の1行取得する
122
+
123
+ $data = str_replace(array("\r\n","\n","\r"), '', $data);//配列(改行、改行、改行),空白,fgets($fp, 10240); かいぎょうを空白に変換
124
+
125
+
126
+
127
+ $sql_type="";//$sql_type=空白
128
+
129
+
130
+
131
+ while (!feof($fp)) {//$fのファイルポインタがファイル終端に達していない場合以下をループする。
132
+
133
+ if (eregi("^STAGE DEPENDENCIES", $data)) { break; }//STAGE DEPENDENCIESからはじまる$data(どうなってるか不明?)の場合、ループ終了
134
+
135
+
136
+
137
+ $sql_type = CommonComponent::CheckTOK2SQLtype(trim($data), $sql_type);//トークン名からクエリに変換 //trim — 文字列の先頭および末尾にあるホワイトスペースを取り除く
138
+
139
+
140
+
141
+ if (eregi("^TOK_TABNAME|^TOK_TABTYPE|^TOK_ALTERTABLE|^TOK_TABTYPE|^TOK_SHOW|^TOK_CREATEDATABASE|^TOK_DROPDATABASE", trim($data))) {//trim — 文字列の先頭および末尾にあるホワイトスペースを取り除く "^TOK_TABNAME|^TOK_TABTYPE|^TOK_ALTERTABLE|^TOK_TABTYPE|^TOK_SHOW|^TOK_CREATEDATABASE|^TOK_DROPDATABASE"からはじまる(文字列の先頭および末尾にあるホワイトスペースを取り除いた$data())の場合
142
+
143
+ $tok_indent = strlen($data) - strlen(ltrim($data));//strlen — 文字列の長さを得る ltrim — 文字列の最初から空白 (もしくはその他の文字) を取り除く $tok_indent = ($data)の長さ - (($data))の文字列の最初から空白 (もしくはその他の文字) を取り除いた長さ
144
+
145
+ $token = trim($data);// $token =文字列の先頭および末尾にあるホワイトスペースを取り除いた($data)(何が入っているかさっぱり)
146
+
147
+
148
+
149
+ $data = fgets($fp, 10240);//$data = ($fp, 10240)でファイルポインタから次の1行取得する
150
+
151
+ $data = str_replace(array("\r\n","\n","\r"), '', $data);//配列(改行、改行、改行),空白,fgets($fp, 10240); かいぎょうを空白に変換
152
+
153
+
154
+
155
+ $objects = array();//$objects = 配列()
156
+
157
+
158
+
159
+ while (!feof($fp)) {//fpがファイルポインタがファイル終端に達していない場合
160
+
161
+ if (eregi("^TOK_TABNAME|^TOK_TABTYPE|^TOK_ALTERTABLE|^TOK_TABTYPE|^TOK_SHOW|^TOK_CREATEDATABASE|^TOK_DROPDATABASE", trim($data))) { break; }//"^TOK_TABNAME|^TOK_TABTYPE|^TOK_ALTERTABLE|^TOK_TABTYPE|^TOK_SHOW|^TOK_CREATEDATABASE|^TOK_DROPDATABASE"からはじまる(文字列の先頭および末尾にあるホワイトスペースを取り除いた$data())の場合,ループ終了 break=ループ終了
162
+
163
+ if ($tok_indent >= (strlen($data) - strlen(ltrim($data)))) { break; }//>= より多いか等しい $tok_indentの長さが($data) -(($data))の文字列の最初から空白 (もしくはその他の文字) を取り除いた長さと等しいかそれより多い場合、ループ終了
164
+
165
+
166
+
167
+ if (!eregi("^TOK_|\.", trim($data))) {//^TOK_|\.からはじまる文字列の先頭および末尾にあるホワイトスペースを取り除いた$data(どうなってるか不明?)ではない場合
168
+
169
+ $objects[] = trim($data);//$objectsの[]の中身=先頭および末尾にあるホワイトスペースを取り除いた$data(どうなってるか不明?)
170
+
171
+ }
172
+
173
+ $data = fgets($fp, 10240);//$data = ($fp, 10240)でファイルポインタから1行取得する
174
+
175
+ $data=str_replace(array("\r\n","\n","\r"), '', $data);//配列(改行、改行、改行),空白,fgets($fp, 10240); かいぎょうを空白に変換
176
+
177
+ }
178
+
179
+
180
+
181
+ if (count($objects) >= 2) {//count — 変数に含まれるすべての要素、 あるいは$objectsつまりarray()に含まれる何かの数を数える $objectsが2と等しいかそれより大きい場合
182
+
183
+ $results[$cnt]->no = $sql_query_no;
184
+
185
+ $results[$cnt]->type = $sql_type;
186
+
187
+ $results[$cnt]->db = $objects[0];
188
+
189
+ $results[$cnt]->tbl = $objects[1];
190
+
191
+ $cnt++;
192
+
193
+ } else if (count($objects) == 1) {//上のifが偽で$objectsつまりarray()が1と等しい場合
194
+
195
+ $results[$cnt]->no = $sql_query_no;
196
+
197
+ $results[$cnt]->type = $sql_type;
198
+
199
+ if (eregi("^TOK_SHOW|^TOK_CREATEDATABASE|^TOK_DROPDATABASE", $token)) {//"^TOK_SHOW|^TOK_CREATEDATABASE|^TOK_DROPDATABASE"からはじまる $tokenつまり(trim($data)の場合
200
+
201
+ $results[$cnt]->db = $objects[0];
202
+
203
+ $results[$cnt]->tbl = "";
204
+
205
+ } else {//上のifが偽の場合
206
+
207
+ $results[$cnt]->db = $cur_db;
208
+
209
+ $results[$cnt]->tbl = $objects[0];
210
+
211
+ }
212
+
213
+ $cnt++;
214
+
215
+ } else if (count($objects) == 0 and eregi("^TOK_SHOW", $token)) {//上のeleseifが偽で$objectsつまりarray()が0と等しい&"^TOK_SHOW"からはじまる $tokenつまり(trim($data)の場合
216
+
217
+ $results[$cnt]->no = $sql_query_no;
218
+
219
+ $results[$cnt]->type = $sql_type;
220
+
221
+ $results[$cnt]->db = $cur_db;
222
+
223
+ $results[$cnt]->tbl = "";
224
+
225
+ $cnt++;
226
+
227
+ }
228
+
229
+ } else {//上のif,eleseifが全て偽の場合
230
+
231
+ $data = fgets($fp, 10240);//$data = ($fp, 10240)でファイルポインタから1行取得する
232
+
233
+ $data = str_replace(array("\r\n","\n","\r"), '', $data);//配列(改行、改行、改行),空白,fgets($fp, 10240);
234
+
235
+ }
236
+
237
+ }
238
+
239
+
240
+
241
+ $sql_query = "";//$sql_query = 空白
242
+
243
+ }
244
+
245
+ }
246
+
247
+ fclose($fp);//fclose — オープンされたファイルポインタをクローズする $fpをクローズする
248
+
249
+ return $results;//$resultsを返す。
250
+
251
+ }
252
+
253
+
254
+
255
+ //トークン名からクエリに変換
256
+
257
+ function CheckTOK2SQLtype($data,$sql_type){
258
+
259
+ if ( $data == "TOK_DESCTABLE" ){ return "desc"; }
260
+
261
+ if ( $data == "TOK_CREATETABLE" ){ return "create table"; }
262
+
263
+ if ( $data == "TOK_TABREF" ){ return "select"; }
264
+
265
+ if ( $data == "TOK_INSERT" ){ return "insert"; }
266
+
267
+ if ( $data == "TOK_DROPTABLE" ){ return "drop table"; }
268
+
269
+ if ( eregi("^TOK_SHOW",$data) ){ return "show"; }
270
+
271
+ if ( eregi("^TOK_ALTER",$data) ){ return "alter table"; }
272
+
273
+
274
+
275
+ if ( $data == "TOK_CREATEDATABASE" ){ return "create database"; }
276
+
277
+ if ( $data == "TOK_DROPDATABASE" ){ return "drop database"; }
278
+
279
+
280
+
281
+ return $sql_type;
282
+
283
+ }
284
+
51
285
 
52
286
 
53
287
 
54
288
 
55
289
  ```
56
290
 
57
- function CheckExplainParce($u_userid,$u_id){
58
-
59
- $cnt=0;//$cnt=無効
60
-
61
- $results=array();//結果=配列()
62
-
63
- $cur_db="default";//$cur_db(使用DB)="default"
64
-
65
- $sql_query="";//$sql_query=""(クエリ種類?)存在価値あ??
66
-
67
- $sql_query_no=0;//$sql_query_no=無効
68
-
69
- $exp_file=DIR_RESULT."/${u_userid}/${u_id}.exp";//大事
70
-
71
-
72
-
73
- if ( !($fp=fopen($exp_file,"r")) ){ return $results; }//fopen()=ファイルをオープン。 $fp=開けた$exp_fileが"r"ではない場合 $resultsを返す。
74
-
75
- while(!feof($fp)){//while=ループ文 feof — ファイルポインタがファイル終端に達しているかどうか調べる $fのファイルポインタがファイル終端に達していない場合以下をループする。
76
-
77
-
78
-
79
-
80
-
81
- $data = fgets($fp, 10240); //fgets — ファイルポインタから1行取得する $data = ($fp, 10240)でファイルポインタから1行取得する
82
-
83
- $data=str_replace(array("\r\n","\n","\r"), '', $data);//str_replace — 検索文字列にべての文字列を置換す 配列(改行、改行、改行),空白,fgets($fp, 10240); かいぎょうを空白に変換
84
-
85
- if ( eregi("^use ",$data) ){//eregi — 大文字小文字を区別せずに正規表現によるマッチングを行う useからはじまる、$data(どうなってるか不明?)の場合
86
-
87
- list($dummy,$cur_db)=split("[ ;]",$data); //list — 配列と同様の形式で、複数の変数への代入を行う split — 正規表現により文字列を分割し、配列に格納する ($dummy,$cur_db("default"?))=("[ ;]"を,$dataに配列に格納する)
88
-
89
- }"[ ;]",$data//よくわからない
90
-
91
-
92
-
93
- //クエリ
94
-
95
- if ( eregi("^explain ",$data) ){//explainからはじまる,$data(どうなっているか不明)の場合
96
-
97
- $sql_query=substr($data,8);//substr — 文字列の一部分を返す $sql_query=($dataの8)返す
98
-
99
- //$this->log("QUERY=[$sql_query]",LOG_DEBUG);
100
-
101
- $sql_query_no++;//$sql_query_noに1を足す
102
-
103
- }
104
-
105
-
106
-
107
- // トークン部分の解析
108
-
109
- //
110
-
111
- // 【解析仕様】
112
-
113
- // ・トークンは『ABSTRACT SYNTAX TREE』行と『STAGE DEPENDENCIES』行の間にある
114
-
115
- // ・データベース名及びテーブル名(以降 オブジェクト部)は次のターゲットトークンの次の行以降にインデントされて定義されている
116
-
117
- // TOK_TABNAME、TOK_TABTYPE、TOK_ALTERTABLE、TOK_TABTYPE、TOK_SHOW
118
-
119
- // ・オブジェクト部には『データベース名行 + テーブル名行』または『テーブル名行』のパターンがある
120
-
121
- // ・オブジェクト部範囲はターゲットトークンインデントと同じまたは浅い行の前行までとする
122
-
123
- // ・オブジェクト部に別のターゲットトークンがあった場合、オブジェクト部はその前行までとし、別のターゲットトークン以降を新しいオブジェクト部として処理する
124
-
125
- //
126
-
127
- if (eregi("^ABSTRACT SYNTAX TREE", $data) and !feof($fp)) {//^ABSTRACT SYNTAX TREE"からはじまる$data(どうなってるか不明?)と$fpがファイルポインタがファイル終端に達していない場合
128
-
129
- $data = fgets($fp, 10240);//$data = ($fp, 10240)でファイルポインタから次の1行取得する
130
-
131
- $data = str_replace(array("\r\n","\n","\r"), '', $data);//配列(改行、改行、改行),空白,fgets($fp, 10240); かいぎょうを空白に変換
132
-
133
-
134
-
135
- $sql_type="";//$sql_type=空白
136
-
137
-
138
-
139
- while (!feof($fp)) {//$fのファイルポインタがファイル終端に達していない場合以下をループする。
140
-
141
- if (eregi("^STAGE DEPENDENCIES", $data)) { break; }//STAGE DEPENDENCIESからはじまる$data(どうなってるか不明?)の場合、ループ終了
142
-
143
-
144
-
145
- $sql_type = CommonComponent::CheckTOK2SQLtype(trim($data), $sql_type);//トークン名からクエリに変換 //trim — 文字列の先頭および末尾にあるホワイトスペースを取り除く
146
-
147
-
148
-
149
- if (eregi("^TOK_TABNAME|^TOK_TABTYPE|^TOK_ALTERTABLE|^TOK_TABTYPE|^TOK_SHOW|^TOK_CREATEDATABASE|^TOK_DROPDATABASE", trim($data))) {//trim — 文字列の先頭および末尾にあるホワイトスペースを取り除く "^TOK_TABNAME|^TOK_TABTYPE|^TOK_ALTERTABLE|^TOK_TABTYPE|^TOK_SHOW|^TOK_CREATEDATABASE|^TOK_DROPDATABASE"からはじまる(文字列の先頭および末尾にあるホワイトスペースを取り除いた$data())の場合
150
-
151
- $tok_indent = strlen($data) - strlen(ltrim($data));//strlen 文字列の長さを得る ltrim — 文字列の最初から空白 (もしくはその他の文字) を取り除く $tok_indent = ($data)の長さ - (($data))の文字列の最初から空白 (もしくはその他の文字) を取り除いた長さ
152
-
153
- $token = trim($data);// $token =文字列の先頭および末尾にあるホワイトスペースを取り除いた($data)(何が入っているかさっぱり)
154
-
155
-
156
-
157
- $data = fgets($fp, 10240);//$data = ($fp, 10240)でファイルポインタから次の1行取得する
158
-
159
- $data = str_replace(array("\r\n","\n","\r"), '', $data);//配列(改行、改行、改行),空白,fgets($fp, 10240); かいぎょうを空白に変換
160
-
161
-
162
-
163
- $objects = array();//$objects = 配列()
164
-
165
-
166
-
167
- while (!feof($fp)) {//fpがファイルポインタがファイル終端に達していない場合
168
-
169
- if (eregi("^TOK_TABNAME|^TOK_TABTYPE|^TOK_ALTERTABLE|^TOK_TABTYPE|^TOK_SHOW|^TOK_CREATEDATABASE|^TOK_DROPDATABASE", trim($data))) { break; }//"^TOK_TABNAME|^TOK_TABTYPE|^TOK_ALTERTABLE|^TOK_TABTYPE|^TOK_SHOW|^TOK_CREATEDATABASE|^TOK_DROPDATABASE"からはじまる(文字列の先頭および末尾にあるホワイトスペースを取り除いた$data())の場合,ループ終了 break=ループ終了
170
-
171
- if ($tok_indent >= (strlen($data) - strlen(ltrim($data)))) { break; }//>= より多いか等しい $tok_indentの長さが($data) -(($data))の文字列の最初から空白 (もしくはその他の文字) を取り除いた長さと等しいかそれより多い場合、ループ終了
172
-
173
-
174
-
175
- if (!eregi("^TOK_|\.", trim($data))) {//^TOK_|\.からはじまる文字列の先頭および末尾にあるホワイトスペースを取り除いた$data(どうなってるか不明?)ではない場合
176
-
177
- $objects[] = trim($data);//$objectsの[]の中身=先頭および末尾にあるホワイトスペースを取り除いた$data(どうなってるか不明?)
178
-
179
- }
180
-
181
- $data = fgets($fp, 10240);//$data = ($fp, 10240)でファイルポインタから1行取得する
182
-
183
- $data=str_replace(array("\r\n","\n","\r"), '', $data);//配列(改行、改行、改行),空白,fgets($fp, 10240); かいぎょうを空白に変換
184
-
185
- }
186
-
187
-
188
-
189
- if (count($objects) >= 2) {//count — 変数に含まれるすべての要素、 あるいは$objectsつまりarray()に含まれる何かの数を数える $objectsが2と等しいかそれより大きい場合
190
-
191
- $results[$cnt]->no = $sql_query_no;
192
-
193
- $results[$cnt]->type = $sql_type;
194
-
195
- $results[$cnt]->db = $objects[0];
196
-
197
- $results[$cnt]->tbl = $objects[1];
198
-
199
- $cnt++;
200
-
201
- } else if (count($objects) == 1) {//上のifが偽で$objectsつまりarray()が1と等しい場合
202
-
203
- $results[$cnt]->no = $sql_query_no;
204
-
205
- $results[$cnt]->type = $sql_type;
206
-
207
- if (eregi("^TOK_SHOW|^TOK_CREATEDATABASE|^TOK_DROPDATABASE", $token)) {//"^TOK_SHOW|^TOK_CREATEDATABASE|^TOK_DROPDATABASE"からはじまる $tokenつまり(trim($data)の場合
208
-
209
- $results[$cnt]->db = $objects[0];
210
-
211
- $results[$cnt]->tbl = "";
212
-
213
- } else {//上のifが偽の場合
214
-
215
- $results[$cnt]->db = $cur_db;
216
-
217
- $results[$cnt]->tbl = $objects[0];
218
-
219
- }
220
-
221
- $cnt++;
222
-
223
- } else if (count($objects) == 0 and eregi("^TOK_SHOW", $token)) {//上のeleseifが偽で$objectsつまりarray()が0と等しい&"^TOK_SHOW"からはじまる $tokenつまり(trim($data)の場合
224
-
225
- $results[$cnt]->no = $sql_query_no;
226
-
227
- $results[$cnt]->type = $sql_type;
228
-
229
- $results[$cnt]->db = $cur_db;
230
-
231
- $results[$cnt]->tbl = "";
232
-
233
- $cnt++;
234
-
235
- }
236
-
237
- } else {//上のif,eleseifが全て偽の場合
238
-
239
- $data = fgets($fp, 10240);//$data = ($fp, 10240)でファイルポインタから1行取得する
240
-
241
- $data = str_replace(array("\r\n","\n","\r"), '', $data);//配列(改行、改行、改行),空白,fgets($fp, 10240);
242
-
243
- }
244
-
245
- }
246
-
247
-
248
-
249
- $sql_query = "";//$sql_query = 空白
250
-
251
- }
291
+
292
+
293
+ これでおそらく
294
+
295
+ $results[$cnt]->db;
296
+
297
+ $results[$cnt]->type
298
+
299
+ データの取得ができと考えています。
300
+
301
+ ```php
302
+
303
+ $results=CommonComponent::CheckExplainParce($u_userid,$u_id);
304
+
305
+
306
+
307
+ $u_db=$results[$cnt]->db;
308
+
309
+ $results[$cnt]->type;
310
+
311
+
312
+
313
+ ```
314
+
315
+
316
+
317
+ $resultsからつずつデータを取得確認するため
318
+
319
+ 下記のプロラムループで書きたいです。。
320
+
321
+
322
+
323
+
324
+
325
+ ```php
326
+
327
+ $results=CommonComponent::CheckExplainParce($u_userid,$u_id);
328
+
329
+
330
+
331
+ //$u_type=$results[$cnt]->type;で$resultsからデータ取得。
332
+
333
+ $u_type=$results[$cnt]->type;
334
+
335
+
336
+
337
+ //そのデータに"TOK_INSERT|TOK_CREATETABLE|TOK_CREATEDATABASE|TOK_DROPDATABASE|TOK_DROPTABLE"に含まれるかの確認をする。
338
+
339
+ if( eregi($u_type,"TOK_INSERT|TOK_CREATETABLE|TOK_CREATEDATABASE|TOK_DROPDATABASE|TOK_DROPTABLE")){
340
+
341
+
342
+
343
+ //対象のDBを$results[$cnt]->dbを$resultsから抽出
344
+
345
+ $u_db=$results[$cnt]->db;
346
+
347
+ //対象のDBが個人情報DBか識別
348
+
349
+ $dbcheck = $this->PrivateHiveDb->find('count', [
350
+
351
+ 'conditions' => ['PrivateHiveDb.hive_database' => $u_db]
352
+
353
+ ]);
354
+
355
+ //対象DBが個人情報系場合
356
+
357
+ if($dbcheck){
358
+
359
+ // 接続元IP情報
360
+
361
+ $ips=CommonComponent::IpCheck();
362
+
363
+
364
+
365
+ if (empty($ips)) {
366
+
367
+ $this->set("result" , array("result" => "error"));
368
+
369
+ return;
370
+
371
+ }
372
+
373
+ }else{
374
+
375
+ /参照系の場合
376
+
377
+ //対象のDBを$results[$cnt]->dbを$resultsから抽出
378
+
379
+ $u_db=$results[$cnt]->db;
380
+
381
+ //対象のDBが個人情報DBか識別
382
+
383
+ $dbcheck = $this->PrivateHiveDb->find('count', [
384
+
385
+ 'conditions' => ['PrivateHiveDb.hive_database' => $u_db]
386
+
387
+ ]);
388
+
389
+ //対象のDBが更新系の場合
390
+
391
+ if($dbcheck){
392
+
393
+ // 接続元IP情報
394
+
395
+ $ips=CommonComponent::IpCheck();
396
+
397
+
398
+
399
+ if (empty($ips)) {
400
+
401
+ $this->set("result" , array("result" => "error"));
402
+
403
+ return;
404
+
405
+ }
406
+
407
+ }
252
408
 
253
409
  }
254
410
 
255
- fclose($fp);//fclose — オープンされたファイルポインタをクローズする $fpをクローズする
256
-
257
- return $results;//$resultsを返す。
258
-
259
- }
260
-
261
-
262
-
263
- //トークン名からクエリに変換
264
-
265
- function CheckTOK2SQLtype($data,$sql_type){
266
-
267
- if ( $data == "TOK_DESCTABLE" ){ return "desc"; }
268
-
269
- if ( $data == "TOK_CREATETABLE" ){ return "create table"; }
270
-
271
- if ( $data == "TOK_TABREF" ){ return "select"; }
272
-
273
- if ( $data == "TOK_INSERT" ){ return "insert"; }
274
-
275
- if ( $data == "TOK_DROPTABLE" ){ return "drop table"; }
276
-
277
- if ( eregi("^TOK_SHOW",$data) ){ return "show"; }
278
-
279
- if ( eregi("^TOK_ALTER",$data) ){ return "alter table"; }
280
-
281
-
282
-
283
- if ( $data == "TOK_CREATEDATABASE" ){ return "create database"; }
284
-
285
- if ( $data == "TOK_DROPDATABASE" ){ return "drop database"; }
286
-
287
-
288
-
289
- return $sql_type;
290
-
291
- }
292
-
293
411
 
294
412
 
295
413
 
296
414
 
297
415
  ```
298
-
299
-
300
-
301
- 現在考えている書きたいコードとしては
302
-
303
- これをループで書きたいです
304
-
305
- ```php
306
-
307
- $results=CommonComponent::CheckExplainParce($u_userid,$u_id);
308
-
309
-
310
-
311
- $u_db=$results[$cnt]->db;
312
-
313
-
314
-
315
- $results[$cnt]->type;
316
-
317
-
318
-
319
- ```
320
-
321
-
322
-
323
- で取得できるのではないか、考えているので
324
-
325
-
326
-
327
- ```php
328
-
329
- $results=CommonComponent::CheckExplainParce($u_userid,$u_id);
330
-
331
-
332
-
333
- $resultsから$u_db=$results[$cnt]->db;のデータを一つだす
334
-
335
-
336
-
337
- そのデータには"TOK_INSERT|TOK_CREATETABLE|TOK_CREATEDATABASE|TOK_DROPDATABASE|TOK_DROPTABLE"に含まれるかの確認をする。
338
-
339
-
340
-
341
- if("TOK_INSERT|TOK_CREATETABLE|TOK_CREATEDATABASE|TOK_DROPDATABASE|TOK_DROPTABLE"に含む場合){
342
-
343
-
344
-
345
- //対象のDBを$results[$cnt]->dbを$resultsから抽出
346
-
347
- $u_db=$results[$cnt]->db;
348
-
349
- //対象のDBが個人情報DBか識別
350
-
351
- $dbcheck = $this->PrivateHiveDb->find('count', [
352
-
353
- 'conditions' => ['PrivateHiveDb.hive_database' => $u_db]
354
-
355
- ]);
356
-
357
- //対象のDBが個人情報系の場合
358
-
359
- if($dbcheck){
360
-
361
- // 接続元IP情報
362
-
363
- $ips=CommonComponent::IpCheck();
364
-
365
-
366
-
367
- if (empty($ips)) {
368
-
369
- $this->set("result" , array("result" => "error"));
370
-
371
- return;
372
-
373
- }
374
-
375
- }else{
376
-
377
- /参照系の場合
378
-
379
- //対象のDBを$results[$cnt]->dbを$resultsから抽出
380
-
381
- $u_db=$results[$cnt]->db;
382
-
383
- //対象のDBが個人情報DBか識別
384
-
385
- $dbcheck = $this->PrivateHiveDb->find('count', [
386
-
387
- 'conditions' => ['PrivateHiveDb.hive_database' => $u_db]
388
-
389
- ]);
390
-
391
- //対象のDBが更新系の場合
392
-
393
- if($dbcheck){
394
-
395
- // 接続元IP情報
396
-
397
- $ips=CommonComponent::IpCheck();
398
-
399
-
400
-
401
- if (empty($ips)) {
402
-
403
- $this->set("result" , array("result" => "error"));
404
-
405
- return;
406
-
407
- }
408
-
409
- }
410
-
411
- }
412
-
413
-
414
-
415
-
416
-
417
- ```

2

情報の追加

2016/07/22 09:10

投稿

amaguri
amaguri

スコア227

test CHANGED
@@ -1 +1 @@
1
- cakephp データの抽出方法
1
+ cakephp データの抽出方法 ループ文の書き方
test CHANGED
@@ -2,7 +2,51 @@
2
2
 
3
3
  下記のコードで取得した
4
4
 
5
- $resultsのから$results[$cnt]->dbと$results[$cnt]->typemを抽出したいのですがどう書けば抽出できるでしょうか?
5
+ $resultsのから$results[$cnt]->dbと$results[$cnt]->typemのデータを抽出したいのですがどう書けば抽出できるでしょうか?
6
+
7
+ $results[$cnt]->db
8
+
9
+ $results[$cnt]->typem
10
+
11
+ のデータが複数の場合もあるので一つずつ取り出せるようなプログラムを書きたいです
12
+
13
+
14
+
15
+ 取得した後、やりたいことが
16
+
17
+ $resultsから
18
+
19
+ $results[$cnt]->dbを取得し
20
+
21
+ 一個ずつデータを取り出し
22
+
23
+
24
+
25
+ $results[$cnt]->typemで宣言されたクエリが"TOK_INSERT|TOK_CREATETABLE|TOK_CREATEDATABASE|TOK_DROPDATABASE|TOK_DROPTABLE"に含まれるかの確認をする。
26
+
27
+ その文字が含まれるなら
28
+
29
+ $results[$cnt]->dbでDBを取得しprivate_hibe_dbsに登録されたDBかの確認をする。
30
+
31
+
32
+
33
+ $results[$cnt]->dbがprivate_hibe_dbsに登録されたDBなら
34
+
35
+ allow_ipsに登録したIPの範囲内かチェックをする。
36
+
37
+ IPが範囲に含まれないならエラーを返す
38
+
39
+
40
+
41
+ $results[$cnt]->dbがprivate_hibe_dbsに登録されたDBでないなら
42
+
43
+ allow_ipsに登録したIPの範囲内かチェックをする。
44
+
45
+ IPが範囲に含まれないならエラーを返す
46
+
47
+
48
+
49
+ というループ文を書きたいです
6
50
 
7
51
 
8
52
 
@@ -254,9 +298,9 @@
254
298
 
255
299
 
256
300
 
257
- 現在考えているコードとしては
301
+ 現在考えている書きたいコードとしては
302
+
258
-
303
+ これをループで書きたいです
259
-
260
304
 
261
305
  ```php
262
306
 
@@ -276,4 +320,98 @@
276
320
 
277
321
 
278
322
 
279
- で取得できるのではないか、考えているのですがどうでしょうか?
323
+ で取得できるのではないか、考えているので
324
+
325
+
326
+
327
+ ```php
328
+
329
+ $results=CommonComponent::CheckExplainParce($u_userid,$u_id);
330
+
331
+
332
+
333
+ $resultsから$u_db=$results[$cnt]->db;のデータを一つだす
334
+
335
+
336
+
337
+ そのデータには"TOK_INSERT|TOK_CREATETABLE|TOK_CREATEDATABASE|TOK_DROPDATABASE|TOK_DROPTABLE"に含まれるかの確認をする。
338
+
339
+
340
+
341
+ if("TOK_INSERT|TOK_CREATETABLE|TOK_CREATEDATABASE|TOK_DROPDATABASE|TOK_DROPTABLE"に含む場合){
342
+
343
+
344
+
345
+ //対象のDBを$results[$cnt]->dbを$resultsから抽出
346
+
347
+ $u_db=$results[$cnt]->db;
348
+
349
+ //対象のDBが個人情報DBか識別
350
+
351
+ $dbcheck = $this->PrivateHiveDb->find('count', [
352
+
353
+ 'conditions' => ['PrivateHiveDb.hive_database' => $u_db]
354
+
355
+ ]);
356
+
357
+ //対象のDBが個人情報系の場合
358
+
359
+ if($dbcheck){
360
+
361
+ // 接続元IP情報
362
+
363
+ $ips=CommonComponent::IpCheck();
364
+
365
+
366
+
367
+ if (empty($ips)) {
368
+
369
+ $this->set("result" , array("result" => "error"));
370
+
371
+ return;
372
+
373
+ }
374
+
375
+ }else{
376
+
377
+ /参照系の場合
378
+
379
+ //対象のDBを$results[$cnt]->dbを$resultsから抽出
380
+
381
+ $u_db=$results[$cnt]->db;
382
+
383
+ //対象のDBが個人情報DBか識別
384
+
385
+ $dbcheck = $this->PrivateHiveDb->find('count', [
386
+
387
+ 'conditions' => ['PrivateHiveDb.hive_database' => $u_db]
388
+
389
+ ]);
390
+
391
+ //対象のDBが更新系の場合
392
+
393
+ if($dbcheck){
394
+
395
+ // 接続元IP情報
396
+
397
+ $ips=CommonComponent::IpCheck();
398
+
399
+
400
+
401
+ if (empty($ips)) {
402
+
403
+ $this->set("result" , array("result" => "error"));
404
+
405
+ return;
406
+
407
+ }
408
+
409
+ }
410
+
411
+ }
412
+
413
+
414
+
415
+
416
+
417
+ ```

1

誤字修正

2016/07/22 08:57

投稿

amaguri
amaguri

スコア227

test CHANGED
File without changes
test CHANGED
@@ -268,7 +268,7 @@
268
268
 
269
269
 
270
270
 
271
- $results[$cnt]->typem
271
+ $results[$cnt]->type;
272
272
 
273
273
 
274
274