Subversion Repositories php-qbpwcf

Rev

Rev 170 | Rev 183 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
3 liveuser 1
<?php
2
 
3
/*
4
 
5
	QBPWCF, Quick Build PHP website Component base on Fedora Linux.
6
    Copyright (C) 2014~2025 Min-Jhin,Chen
7
 
8
    This file is part of QBPWCF.
9
 
10
    QBPWCF is free software: you can redistribute it and/or modify
11
    it under the terms of the GNU General Public License as published by
12
    the Free Software Foundation, either version 3 of the License, or
13
    (at your option) any later version.
14
 
15
    QBPWCF is distributed in the hope that it will be useful,
16
    but WITHOUT ANY WARRANTY; without even the implied warranty of
17
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
    GNU General Public License for more details.
19
 
20
    You should have received a copy of the GNU General Public License
21
    along with QBPWCF.  If not, see <http://www.gnu.org/licenses/>.
22
 
23
*/
24
namespace qbpwcf;
25
 
26
/*
27
類別說明:
28
跟mysql/mariadb操作有關的類別
29
備註:
30
建議加上pdo的支援,以便無痛支援多種資料庫。
31
https://www.php.net/manual/en/mysql.php
32
https://www.php.net/manual/en/mysqlinfo.library.choosing.php
33
https://blog.markgdi.com/article/quick-start-operation-mysql-using-php-pdo/
34
*/
35
class db{
36
 
37
	/*
38
	#函式說明:
39
	#當前類別被呼叫的靜態方法不存在時,將會執行該函數,回報該方法不存在.
40
	#回傳結果:
41
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
42
	#$reuslt["error"],執行不正常結束的錯訊息陣列.
43
	#$result["function"],當前執行的函式名稱.
44
	#必填參數:
45
	#$method,物件,為物件實體或類別名稱,會自動置入該參數.
46
	#$arguments,陣列,為呼叫方法時所用的參數.
47
	#參考資料:
48
	#__call=>http://php.net/manual/en/language.oop5.overloading.php#object.callstatic
49
	*/
50
	public function __call($method,$arguments){
51
 
52
		#取得當前執行的函式
53
		$result["function"]=__FUNCTION__;
54
 
55
		#設置執行不正常
56
		$result["status"]="false";
57
 
58
		#設置執行錯誤
59
		$result["error"][]=__NAMESPACE__ ."/".$method."() 不存在!";
60
 
61
		#設置所丟入的參數
62
		$result["error"][]=$arguments;
63
 
64
		#回傳結果
65
		return $result;
66
 
67
		}#function __call end
68
 
69
	/*
70
	#函式說明:
71
	#當前類別被呼叫的靜態方法不存在時,將會執行該函數,回報該方法不存在.
72
	#回傳結果:
73
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
74
	#$reuslt["error"],執行不正常結束的錯訊息陣列.
75
	#$result["function"],當前執行的函式名稱.
76
	#必填參數:
77
	#$method,物件,為物件實體或類別名稱,會自動置入該參數.
78
	#$arguments,陣列,為呼叫方法時所用的參數.
79
	#參考資料:
80
	#__call=>http://php.net/manual/en/language.oop5.overloading.php#object.callstatic
81
	*/
82
	public static function __callStatic($method,$arguments){
83
 
84
		#取得當前執行的函式
85
		$result["function"]=__FUNCTION__;
86
 
87
		#設置執行不正常
88
		$result["status"]="false";
89
 
90
		#設置執行錯誤
91
		$result["error"][]="欲呼叫的". __NAMESPACE__ ."/".$method."() 不存在!";
92
 
93
		#設置所丟入的參數
94
		$result["error"][]=$arguments;
95
 
96
		#回傳結果
97
		return $result;
98
 
99
		}#function __callStatic end
100
 
101
	/*
102
	#函式說明:
103
	#連線到mysql-server,會回傳一個陣列
104
	#回傳結果:
105
	#$result["status"],若連線成功則爲"true",連線失敗則爲"false"。
106
	#$result["function"],當前執行的函數名稱
107
	#$result["connectInformation"],爲回傳的mysql連線資訊。
108
	#$result["error"],爲錯誤訊息陣列
109
	#必填參數:
110
	#$conf["dbAddress"],字串,爲mysql-Server的位置。
111
	$conf["dbAddress"]=$dbAddress;
112
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號。
113
	$conf["dbAccount"]=$dbAccount;
114
	#可省略參數:
115
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼。
116
	#$conf["dbPassword"]=$dbPassword;
117
	#$conf["dbPort"],字串,為連線到mysql-Server時對應的port,預設不使用
118
	#$conf["dbPort"]="3306";
119
	#參考資料:
120
	#無.
121
	#備註:
122
	#無.
123
	*/	
124
	public static function mysqlConnect(&$conf){
125
 
126
		#初始化要回傳的內容
127
		$result=array();
128
 
129
		#取得當前執行的函數名稱
130
		$result["function"]=__FUNCTION__;
131
 
132
		#如果 $conf 不為陣列
133
		if(gettype($conf)!="array"){
134
 
135
			#設置執行失敗
136
			$result["status"]="false";
137
 
138
			#設置執行錯誤訊息
139
			$result["error"][]="\$conf變數須為陣列形態";
140
 
141
			#如果傳入的參數為 null
142
			if($conf==null){
143
 
144
				#設置執行錯誤訊息
145
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
146
 
147
				}#if end
148
 
149
			#回傳結果
150
			return $result;
151
 
152
			}#if end
153
 
154
		#檢查參數
155
		#函式說明:
156
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
157
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
158
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
159
		#$result["function"],當前執行的函式名稱.
160
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
161
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
162
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
163
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
164
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
165
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
166
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
167
		#必填參數:
168
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
169
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
170
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
171
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("dbAddress","dbAccount");
172
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
173
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
174
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
175
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
176
		#可省略參數:
177
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
178
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
179
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
180
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("dbPassword","dbPort");
181
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
182
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
183
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
184
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null);
185
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
186
		#$conf["arrayCountEqualCheck"][]=array();
187
		#參考資料:
188
		#array_keys=>http://php.net/manual/en/function.array-keys.php
189
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
190
		unset($conf["variableCheck::checkArguments"]);
191
 
192
		#如果檢查失敗
193
		if($checkResult["status"]=="false"){
194
 
195
			#設置錯誤識別
170 liveuser 196
			$result["status"]="false";
3 liveuser 197
 
198
			#設置錯誤訊息
199
			$result["error"]=$checkResult;
200
 
201
			#回傳解果
202
			return $result;
203
 
204
			}#if end
205
 
206
		#如果 $checkResult["status"]等於"false";
207
		if($checkResult["passed"]=="false"){
208
 
209
			#設置錯誤識別
170 liveuser 210
			$result["status"]="false";
3 liveuser 211
 
212
			#設置錯誤訊息
213
			$result["error"]=$checkResult;
214
 
215
			#回傳解果
216
			return $result;
217
 
218
			}#if end
219
 
220
		#如果是 localhost
221
		if($conf["dbAddress"]==="localhost"){
222
 
223
			#卸除dbPort變數
224
			unset($conf["dbPort"]);
225
 
226
			}#if end
227
 
170 liveuser 228
		#如果密碼爲空,則爲不使用密碼進行連綫
3 liveuser 229
		if(!isset($conf["dbPassword"])){
230
 
231
			#如果沒設定 dbPort
232
			if(!isset($conf["dbPort"])){
233
 
234
				#設定資料庫位置與帳號,並連線
235
				#若連線失敗
236
				if(!($result["connectInformation"]=@mysqli_connect($conf["dbAddress"],$conf["dbAccount"]))){
237
 
238
					#設置連線失敗的提示
239
					$result["error"][]="連線失敗,請檢查帳號是否正確.";
240
 
241
					#取得連線時的錯誤編號
242
					$result["error"][]=mysqli_connect_errno();
243
 
244
					#取得連線時的錯誤訊息
245
					$result["error"][]=mysqli_connect_error();
246
 
247
					#設置執行失敗
248
					$result["status"]="false";
249
 
250
					#回傳結果
251
					return $result;
252
 
253
					}#if end
170 liveuser 254
 
3 liveuser 255
				}#if end
256
 
257
			#反之
258
			else{
259
 
260
				#設定資料庫位置與port與帳號,並連線
261
				#若連線失敗
262
				if(!($result["connectInformation"]=@mysqli_connect($conf["dbAddress"].":".$conf["dbPort"],$conf["dbAccount"]))){
263
 
264
					#設置連線失敗的提示
265
					$result["error"][]="連線失敗,請檢查帳號是否正確.";
266
 
267
					#取得連線時的錯誤編號
268
					$result["error"][]=mysqli_connect_errno();
269
 
270
					#取得連線時的錯誤訊息
271
					$result["error"][]=mysqli_connect_error();
272
 
273
					#設置執行失敗
274
					$result["status"]="false";
275
 
276
					#回傳結果
277
					return $result;
278
 
279
					}#if end
280
 
281
				}#else end
282
 
283
			}#if end
284
 
285
		#反之代表要使用密碼
286
		else{
287
 
288
			#如果沒設定 dbPort
289
			if(!isset($conf["dbPort"])){
290
 
291
				#設定資料庫位置、帳號、密碼,並連綫
292
				if(!($result["connectInformation"]=@mysqli_connect($conf["dbAddress"],$conf["dbAccount"],$conf["dbPassword"]))){
293
 
294
					#設置連線失敗的提示
295
					$result["error"][]="連線失敗,請檢查帳號密碼是否正確.";
296
 
297
					#取得連線時的錯誤編號
298
					$result["error"][]=mysqli_connect_errno();
299
 
300
					#取得連線時的錯誤訊息
301
					$result["error"][]=mysqli_connect_error();
302
 
303
					#設置執行失敗
304
					$result["status"]="false";
305
 
306
					#回傳結果
307
					return $result;
170 liveuser 308
 
3 liveuser 309
					}#if end
310
 
311
				}#if end
312
 
313
			#反之	
314
			else{
315
 
316
				#設定資料庫位置、帳號、密碼,並連綫
317
				if(!($result["connectInformation"]=@mysqli_connect($conf["dbAddress"].":".$conf["dbPort"],$conf["dbAccount"],$conf["dbPassword"]))){
318
 
319
					#設置連線失敗的提示
320
					$result["error"][]="連線失敗,請檢查帳號密碼是否正確.";
321
 
322
					#取得連線時的錯誤編號
323
					$result["error"][]=mysqli_connect_errno();
324
 
325
					#取得連線時的錯誤訊息
326
					$result["error"][]=mysqli_connect_error();
327
 
328
					#設置執行失敗
329
					$result["status"]="false";
330
 
331
					#回傳結果
332
					return $result;
170 liveuser 333
 
3 liveuser 334
					}#if end
335
 
336
				}#else end
337
 
338
			}#else end
339
 
340
		#使編碼為utf8
341
		if(!(mysqli_query($result["connectInformation"],'SET NAMES UTF8'))){
342
 
343
			#設置連線編碼失敗的提示
344
			$result["error"][]="設置連線編碼失敗.";
345
 
346
			#取得連線時的錯誤編號
347
			$result["error"][]=mysqli_connect_errno();
348
 
349
			#取得連線時的錯誤訊息
350
			$result["error"][]=mysqli_connect_error();
351
 
352
			#設置執行失敗
353
			$result["status"]="false";
354
 
355
			#回傳結果
356
			return $result;
357
 
358
			}#if end
359
 
360
		#設定 CHARACTER_SET_CLIENT 為 utf8
361
		if(!(mysqli_query($result["connectInformation"],'SET CHARACTER_SET_CLIENT=utf8'))){
362
 
363
			#設置連線編碼失敗的提示
364
			$result["error"][]="設置連線編碼失敗.";
365
 
366
			#取得連線時的錯誤編號
367
			$result["error"][]=mysqli_connect_errno();
368
 
369
			#取得連線時的錯誤訊息
370
			$result["error"][]=mysqli_connect_error();
371
 
372
			#設置執行失敗
373
			$result["status"]="false";
374
 
375
			#回傳結果
376
			return $result;
377
 
378
			}#if end
379
 
380
		#設定 CHARACTER_SET_RESULTS 為 utf8
381
		if(!(mysqli_query($result["connectInformation"],'SET CHARACTER_SET_RESULTS=utf8'))){
382
 
383
			#設置連線編碼失敗的提示
384
			$result["error"][]="設置連線編碼失敗.";
385
 
386
			#取得連線時的錯誤編號
387
			$result["error"][]=mysqli_connect_errno();
388
 
389
			#取得連線時的錯誤訊息
390
			$result["error"][]=mysqli_connect_error();
391
 
392
			#設置執行失敗
393
			$result["status"]="false";
394
 
395
			#回傳結果
396
			return $result;
397
 
398
			}#if end
399
 
400
		#執行正常
401
		$result["status"]="true";
402
 
403
		#回傳結果
404
		return $result;	 
405
 
406
		}#function mysqlConnect end
407
 
408
	/*
409
	#函式說明:
410
	#關閉與mysql的連線,會回傳一個陣列。
411
	#回傳結果::
412
	#$result["status"],若連線成功則爲"true",連線失敗則爲"false".
413
	#$result["connectInformation"],爲回傳的mysql連線資訊。
414
	#$result["error"],爲錯誤訊息陣列.	
415
	#必填參數:
416
	#$conf["mysqli"],字串,mysqli物件.
417
	$conf["mysqli"]=$mysqli;
418
	#可省略參數:
419
	#無.
420
	#參考資料:
421
	#無.
422
	#備註:
423
	#無.
424
	*/	
425
	public static function mysqlClose(&$conf){
426
 
427
		#初始化要回傳的內容
428
		$result=array();
429
 
430
		#取得當前執行的函數名稱
431
		$result["function"]=__FUNCTION__;
432
 
433
		#如果 $conf 不為陣列
434
		if(gettype($conf)!="array"){
435
 
436
			#設置執行失敗
437
			$result["status"]="false";
438
 
439
			#設置執行錯誤訊息
440
			$result["error"][]="\$conf變數須為陣列形態";
441
 
442
			#如果傳入的參數為 null
443
			if($conf==null){
444
 
445
				#設置執行錯誤訊息
446
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
447
 
448
				}#if end
449
 
450
			#回傳結果
451
			return $result;
452
 
453
			}#if end
454
 
455
		#檢查參數
456
		#函式說明:
457
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
458
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
459
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
460
		#$result["function"],當前執行的函式名稱.
461
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
462
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
463
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
464
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
465
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
466
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
467
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
468
		#必填參數:
469
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
470
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
471
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
472
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("mysqli");
473
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
474
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array(null);
475
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
476
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
477
		#可省略參數:
478
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
479
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
480
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
481
		#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("dbPassword","dbPort");
482
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
483
		#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
484
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
485
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null);
486
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
487
		#$conf["arrayCountEqualCheck"][]=array();
488
		#參考資料:
489
		#array_keys=>http://php.net/manual/en/function.array-keys.php
490
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
491
		unset($conf["variableCheck::checkArguments"]);
492
 
493
		#如果檢查失敗
494
		if($checkResult["status"]=="false"){
495
 
496
			#設置錯誤識別
497
			$result["status"]="false";
498
 
499
			#設置錯誤訊息
500
			$result["error"]=$checkResult;
501
 
502
			#回傳解果
503
			return $result;
504
 
505
			}#if end
506
 
507
		#如果 $checkResult["status"]等於"false";
508
		if($checkResult["passed"]=="false"){
509
 
510
			#設置錯誤識別
511
			$result["status"]="false";
512
 
513
			#設置錯誤訊息
514
			$result["error"]=$checkResult;
515
 
516
			#回傳解果
517
			return $result;
518
 
519
			}#if end
520
 
521
		#關閉與資料庫的連線如果成功
522
		if(@mysqli_close($conf["mysqli"])){
523
 
524
			#則回傳"true"
525
			$result["status"]="true";
526
 
527
			}#if end
528
 
529
		#連線失敗回傳"false"
530
		else{
531
 
532
			#設置連線編碼失敗的提示
533
			$result["error"][]="關閉連線失敗.";
534
 
535
			#取得連線時的錯誤編號
536
			$result["error"][]=mysqli_connect_errno();
537
 
538
			#取得連線時的錯誤訊息
539
			$result["error"][]=mysqli_connect_error();
540
 
541
			#設置執行失敗
542
			$result["status"]="false";
543
 
544
			}#else end
545
 
546
		#儲存mysqli物件
547
		$result["connectInformation"]=$conf["mysqli"];
548
 
549
		#設置執行正常
550
		$result["status"]="true";
551
 
552
		#回傳結果
553
		return $result;	 
554
 
555
		}#funciton mysqlClose end
556
 
557
	/*
558
	#函式說明:
559
	#連線到資料庫,結果會回傳一個陣列.
560
	#$result["status"],若連線成功則爲"true",連線失敗則爲"false".
561
	#$result["connectInformation"],爲回傳的mysql連線資訊.
562
	#$result["error"],錯誤訊息	.
563
	#$result["function"],當前執行的函數名稱.
564
	#必填參數:
565
	#$conf["dbAddress"],字串,爲mysql-Server的位置。
566
	$conf["dbAddress"]=$dbAddress;
567
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號。
568
	$conf["dbAccount"]=$dbAccount;
569
	#$conf["dbName"],字串,爲要連的資料庫名稱
570
	$conf["dbName"]="";
571
	#可省略參數:
572
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼。
573
	#$conf["dbPassword"]=$dbPassword;
574
	#$conf["dbPort"],字串,為連線到mysql-Server時對應的port,可省略,預設為3306.
575
	#$conf["dbPort"]="3306";
576
	#參考資料:
577
	#無.
578
	#備註:
579
	#無.
580
	*/
581
	public static function dbConnect(&$conf){
582
 
583
		#初始化要回傳的內容
584
		$result=array();
585
 
586
		#取得當前執行的函數名稱
587
		$result["function"]=__FUNCTION__;
588
 
589
		#如果 $conf 不為陣列
590
		if(gettype($conf)!="array"){
591
 
592
			#設置執行失敗
593
			$result["status"]="false";
594
 
595
			#設置執行錯誤訊息
596
			$result["error"][]="\$conf變數須為陣列形態";
597
 
598
			#如果傳入的參數為 null
599
			if($conf==null){
600
 
601
				#設置執行錯誤訊息
602
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
603
 
604
				}#if end
605
 
606
			#回傳結果
607
			return $result;
608
 
609
			}#if end
610
 
611
		#檢查參數
612
		#函式說明:
613
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
614
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
615
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
616
		#$result["function"],當前執行的函式名稱.
617
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
618
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
619
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
620
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
621
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
622
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
623
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
624
		#必填參數:
625
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
626
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
627
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
628
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("dbAddress","dbAccount","dbName");
629
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
630
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string");
631
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
632
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
633
		#可省略參數:
634
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
635
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
636
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
637
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("dbPassword","dbPort");
638
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
639
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
640
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
641
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null);
642
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
643
		#$conf["arrayCountEqualCheck"][]=array();
644
		#參考資料:
645
		#array_keys=>http://php.net/manual/en/function.array-keys.php
646
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
647
		unset($conf["variableCheck::checkArguments"]);
648
 
649
		#如果檢查失敗
177 liveuser 650
		if($checkResult["status"]==="false"){
3 liveuser 651
 
652
			#設置錯誤識別
653
			$result["status"]="false";
654
 
655
			#設置錯誤訊息
656
			$result["error"]=$checkResult;
657
 
658
			#回傳解果
659
			return $result;
660
 
661
			}#if end
662
 
663
		#如果 $checkResult["status"]等於"false";
177 liveuser 664
		if($checkResult["passed"]==="false"){
3 liveuser 665
 
666
			#設置錯誤識別
667
			$result["status"]="false";
668
 
669
			#設置錯誤訊息
670
			$result["error"]=$checkResult;
671
 
672
			#回傳解果
673
			return $result;
674
 
675
			}#if end
676
 
677
		#函式說明:
678
		#連線到mysql-server,會回傳一個陣列
679
		#回傳結果:
680
		#$result["status"],若連線成功則爲"true",連線失敗則爲"false"。
681
		#$result["function"],當前執行的函數名稱
682
		#$result["connectInformation"],爲回傳的mysql連線資訊。
683
		#$result["error"],爲錯誤訊息陣列
684
		#必填參數:
685
		$conf["db"]["mysqlConnect"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置。
686
		$conf["db"]["mysqlConnect"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號。
687
		#可省略參數:
688
 
689
		#如果 $conf["dbPassword"] 有設定
690
		if(isset($conf["dbPassword"])){
691
 
692
			$conf["db"]["mysqlConnect"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼。
693
 
694
			}#if end
695
 
696
		#如果有設置 $conf["dbPort"]
697
		if(isset($conf["dbPort"])){
698
 
699
			$conf["db"]["mysqlConnect"]["dbPort"]=$conf["dbPort"];#字串,為連線到mysql-Server時對應的port,可省略,預設為3306.
700
 
177 liveuser 701
			}#if end
702
 
3 liveuser 703
		$con=db::mysqlConnect($conf["db"]["mysqlConnect"]);
704
		unset($conf["db"]["mysqlConnect"]);
705
 
706
		#如果連線失敗
177 liveuser 707
		if($con["status"]==="false"){
3 liveuser 708
 
709
			#提示訊息
710
			$result["error"]=$con;
711
 
712
			#設置執行失敗
713
			$result["status"]="false";
714
 
715
			#回傳結果
716
			return $result;
717
 
718
			}#if end
719
 
177 liveuser 720
		#確認資料庫存在或可以被存取
721
		#函式說明:
722
		#執行mysql指令
723
		#回傳結果::
724
		#$result["status"],"true"為執行成功;"false"為執行失敗。
725
		#$result["error"],錯誤訊息的陣列
726
		#$result["function"],當前執行的涵式
727
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
728
		#$result["queryConn"],mysql用來查尋的連資源. 
729
		#$result["queryString"],要執行的sql內容.
730
		#必填參數:
731
		#$conf["dbSql"],字串,要執行sql語法
732
		$conf["db::execMysqlQuery"]["dbSql"]="show databases;";
733
		#可省略參數:
734
		#$conf["dbLink"],物件,mysqli物件,由mysqli_connect()回傳的物件內容,若為數值則改用賬號密碼等資訊進行連線,反之則沿用連線物件.
735
		#$conf["db::execMysqlQuery"]["dbLink"]=$conf["dbName"];
736
		#$conf["dbAddress"],字串,爲mysql-Server的位置。
737
		$conf["db::execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];
738
		#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號。
739
		$conf["db::execMysqlQuery"]["dbAccount"]=$conf["dbAccount"]; 
740
 
741
		#如果存在 $dbPassword
742
		if(isset($conf["dbPassword"])){
743
 
744
			#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼。
745
			$conf["db::execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];
746
 
747
			}#if end
748
 
749
		#$conf["dbName"],字串,爲要連的資料庫名稱
750
		#$conf["dbName"]="";
751
 
752
		#如果存在 $dbPort
753
		if(isset($conf["dbPort"])){
754
 
755
			#$conf["dbPort"],字串,為連線到mysql-Server時對應的port,可省略,預設為3306.
756
			$conf["db::execMysqlQuery"]["dbPort"]=$conf["dbPort"];
757
 
758
			}#if end
759
 
760
		#$conf["autoClose"],字串,"true"代表要自動斷線,預設為"true"會自動斷線
761
		#$conf["autoClose"]="true";
762
		#參考資料:
763
		#無.
764
		#備註:
765
		#無.
766
		$execMysqlQuery=db::execMysqlQuery($conf["db::execMysqlQuery"]);
767
		unset($conf["db::execMysqlQuery"]);
768
 
769
		#如果執行失敗
770
		if($execMysqlQuery["status"]==="false"){
771
 
772
			#設置連線失敗的提示
773
			$result["error"][]="檢查資料庫可否存取出錯";
774
 
775
			#設置錯誤訊息
776
			$result["error"][]=$execMysqlQuery["error"];
777
 
778
			#設置執行失敗
779
			$result["status"]="false";
780
 
781
			#回傳結果
782
			return $result;
783
 
784
			}#if end
785
 
786
		#解析 $execMysqlQuery["queryResource"] 看是否存在要存取的資料庫
787
		#函式說明:
788
		#解析 dataTableSelect($conf) 後的結果,亦即將執行sql語法後所得到的結果解析放進變數裏面
789
		#回傳結果:
790
		#$result["status"],執行結果"true"為成功;"false"為失敗
791
		#$result["error"],錯誤訊息
792
		#$result["function"],儲存當前函數名稱
793
		#$result["dataColumnName"],為資料欄位的名稱陣列.
794
		#$result["dataColumnName"][$i]代表第一個欄位名稱.
795
		#$result["dataContent"],爲資料的內容陣列,第1維度的key為$conf["tableValueName"][$i],亦即第 $i+1 個欄位的名稱,若該欄位不存在,則其value為空字串;第2維度的key為第$i+1筆資料的索引.
796
		#$result["dataCount"],爲取得的資料筆數.
797
		#必填參數:
798
		#$conf["sqlQueryResult"],object,爲執行sql語法所獲得的查詢結果。
799
		$conf["db::sendQueryDataToVariabele"]["sqlQueryResult"]=$execMysqlQuery["queryResource"];
800
		#$conf["tableValueName"],字串陣列,爲該資料表列項目的每一項名稱,須爲陣列值,若為「array("*")」則代表所有欄位.
801
		$conf["db::sendQueryDataToVariabele"]["tableValueName"]=array("Database");
802
		#可省略參數:
803
		#$conf["dbAddress"],字串,爲mysql-Server的位置,目前沒有用途.
804
		#$conf["dbAddress"]=$dbAddress;
805
		#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號,目前沒有用途.
806
		#$conf["dbAccount"]=$dbAccount;
807
		#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼,目前沒有用途.
808
		#$conf["dbPassword"]=$dbPassword;
809
		#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,可省略,若省略則代表使用預設的3306 port,目前沒有用途.
810
		#$conf["dbPort"]="";
811
		#$conf["valueName"],字串陣列,爲該資料表列項目的每一項所要對應的變數名稱,預設為欄位的名稱($conf["tableValueName"]).
812
		#$conf["valueName"]=$conf["tableValueName"];
813
		#參考資料:
814
		#http://www.w3school.com.cn/php/func_mysql_fetch_array.asp => 解析取得的資料表欄位時,能夠選擇回傳含有欄位名稱與數字代表的key.
815
		#備註:
816
		#無.
817
		$sendQueryDataToVariabele=db::sendQueryDataToVariabele($conf["db::sendQueryDataToVariabele"]);
818
		unset($conf["db::sendQueryDataToVariabele"]);
819
 
820
		#如果執行異常
821
		if($sendQueryDataToVariabele["status"]==="false"){
822
 
823
			#設置連線失敗的提示
824
			$result["error"][]="檢查資料庫可否存取出錯";
825
 
826
			#設置錯誤訊息
827
			$result["error"][]=$sendQueryDataToVariabele["error"];
828
 
829
			#設置執行失敗
830
			$result["status"]="false";
831
 
832
			#回傳結果
833
			return $result;
834
 
835
			}#if end
836
 
837
		#檢查資料庫是否可以存取
838
		#函式說明:
839
		#檢查一個數值是否與陣列裏面的元素相同,找到一個相符合的元素後就會停止搜尋.
840
		#回傳結果:
841
		#$result["status"],"true"表示執行正確,"false"表示執行錯誤.
842
		#$result["founded"],"true"表示有找到相同的,"false"表示沒有找到相同的.
843
		#$result["error"],錯誤訊息
844
		#$result["function"],當前執行的函數名稱
845
		#$result["argv"],使用的參數
846
		#$result["equalVarName"],相等的變數名稱或key.
847
		#$result["equalVarValue"],相等的變數數值內容.
848
		#必填參數:
849
		#$conf["conditionElement"],字串,條件元素,要等於的元素內容.
850
		$conf["search::getEqualVar"]["conditionElement"]=$conf["dbName"];
851
		#$conf["compareElements"],字串陣列,要比對的陣列變數內容.
852
		$conf["search::getEqualVar"]["compareElements"]=$sendQueryDataToVariabele["dataContent"]["Database"];
853
		#可省略參數:
854
		#無.
855
		#參考資料:
856
		#無.
857
		#備註:
858
		#無.
859
		$getEqualVar=search::getEqualVar($conf["search::getEqualVar"]);
860
		unset($conf["search::getEqualVar"]);
861
 
862
		#如果執行失敗
863
		if($getEqualVar["status"]==="false"){
864
 
865
			#設置錯誤的提示
866
			$result["error"][]="檢查資料庫可否存取出錯";
867
 
868
			#設置錯誤訊息
869
			$result["error"][]=$sendQueryDataToVariabele["error"];
870
 
871
			#設置執行失敗
872
			$result["status"]="false";
873
 
874
			#回傳結果
875
			return $result;
876
 
877
			}#if end
878
 
879
		#如果無法存取資料庫
880
		if($getEqualVar["founded"]==="false"){
881
 
882
			#設置錯誤的提示
883
			$result["error"][]="資料庫(".$conf["dbName"].")無法存取";
884
 
885
			#設置錯誤訊息
886
			$result["error"][]=$sendQueryDataToVariabele;
887
 
888
			#設置執行失敗
889
			$result["status"]="false";
890
 
891
			#回傳結果
892
			return $result;
893
 
894
			}#if end
895
 
3 liveuser 896
		#選取資料庫
897
		#如果連線失敗
898
		if(!(mysqli_select_db($con["connectInformation"],$conf["dbName"]))){
899
 
900
			#設置連線失敗的提示
901
			$result["error"][]="選取資料庫失敗";
902
 
903
			#取得連線時的錯誤編號
904
			$result["error"][]=mysqli_connect_errno();
905
 
906
			#取得連線時的錯誤訊息
907
			$result["error"][]=mysqli_connect_error();
908
 
909
			#設置執行失敗
910
			$result["status"]="false";
911
 
912
			#回傳結果
177 liveuser 913
			return $result;
3 liveuser 914
 
915
			}#if end
916
 
917
		#取得mysqli物件
918
		$result["connectInformation"]=$con["connectInformation"];
919
 
920
		#設置執行正常
921
		$result["status"]="true";
922
 
923
		#回傳結果
924
		return $result;	 
925
 
926
		}#function dbConnect end
927
 
928
	/*
929
	#函式說明:
930
	#執行mysql指令
931
	#回傳結果::
932
	#$result["status"],"true"為執行成功;"false"為執行失敗。
933
	#$result["error"],錯誤訊息的陣列
934
	#$result["function"],當前執行的涵式
935
	#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
936
	#$result["queryConn"],mysql用來查尋的連資源. 
937
	#$result["queryString"],要執行的sql內容.
938
	#必填參數:
939
	#$conf["dbSql"],字串,要執行sql語法
940
	$conf["dbSql"]="";
941
	#可省略參數:
942
	#$conf["dbLink"],物件,mysqli物件,由mysqli_connect()回傳的物件內容,若為數值則改用賬號密碼等資訊進行連線,反之則沿用連線物件.
943
	$conf["dbLink"]="";
944
	#$conf["dbAddress"],字串,爲mysql-Server的位置。
945
	$conf["dbAddress"]=$dbAddress;
946
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號。
947
	$conf["dbAccount"]=$dbAccount; 
948
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼。
949
	#$conf["dbPassword"]=$dbPassword;
950
	#$conf["dbName"],字串,爲要連的資料庫名稱
951
	#$conf["dbName"]="";
952
	#$conf["dbPort"],字串,為連線到mysql-Server時對應的port,可省略,預設為3306.
953
	#$conf["dbPort"]="3306";
954
	#$conf["autoClose"],字串,"true"代表要自動斷線,預設為"true"會自動斷線
955
	#$conf["autoClose"]="true";
956
	#參考資料:
957
	#無.
958
	#備註:
959
	#無.
960
	*/
961
	public static function execMysqlQuery(&$conf){
962
 
963
		#初始化要回傳的內容
964
		$result=array();
965
 
966
		#取得當前執行的函數名稱
967
		$result["function"]=__FUNCTION__;
968
 
969
		#如果 $conf 不為陣列
970
		if(gettype($conf)!="array"){
971
 
972
			#設置執行失敗
973
			$result["status"]="false";
974
 
975
			#設置執行錯誤訊息
976
			$result["error"][]="\$conf變數須為陣列形態";
977
 
978
			#如果傳入的參數為 null
979
			if($conf===null){
980
 
981
				#設置執行錯誤訊息
982
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
983
 
984
				}#if end
985
 
986
			#回傳結果
987
			return $result;
988
 
989
			}#if end
990
 
991
		#檢查參數
992
		#函式說明:
993
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
994
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
995
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
996
		#$result["function"],當前執行的函式名稱.
997
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
998
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
999
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
1000
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
1001
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
1002
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
1003
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
1004
		#必填參數:
1005
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
1006
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
1007
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
1008
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("dbSql");
1009
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
1010
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
1011
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
1012
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
1013
		#可省略參數:
1014
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
1015
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
1016
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
1017
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("dbLink","dbAddress","dbAccount","dbPassword","dbName","dbPort","autoClose","mysqli");
1018
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
1019
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("object","string","string","string","string","string","string",null);
1020
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
1021
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null,null,null,null,null,"true",null);
1022
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
1023
		#$conf["arrayCountEqualCheck"][]=array();
1024
		#參考資料:
1025
		#array_keys=>http://php.net/manual/en/function.array-keys.php
1026
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
1027
		unset($conf["variableCheck::checkArguments"]);
1028
 
1029
		#如果檢查失敗
1030
		if($checkResult["status"]=="false"){
1031
 
1032
			#設置錯誤識別
1033
			$result["status"]="fasle";
1034
 
1035
			#設置錯誤訊息
1036
			$result["error"]=$checkResult;
1037
 
1038
			#回傳解果
1039
			return $result;
1040
 
1041
			}#if end
1042
 
1043
		#如果 $checkResult["status"]等於"false";
1044
		if($checkResult["passed"]==="false"){
1045
 
1046
			#設置錯誤識別
177 liveuser 1047
			$result["status"]="false";
3 liveuser 1048
 
1049
			#設置錯誤訊息
1050
			$result["error"]=$checkResult;
1051
 
1052
			#回傳解果
1053
			return $result;
1054
 
1055
			}#if end
1056
 
1057
		#如果沒有 dbLink
1058
		if(!isset($conf["dbLink"])){
1059
 
1060
			#初始化儲存mysqli物件的變數
1061
			$con="";
1062
 
1063
			#如果有指定資料庫
1064
			if(isset($conf["dbName"])){
1065
 
1066
				#函式說明:
1067
				#連線到資料庫,結果會回傳一個陣列.
1068
				#$result["status"],若連線成功則爲"true",連線失敗則爲"false".
1069
				#$result["connectInformation"],爲回傳的mysql連線資訊.
1070
				#$result["error"],錯誤訊息	.
1071
				#$result["function"],當前執行的函數名稱.
1072
				#必填參數:
1073
				$conf["db::dbConnect"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
1074
				$conf["db::dbConnect"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
1075
				$conf["db::dbConnect"]["dbName"]=$conf["dbName"];#爲要連的資料庫名稱
1076
				#可省略參數:
1077
 
1078
				#如果 $conf["dbPassword"] 有設置
1079
				if(isset($conf["dbPassword"])){
1080
 
1081
					$conf["db::dbConnect"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼。
1082
 
1083
					}#if end
1084
 
1085
				#如果有設置 $conf["dbPort"] 
1086
				if(isset($conf["dbPort"])){
1087
 
1088
					#$conf["dbPort"],字串,為連線到mysql-Server時對應的port,可省略,預設為3306.
1089
					$conf["db::dbConnect"]["dbPort"]=$conf["dbPort"];
1090
 
1091
					}#if end
1092
 
1093
				$con=db::dbConnect($conf["db::dbConnect"]);
1094
				unset($conf["db::dbConnect"]);
1095
 
1096
				#如果連線失敗
1097
				if($con["status"]=="false"){
1098
 
1099
					#設置執行失敗的訊息
1100
					$result["status"]="false";
1101
 
1102
					#紀錄錯誤訊息
1103
					$result["error"]=$con;
1104
 
1105
					#回傳結果
1106
					return $result;
1107
 
1108
					}#if end
1109
 
1110
				#儲存mysqli物件
1111
				$result["queryConn"]=$con["connectInformation"];
1112
 
177 liveuser 1113
				#解析可以取得的資料庫清單
1114
				#函式說明:
1115
				#解析 dataTableSelect($conf) 後的結果,亦即將執行sql語法後所得到的結果解析放進變數裏面
1116
				#回傳結果:
1117
				#$result["status"],執行結果"true"為成功;"false"為失敗
1118
				#$result["error"],錯誤訊息
1119
				#$result["function"],儲存當前函數名稱
1120
				#$result["dataColumnName"],為資料欄位的名稱陣列.
1121
				#$result["dataColumnName"][$i]代表第一個欄位名稱.
1122
				#$result["dataContent"],爲資料的內容陣列,第1維度的key為$conf["tableValueName"][$i],亦即第 $i+1 個欄位的名稱,若該欄位不存在,則其value為空字串;第2維度的key為第$i+1筆資料的索引.
1123
				#$result["dataCount"],爲取得的資料筆數.
1124
				#必填參數:
1125
				#$conf["sqlQueryResult"],object,爲執行sql語法所獲得的查詢結果。
1126
				$conf["db::sendQueryDataToVariabele"]["sqlQueryResult"]=$result["queryConn"];
1127
				#$conf["tableValueName"],字串陣列,爲該資料表列項目的每一項名稱,須爲陣列值,若為「array("*")」則代表所有欄位.
1128
				$conf["db::sendQueryDataToVariabele"]["tableValueName"]=array("Database");
1129
				#可省略參數:
1130
				#$conf["dbAddress"],字串,爲mysql-Server的位置,目前沒有用途.
1131
				$conf["db::sendQueryDataToVariabele"]["dbAddress"]=$dbAddress;
1132
				#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號,目前沒有用途.
1133
				$conf["db::sendQueryDataToVariabele"]["dbAccount"]=$dbAccount;
1134
 
1135
				#如果有設置 $conf["dbPassword"]
1136
				if(isset($conf["dbPassword"])){
1137
 
1138
					#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼,目前沒有用途.
1139
					$conf["db::sendQueryDataToVariabele"]["dbPassword"]=$dbPassword;
1140
 
1141
					}#if end
1142
 
1143
				#如果有設置 $conf["dbPort"]
1144
				if(isset($conf["dbPort"])){
1145
 
1146
					#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,可省略,若省略則代表使用預設的3306 port,目前沒有用途.
1147
					$conf["db::sendQueryDataToVariabele"]["dbPort"]=$conf["dbPort"];
1148
 
1149
					}#if end
1150
 
1151
				#$conf["valueName"],字串陣列,爲該資料表列項目的每一項所要對應的變數名稱,預設為欄位的名稱($conf["tableValueName"]).
1152
				#$conf["valueName"]=$conf["tableValueName"];
1153
				#參考資料:
1154
				#http://www.w3school.com.cn/php/func_mysql_fetch_array.asp => 解析取得的資料表欄位時,能夠選擇回傳含有欄位名稱與數字代表的key.
1155
				#備註:
1156
				#無.
1157
				$sendQueryDataToVariabele=db::sendQueryDataToVariabele($conf["db::sendQueryDataToVariabele"]);
1158
				unset($conf["db::sendQueryDataToVariabele"]);
1159
 
1160
				#如果連線失敗
1161
				if($sendQueryDataToVariabele["status"]==="false"){
1162
 
1163
					#設置執行失敗的訊息
1164
					$result["status"]="false";
1165
 
1166
					#紀錄錯誤訊息
1167
					$result["error"]=$sendQueryDataToVariabele;
1168
 
1169
					#回傳結果
1170
					return $result;
1171
 
1172
					}#if end
1173
 
1174
				#尋找目標資料庫是否存在
1175
				#函式說明:
1176
				#檢查一個數值是否與陣列裏面的元素相同,找到一個相符合的元素後就會停止搜尋.
1177
				#回傳結果:
1178
				#$result["status"],"true"表示執行正確,"false"表示執行錯誤.
1179
				#$result["founded"],"true"表示有找到相同的,"false"表示沒有找到相同的.
1180
				#$result["error"],錯誤訊息
1181
				#$result["function"],當前執行的函數名稱
1182
				#$result["argv"],使用的參數
1183
				#$result["equalVarName"],相等的變數名稱或key.
1184
				#$result["equalVarValue"],相等的變數數值內容.
1185
				#必填參數:
1186
				#$conf["conditionElement"],字串,條件元素,要等於的元素內容.
1187
				$conf["search::getEqualVar"]["conditionElement"]=$conf["dbName"];
1188
				#$conf["compareElements"],字串陣列,要比對的陣列變數內容.
1189
				$conf["search::getEqualVar"]["compareElements"]=$result["dataContent"]["Database"];
1190
				#可省略參數:
1191
				#無.
1192
				#參考資料:
1193
				#無.
1194
				#備註:
1195
				#無.
1196
				$getEqualVar=search::getEqualVar($conf["search::getEqualVar"]);
1197
				unset($conf["search::getEqualVar"]);
1198
 
1199
				#如果連線失敗
1200
				if($getEqualVar["status"]==="false"){
1201
 
1202
					#設置執行失敗的訊息
1203
					$result["status"]="false";
1204
 
1205
					#紀錄錯誤訊息
1206
					$result["error"]=$getEqualVar;
1207
 
1208
					#回傳結果
1209
					return $result;
1210
 
1211
					}#if end
1212
 
1213
				#如果不存在
1214
				if($getEqualVar["founded"]==="false"){
1215
 
1216
					#設置執行失敗的訊息
1217
					$result["status"]="false";
1218
 
1219
					#紀錄錯誤訊息
1220
					$result["error"][]="目標資料庫 ".$conf["dbName"]." 不存在";
1221
 
1222
					#紀錄錯誤訊息
1223
					$result["error"][]=$getEqualVar;
1224
 
1225
					#回傳結果
1226
					return $result;
1227
 
1228
					}#if end
1229
 
3 liveuser 1230
				}#if end
177 liveuser 1231
 
1232
			#反之沒有指定資料庫
3 liveuser 1233
			else{
1234
 
1235
				#連線到mysql
1236
				#函式說明:
1237
				#連線到mysql-server,會回傳一個陣列
1238
				#回傳結果:
1239
				#$result["connectStatus"],若連線成功則爲0,連線失敗則爲1。
1240
				#$result["connectInformation"],爲回傳的mysql連線資訊。
1241
				#$result["error"],爲錯誤訊息
1242
				#必填參數:
1243
				$conf["db"]["mysqlConnect"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置。
1244
				$conf["db"]["mysqlConnect"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號。
1245
				#可省略參數:
1246
 
1247
				#如果 $conf["dbPassword"] 有設置
1248
				if(isset($conf["dbPassword"])){
1249
 
1250
					$conf["db"]["mysqlConnect"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼。
1251
 
1252
					}#if end
1253
 
1254
				#如果有設置 $conf["dbPort"] 
1255
				if(isset($conf["dbPort"])){
1256
 
1257
					#$conf["dbPort"],字串,為連線到mysql-Server時對應的port,可省略,預設為3306.
1258
					$conf["db::dbConnect"]["dbPort"]=$conf["dbPort"];
1259
 
1260
					}#if end
170 liveuser 1261
 
3 liveuser 1262
				$con=db::mysqlConnect($conf["db"]["mysqlConnect"]);
1263
				unset($conf["db"]);
1264
 
1265
				#如果連線失敗
170 liveuser 1266
				if($con["status"]==="false"){
3 liveuser 1267
 
1268
					#設置執行失敗的訊息
1269
					$result["status"]="false";
1270
 
1271
					#紀錄錯誤訊息
1272
					$result["error"]=$con;
1273
 
1274
					#回傳結果
1275
					return $result;
1276
 
1277
					}#if end
1278
 
170 liveuser 1279
				#debug
177 liveuser 1280
				#var_dump(__LINE__,$con);
170 liveuser 1281
 
3 liveuser 1282
				#儲存mysqli物件
170 liveuser 1283
				$result["queryConn"]=$con["connectInformation"];
3 liveuser 1284
 
1285
				}#else end
1286
 
1287
			}#if end
1288
 
1289
		#反之存在 $conf["dbLink"]
1290
		else{
1291
 
1292
			#取得db物件
1293
			$result["queryConn"]=$conf["dbLink"];
1294
 
1295
			}#else end
1296
 
1297
		#設置sql的查詢語言
1298
		$result["queryStringOri"]=$conf["dbSql"];
1299
 
1300
		#設置sql的查詢語言
1301
		$result["queryString"]=$conf["dbSql"];
1302
 
177 liveuser 1303
		#debug
1304
		#var_dump(__LINE__,$result["queryString"]);
1305
 
3 liveuser 1306
		#進行查詢
1307
		#如果有錯誤訊息
1308
		if(!($mysqli_query=mysqli_query($result["queryConn"],$result["queryString"]))){
1309
 
1310
			#設置執行失敗的訊息
1311
			$result["status"]="false";
1312
 
1313
			#設置提示執行mysql語法失敗
1314
			$result["error"][]="執行mysql語法失敗";
1315
 
1316
			#取得錯誤訊息
1317
			$result["error"]["mysqlErrorNo"]=mysqli_errno($result["queryConn"]);
1318
			$result["error"]["mysqlErrorDetail"]=mysqli_error($result["queryConn"]);
1319
 
1320
			#回傳結果
1321
			return $result;
1322
 
1323
			}#if end
1324
 
1325
		#取得正確的mysqli_resource
1326
		$result["queryResource"]=$mysqli_query;
1327
 
1328
		#如果要自動斷線
1329
		if($conf["autoClose"]==="true"){
1330
 
1331
			#連線結束
1332
			#函式說明:
1333
			#關閉與mysql的連線,會回傳一個陣列。
1334
			#回傳結果::
1335
			#$result["status"],若連線成功則爲"true",連線失敗則爲"false".
1336
			#$result["connectInformation"],爲回傳的mysql連線資訊。
1337
			#$result["error"],爲錯誤訊息陣列.		
1338
			#必填參數:
1339
			#$conf["mysqli"],字串,mysqli物件.
1340
			$conf["db::mysqlClose"]["mysqli"]=$result["queryConn"];
1341
			$mysqlClose=db::mysqlClose($conf["db::mysqlClose"]);
1342
			unset($conf["db::mysqlClose"]);
1343
 
1344
			#如果關閉mysql連線失敗
1345
			if($mysqlClose["status"]=="false"){
1346
 
1347
				#設置執行失敗的訊息
1348
				$result["status"]="false";
1349
 
1350
				#紀錄錯誤訊息
1351
				$result["error"]=$mysqlClose;
1352
 
1353
				#回傳結果
1354
				return $result;
1355
 
1356
				}#if end
1357
 
1358
			}#if end
177 liveuser 1359
 
3 liveuser 1360
		#設置執行成功的訊息
177 liveuser 1361
		$result["status"]="true";
3 liveuser 1362
 
1363
		#回傳查詢後的結果
1364
		return $result;
1365
 
1366
		}#function execMysqlQuery end
1367
 
1368
	/*
1369
	#函式說明:
1370
	#用shell執行mysql指令.
1371
	#回傳結果::
1372
	#$result["status"],"true"為執行成功;"false"為執行失敗。
1373
	#$result["error"],錯誤訊息的陣列
1374
	#$result["function"],當前執行的涵式
1375
	#$result["queryString"],mysql查詢的語言.
1376
	#必填參數:
1377
	#$conf["fileArgu"],字串,變數__FILE__的內容.
1378
	$conf["fileArgu"]=__FILE__;
1379
	#$conf["dbSql"],字串,要執行sql語法
1380
	$conf["dbSql"]="";
1381
	#$conf["dbAddress"],字串,爲mysql-Server的位置。
1382
	$conf["dbAddress"]=$dbAddress;
1383
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號。
1384
	$conf["dbAccount"]=$dbAccount; 
1385
	#可省略參數:
1386
	#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
1387
	#$conf["pre"]=array();
1388
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼。
1389
	#$conf["dbPassword"]=$dbPassword;
1390
	#$conf["dbName"],字串,爲要連的資料庫名稱
1391
	#$conf["dbName"]="";
1392
	#$conf["dbPort"],字串,為連線到mysql-Server時對應的port,可省略,預設為3306.
1393
	#$conf["dbPort"]="3306";
1394
	#參考資料:
1395
	#無.
1396
	#備註:
1397
	#無.
1398
	*/
1399
	public static function shell(&$conf){
1400
 
1401
		#初始化要回傳的內容
1402
		$result=array();
1403
 
1404
		#取得當前執行的函數名稱
1405
		$result["function"]=__FUNCTION__;
1406
 
1407
		#如果 $conf 不為陣列
1408
		if(gettype($conf)!="array"){
1409
 
1410
			#設置執行失敗
1411
			$result["status"]="false";
1412
 
1413
			#設置執行錯誤訊息
1414
			$result["error"][]="\$conf變數須為陣列形態";
1415
 
1416
			#如果傳入的參數為 null
1417
			if($conf===null){
1418
 
1419
				#設置執行錯誤訊息
1420
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
1421
 
1422
				}#if end
1423
 
1424
			#回傳結果
1425
			return $result;
1426
 
1427
			}#if end
1428
 
1429
		#檢查參數
1430
		#函式說明:
1431
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
1432
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1433
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
1434
		#$result["function"],當前執行的函式名稱.
1435
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
1436
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
1437
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
1438
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
1439
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
1440
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
1441
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
1442
		#必填參數:
1443
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
1444
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
1445
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
1446
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","dbSql","dbAccount");
1447
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
1448
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string");
1449
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
1450
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
1451
		#可省略參數:
1452
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
1453
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
1454
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
1455
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("pre","dbAddress","dbPassword","dbName","dbPort");
1456
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
1457
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array","string","string","string","string");
1458
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
1459
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,"localhost",null,null,"3306");
1460
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
1461
		#$conf["arrayCountEqualCheck"][]=array();
1462
		#參考資料:
1463
		#array_keys=>http://php.net/manual/en/function.array-keys.php
1464
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
1465
		unset($conf["variableCheck::checkArguments"]);
1466
 
1467
		#如果檢查失敗
1468
		if($checkResult["status"]=="false"){
1469
 
1470
			#設置錯誤識別
1471
			$result["status"]="false";
1472
 
1473
			#設置錯誤訊息
1474
			$result["error"]=$checkResult;
1475
 
1476
			#回傳解果
1477
			return $result;
1478
 
1479
			}#if end
1480
 
1481
		#如果 $checkResult["status"]等於"false";
1482
		if($checkResult["passed"]=="false"){
1483
 
1484
			#設置錯誤識別
1485
			$result["status"]="false";
1486
 
1487
			#設置錯誤訊息
1488
			$result["error"]=$checkResult;
1489
 
1490
			#回傳解果
1491
			return $result;
1492
 
1493
			}#if end
1494
 
1495
		#shell不接受「`」
1496
		#函式說明:
1497
		#處理字串避免網頁出錯
1498
		#回傳結果::
1499
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1500
		#$result["function"],當前執行的函數.
1501
		#$result["content"],爲處理好的字串.
1502
		#$result["error"],錯誤訊息陣列.
1503
		#$result["argu"],使用的參數. 
1504
		#必填參數:
1505
		$conf["stringProcess::correctCharacter"]["stringIn"]=$conf["dbSql"];#爲要處理的字串
1506
		#可省略參數:
1507
		$conf["stringProcess::correctCharacter"]["selectedCharacter"]=array("`");#爲被選擇要處理的字串/字元,須爲陣列值。
1508
			#若不設定則預設爲要將這些字串作替換 ("<",">","=","//","'","$","%","&","|","/*","*","#","\"").
1509
			#特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
1510
		$conf["stringProcess::correctCharacter"]["changeTo"]=array("");#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串).
1511
		#備註:
1512
		#無.
1513
		$correctCharacter=stringProcess::correctCharacter($conf["stringProcess::correctCharacter"]);
1514
		unset($conf["stringProcess::correctCharacter"]);
1515
 
1516
		#如果檢查失敗
1517
		if($correctCharacter["status"]=="false"){
1518
 
1519
			#設置錯誤識別
1520
			$result["status"]="false";
1521
 
1522
			#設置錯誤訊息
1523
			$result["error"]=$correctCharacter;
1524
 
1525
			#回傳解果
1526
			return $result;
1527
 
1528
			}#if end
1529
 
1530
		#取得處理後的 sql
1531
		$sql=$correctCharacter["content"];	
1532
 
1533
		#避免亂碼
1534
		$sql="SET NAMES UTF8;"."SET CHARACTER_SET_CLIENT=utf8;"."SET CHARACTER_SET_RESULTS=utf8;".$sql;
1535
 
1536
		#初始化參數
1537
		$argu=array();
1538
 
1539
		#精簡的參數
1540
		$argu[]=$sql;
1541
		$argu[]="|";
1542
		$argu[]="mysql";
1543
		$argu[]="-u";
1544
		$argu[]=$conf["dbAccount"];	
1545
 
1546
		#如果有設置 $conf["dbPassword"]
1547
		if(isset($conf["dbPassword"])){
1548
 
1549
			#加上密碼參數
1550
			$argu[]="-p".$conf["dbPassword"];
1551
 
1552
			}#if end
1553
 
1554
		#加上 位置參數
1555
		$argu[]="-h".$conf["dbAddress"];
1556
 
1557
		#如果有設置 $conf["dbName"]
1558
		if(isset($conf["dbName"])){
1559
 
1560
			#加上資料庫名稱參數
1561
			$argu[]=$conf["dbName"];
1562
 
1563
			}#if end
1564
 
1565
		#建立暫存的檔案
1566
 
1567
		#將指令寫入暫存的檔案裡面
1568
 
1569
		#函式說明:
1570
		#呼叫shell執行系統命令,並取得回傳的內容.
1571
		#回傳結果:
1572
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1573
		#$result["error"],錯誤訊息陣列.
1574
		#$result["function"],當前執行的函數名稱.
1575
		#$result["argu"],使用的參數.
1576
		#$result["cmd"],執行的指令內容.
1577
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
1578
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
1579
		#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
1580
		#$result["running"],是否還在執行.
1581
		#$result["pid"],pid.
1582
		#$result["statusCode"],執行結束後的代碼.
1583
		#必填的參數
1584
		#$conf["command"],字串,要執行的指令與.
1585
		$conf["external::callShell"]["command"]="echo";
1586
		#$conf["fileArgu"],字串,變數__FILE__的內容.
1587
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];		
1588
		#可省略參數:
1589
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
1590
		$conf["external::callShell"]["argu"]=$argu;
1591
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
1592
		#$conf["arguIsAddr"]=array();	
1593
 
1594
		#如果有參數
1595
		if(count($argu)>0){
1596
 
1597
			#$conf["thereIsShellVar"],陣列字串,指令搭配的參數"argu",若含有「\'」,則取代為「"」.每個argu參數都要有對應的元素."true"代表要置換.
1598
			$conf["external::callShell"]["thereIsShellVar"]=array();
1599
 
1600
			#針對每個參數
1601
			for($i=0;$i<count($argu);$i++){
1602
 
1603
				#第一個參數
1604
				if($i===0){
1605
 
1606
					#含有shell變數
1607
					$conf["external::callShell"]["thereIsShellVar"][$i]="true";
1608
 
1609
					}#if end
1610
 
1611
				#反之
1612
				else{
1613
 
1614
					#不含有shell變數
1615
					$conf["external::callShell"]["thereIsShellVar"][$i]="false";
1616
 
1617
					}#else 
1618
 
1619
				}#for end
1620
 
1621
			}#if end
1622
 
1623
		#如果有設置 pre
1624
		if(isset($conf["pre"])){
1625
 
1626
			#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
1627
			#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
1628
			#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
1629
			$conf["external::callShell"]["pre"]=$conf["pre"];
1630
 
1631
			}#if end
1632
 
1633
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
1634
		#$conf["enablePrintDescription"]="true";
1635
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
1636
		#$conf["printDescription"]="";
1637
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".
1638
		$conf["external::callShell"]["escapeshellarg"]="true";
1639
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
1640
		#$conf["username"]="";
1641
		#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
1642
		#$conf["password"]="";
1643
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
1644
		#$conf["useScript"]="";
1645
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
1646
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
1647
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
1648
		#$conf["inBackGround"]="";
1649
		#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
1650
		#$conf["getErr"]="false";
1651
		#$conf["doNotRun"],字串,"true"代表不執行指令,預設為"false"會執行指令.
1652
		$conf["external::callShell"]["doNotRun"]="true";
1653
		#備註:
1654
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
1655
		#參考資料:
1656
		#exec=>http://php.net/manual/en/function.exec.php
1657
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
1658
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
1659
		$callShell=external::callShell($conf["external::callShell"]);
1660
		unset($conf["external::callShell"]);
1661
 
1662
		#debug
1663
		#var_dump($callShell);
1664
		#exit;
1665
 
1666
		#如果檢查參數作業出錯
1667
		if($callShell["status"]=="false"){
1668
 
1669
			/* debug
1670
			$fsock=fopen("/var/www/html/log/log.txt","a");
1671
			fwrite($fsock,"func:".__CLASS__." line:".__LINE__.":".print_r($callShell,true).PHP_EOL.PHP_EOL);
1672
			fclose($fsock);
1673
			*/
1674
 
1675
			#設置執行錯誤識別
1676
			$result["status"]="false";
1677
 
1678
			#設置錯誤訊息
1679
			$result["error"]=$callShell;
1680
 
1681
			#回傳結果
1682
			return $result;
1683
 
1684
			}#if end
1685
 
1686
		#函式說明:
1687
		#連線到 unixDomainSockServer 提供的 unix domain socket.
1688
		#回傳結果:
1689
		#$result["status"],"true"代表執行正常;"false"代表執行不正常.
1690
		#$result["error"],錯誤訊息陣列.
1691
		#$result["function"],當前執行的函式名稱.
1692
		#$result["content"],取得的回應.
1693
		#必填參數:
1694
		#$conf["sock"],字串,要連線的unix domain socket.
1695
		$conf["sock::unixDomainSockClient"]["sock"]=qbpwcf_usock_path;
1696
		#可省略參數:
1697
		#$conf["id"],字串,取得的id,若無此值,則會得到新的數值.
1698
		#$conf["id"]="";
1699
		#$conf["cmd"],字串,要執行的指令,當$conf["id"]參數合法時,才會執行.
1700
		$conf["sock::unixDomainSockClient"]["cmd"]=$callShell["escape"]["cmd"];
1701
		#$conf["param"],參數陣列.
1702
		$conf["sock::unixDomainSockClient"]["param"]=$callShell["escape"]["argu"];
1703
		#$conf["escaped"],字串,param參數是否已經escaped了,預設為"false",反之為"true".
1704
		$conf["sock::unixDomainSockClient"]["escaped"]="true";
1705
		#$conf["clear"],字串,設為"true"代表要清除過期的用戶連線.
1706
		#$conf["clear"]="true";
1707
		#參考資料:
1708
		#http://php.net/manual/en/function.stream-socket-client.php
1709
		#http://php.net/manual/en/function.stream-get-contents.php
1710
		#備註:
1711
		#無.
1712
		$paramsOfUnixDomainSockClient=$conf["sock::unixDomainSockClient"];
1713
		$unixDomainSockClient=sock::unixDomainSockClient($conf["sock::unixDomainSockClient"]);
1714
		unset($conf["sock::unixDomainSockClient"]);
1715
 
1716
		#如果執行失敗
1717
		if($unixDomainSockClient["status"]==="false"){
1718
 
1719
			#設置執行錯誤識別
1720
			$result["status"]="false";
1721
 
1722
			#設置錯誤訊息
1723
			$result["error"]=$unixDomainSockClient;
1724
 
1725
			#回傳結果
1726
			return $result;
1727
 
1728
			}#if end
1729
 
1730
		#取得json回應
1731
		$jsonRes=json_decode($unixDomainSockClient["content"]);
1732
 
1733
		#如果執行失敗
1734
		if($jsonRes===null){
1735
 
1736
			#設置執行錯誤識別
1737
			$result["status"]="false";
1738
 
1739
			#設置錯誤訊息
1740
			$result["error"]=$unixDomainSockClient;
1741
 
1742
			#回傳結果
1743
			return $result;
1744
 
1745
			}#if end
1746
 
1747
		#如果沒有產生新id
1748
		if(!isset($jsonRes->id)){
1749
 
1750
			#設置執行錯誤識別
1751
			$result["status"]="false";
1752
 
1753
			#設置錯誤訊息
1754
			$result["error"]=$unixDomainSockClient;
1755
 
1756
			#回傳結果
1757
			return $result;
1758
 
1759
			}#if end
1760
 
1761
		#用新的id再傳送一次要求給 qbpwcf_usock_path
1762
		$paramsOfUnixDomainSockClient["id"]=$jsonRes->id;		
1763
		$unixDomainSockClient=sock::unixDomainSockClient($paramsOfUnixDomainSockClient);
1764
		unset($paramsOfUnixDomainSockClient);
1765
 
1766
		#var_dump($unixDomainSockClient);
1767
 
1768
		#如果執行失敗
1769
		if($unixDomainSockClient["status"]==="false"){
1770
 
1771
			#設置執行錯誤識別
1772
			$result["status"]="false";
1773
 
1774
			#設置錯誤訊息
1775
			$result["error"]=$unixDomainSockClient;
1776
 
1777
			#回傳結果
1778
			return $result;
1779
 
1780
			}#if end
1781
 
1782
		#執行正常
1783
		$result["status"]="true";
1784
 
1785
		#設置執行的結果
1786
		$result["content"]=$unixDomainSockClient;
1787
 
1788
		#回傳結果
1789
		return $result;
1790
 
1791
		}#function shell end
1792
 
1793
	/*
1794
	#函式說明:
1795
	#建立資料庫,會回傳一個陣列。
1796
	#回傳結果:
1797
	#$result["status"],成功爲"true",失敗爲"false".
1798
	#$result["error"],錯誤訊息.
1799
	#$result["function"],當前執行的函數名稱.
1800
	#必填參數:
1801
	#$conf["dbAddress"],字串,爲mysql-Server的位置。
1802
	$conf["dbAddress"]=$dbAddress;
1803
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號。
1804
	$conf["dbAccount"]=$dbAccount;
1805
	#$conf["newDatabaseName"],字串,爲要新增的資料庫名稱.
1806
	$conf["newDatabaseName"]="";
1807
	#可省略參數: 
1808
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼。
1809
	#$conf["dbPassword"]=$dbPassword;
1810
	#$conf["dbName"],字串,爲要連的資料庫名稱
1811
	#$conf["dbName"]="";
177 liveuser 1812
	#$conf["dbPort"],字串,為連線到mysql-Server時對應的port,預設為3306.
1813
	#$conf["dbPort"]="3306";
3 liveuser 1814
	#參考資料:
1815
	#maraiDB-createDatabase => https://mariadb.com/kb/en/mariadb/mariadb-documentation/data-types/string-data-types/data-types-character-sets-and-collations/setting-character-sets-and-collations/
1816
	#備註:
1817
	#無.
1818
	*/
1819
	public static function createDatabase($conf){
1820
 
1821
		#初始化錯誤訊息 
1822
		$result=array();
1823
 
1824
		#取得當前執行的函數名稱
1825
		$result["function"]=__FUNCTION__;
1826
 
1827
		#如果 $conf 不為陣列
1828
		if(gettype($conf)!="array"){
1829
 
1830
			#設置執行失敗
1831
			$result["status"]="false";
1832
 
1833
			#設置執行錯誤訊息
1834
			$result["error"][]="\$conf變數須為陣列形態";
1835
 
1836
			#如果傳入的參數為 null
1837
			if($conf==null){
1838
 
1839
				#設置執行錯誤訊息
1840
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
1841
 
1842
				}#if end
1843
 
1844
			#回傳結果
1845
			return $result;
1846
 
1847
			}#if end
1848
 
1849
		#檢查參數
1850
		#函式說明:
1851
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
1852
		#回傳結果:
1853
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
1854
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
1855
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
1856
		#必填參數:
1857
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
177 liveuser 1858
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("dbAddress","dbPassword","newDatabaseName");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
3 liveuser 1859
		#可省略參數:
177 liveuser 1860
		$conf["variableCheck"]["isexistMuti"]["variableType"]=array("string","string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
3 liveuser 1861
		#$conf["variableCheck"]["isexistMuti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
1862
		#備註:
1863
		#功能與checkExistAndType函式相同
1864
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
1865
		unset($conf["variableCheck"]["isexistMuti"]);
1866
 
1867
		#如果 $checkResult["passed"] 等於 "fasle"
1868
		if($checkResult["passed"]=="false"){
1869
 
1870
			#設置錯誤識別
1871
			$result["status"]="false";
1872
 
1873
			#設置錯誤訊息
1874
			$result["error"]=$checkResult;
1875
 
1876
			#回傳結果
1877
			return $result;
1878
 
1879
			}#if end
1880
 
1881
		#建立資料庫的sql語法
1882
		$sql="CREATE DATABASE ".$conf["newDatabaseName"]."  CHARACTER SET='utf8' COLLATE='utf8_unicode_ci'";
1883
 
1884
		#函式說明:
1885
		#執行mysql指令
1886
		#回傳結果::
1887
		#$result["status"],"true"為執行成功;"false"為執行失敗。
1888
		#$result["error"],錯誤訊息的陣列
1889
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
1890
		#$result["queryString"],mysql查詢的語言
1891
		#查詢號的解果,需要解析。
1892
		#必填參數:
1893
		$conf["db"]["execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
1894
		$conf["db"]["execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
1895
		$conf["db"]["execMysqlQuery"]["dbSql"]=$sql;#要執行sql語法
1896
		#可省略參數: 
1897
 
1898
		#如果 $conf["dbPassword"] 有設定
1899
		if(isset($conf["dbPassword"])){
1900
 
1901
			$conf["db"]["execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
1902
 
1903
			}#if end
1904
 
1905
		#如果 $conf["dbPort"] 有設定
1906
		if(isset($conf["dbPort"])){
1907
 
1908
			#$conf["dbPort"],字串,為連線到mysql-Server時對應的port,可省略,預設為3306.
1909
			$conf["db"]["execMysqlQuery"]["dbPort"]=$conf["dbPort"];
1910
 
1911
			}#if end
1912
 
1913
		$db["execMysqlQuery"]=db::execMysqlQuery($conf["db"]["execMysqlQuery"]);
1914
		unset($conf["db"]["execMysqlQuery"]);
1915
 
1916
		#如果 $db["execMysqlQuery"]["status"] 等於 "false"
1917
		if($db["execMysqlQuery"]["status"]=="false"){
1918
 
1919
			#設置錯誤識別
1920
			$result["status"]="false";
1921
 
1922
			#設置錯誤訊息
1923
			$result["error"]=$db["execMysqlQuery"];
1924
 
1925
			#回傳結果
1926
			return $result;
1927
 
1928
			}#if end
1929
 
1930
		#執行道這邊代表執行正確
1931
		$result["status"]="true";
1932
 
1933
		#回傳結果
1934
		return $result;
1935
 
1936
		}#function createDatabase end
1937
 
1938
	/*
1939
	#函式說明:
1940
	#建立資料表,會回傳一個陣列。
1941
	#回傳結果:
1942
	#$result["status"],若成功則爲"true",失敗則爲"false"。
1943
	#$result["error"],錯誤訊息的陣列。
1944
	#$result["sql"],要執行的sql語法。
1945
	#$result["function"],當前執行的函數名稱.
1946
	#必填參數:
1947
	#$conf["dbAddress"],字串,爲mysql-Server的位置
1948
	$conf["dbAddress"]=$dbAddress;
1949
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號
1950
	$conf["dbAccount"]=$dbAccount;
1951
	#$conf["selectedDataBaseName"],字串,要選取的資料庫名稱	
1952
	$conf["selectedDataBaseName"]=$dbName;
1953
	#$conf["newDataTableName"],字串,爲要新增的資料表名稱.
1954
	$conf["newDataTableName"]="";
1955
	#$conf["newDataTableColmunName"],字串,為新資料表的欄位名稱.
1956
	$conf["newDataTableColmunName"]=array("id","lastUpdatedTime");
1957
	#$conf["newDataTableColmunType"],字串陣列,為新資料表的欄位儲存的型態,常見的有:int,用來儲存整數;double,用來儲存有小數點的數值;timestamp,用來儲存時間;char,用來儲存任何東西,儲存成字元
1958
	$conf["newDataTableColmunType"]=array("int","timestamp");
1959
	#$conf["newDataTableColmunDefault"],字串陣列,為該欄位的預設值,若為currentTime則為當前時間;若為updatedCurrentTime則為初始為當前時間,之後每更動一次就更新為當次時間;若為null則代表空值;若為""則為不設定;以外的內容視為指定的數值.
1960
	$conf["newDataTableColmunDefault"]=array("","updatedCurrentTime");
1961
	#$conf["newDataTableColmunLength"],字串陣列,為新資料表的欄位儲存的長度,""代表不指定長度.
1962
	$conf["newDataTableColmunLength"]=array("","");
1963
	#$conf["newDataTableColmunNull"],字串陣列,為新資料表的欄位是否可為NULL.若為no則代表不能為null;若為yes則代表可以為null.
177 liveuser 1964
	$conf["newDataTableColmunNull"]=array("no","no","no","no");	
1965
	#$conf["newDataTableColmunAutoAdd"],字串陣列,"true"為新資料表的欄位自動+1;反之設為""即可.
1966
	$conf["newDataTableColmunAutoAdd"]=array("true","","","");
3 liveuser 1967
	#$conf["newDataTableColmunKeyType"],字串陣列,為該欄位的鍵屬性:primary key代表主鍵;留"",代表不指定。
177 liveuser 1968
	$conf["newDataTableColmunKeyType"]=array("primary key","","","");
3 liveuser 1969
	#可省略參數:
1970
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼.
1971
	#$conf["dbPassword"]=$dbPassword;
1972
	#$conf["dbPort"],字串,為連線到mysql-Server時對應的port,可省略,預設為3306.
1973
	#$conf["dbPort"]="3306";
1974
	#參考資料:
1975
	#無.
1976
	#備註:
1977
	#無.
1978
	*/
1979
	public static function createDataTable($conf){
1980
 
1981
		#初始化要回傳的結果
1982
		$result=array();
1983
 
1984
		#取得當前執行的函數名稱
1985
		$result["function"]=__FUNCTION__;
1986
 
1987
		#如果 $conf 不為陣列
1988
		if(gettype($conf)!="array"){
1989
 
1990
			#設置執行失敗
1991
			$result["status"]="false";
1992
 
1993
			#設置執行錯誤訊息
1994
			$result["error"][]="\$conf變數須為陣列形態";
1995
 
1996
			#如果傳入的參數為 null
1997
			if($conf==null){
1998
 
1999
				#設置執行錯誤訊息
2000
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
2001
 
2002
				}#if end
2003
 
2004
			#回傳結果
2005
			return $result;
2006
 
2007
			}#if end
2008
 
2009
		#函式說明:
2010
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
2011
		#回傳結果:
2012
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
2013
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
2014
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
2015
		#必填參數:
2016
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
2017
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("dbAddress","dbAccount","selectedDataBaseName","newDataTableName","newDataTableColmunName","newDataTableColmunType","newDataTableColmunLength","newDataTableColmunDefault","newDataTableColmunNull","newDataTableColmunAutoAdd","newDataTableColmunKeyType");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
2018
		#可省略參數:
2019
		#$conf["variableType"]=array();#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
2020
		#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
2021
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
2022
		unset($conf["variableCheck"]["isexistMuti"]);
2023
 
2024
		#如果檢查動作不正常
2025
		if($checkResult["status"]=="false"){
2026
 
2027
			#設置執失敗訊息
2028
			$result["status"]="false";
2029
 
2030
			#設置錯誤訊息
2031
			$result["error"]=$checkResult;
2032
 
2033
			#回傳錯誤訊息
2034
			return $result;
2035
 
2036
			}#if end
2037
 
2038
		#如果檢查不通過
2039
		if($checkResult["passed"]=="false"){
2040
 
2041
			#設置執失敗訊息
2042
			$result["status"]="false";
2043
 
2044
			#設置錯誤訊息
2045
			$result["error"]=$checkResult;
2046
 
2047
			#回傳錯誤訊息
2048
			return $result;
2049
 
2050
			}#if end
2051
 
2052
		#建立資料表的語法
2053
		$sql="create table ".$conf["selectedDataBaseName"].".".$conf["newDataTableName"];
2054
 
2055
		#加上指定欄位內容的開頭
2056
		$sql=$sql."(";
2057
 
2058
		#針對每個欄位
2059
		for($i=0;$i<count($conf["newDataTableColmunName"]);$i++){
2060
 
2061
			#接上欄位名稱
2062
			$sql=$sql.$conf["newDataTableColmunName"][$i];
2063
 
2064
			#接上欄位儲存型態
2065
			$sql=$sql." ".$conf["newDataTableColmunType"][$i];
2066
 
2067
			#如果有設定資料長度
2068
			if($conf["newDataTableColmunLength"][$i]!=""){
2069
 
2070
				#接上欄位儲存長度
2071
				$sql=$sql." (".$conf["newDataTableColmunLength"][$i].")";
2072
 
2073
				}#if end
2074
 
2075
			#如果有設定值
2076
			if($conf["newDataTableColmunDefault"][$i]!=""){
2077
 
2078
				switch($conf["newDataTableColmunDefault"][$i]){
2079
 
2080
					#如果設為 currentTime
2081
					case "currentTime":
2082
 
2083
						#設定語法
2084
						$sql=$sql." default CURRENT_TIMESTAMP";
2085
 
2086
						#跳出switch
2087
						break;
2088
 
2089
					#如果設為updatedCurrentTime
2090
					case "updatedCurrentTime":
2091
 
2092
						#設定語法
2093
						$sql=$sql." default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP";
2094
 
2095
						#跳出switch
2096
						break;
2097
 
2098
					#如果設為 null
2099
					case "null":
2100
 
2101
						#設定語法
2102
						$sql=$sql." default null";
2103
 
2104
						#跳出switch
2105
						break;
2106
 
2107
					#如果不為以上數值
2108
					default :
2109
 
2110
						#設定語法
2111
						$sql=$sql." default ".$conf["newDataTableColmunDefault"][$i];
2112
 
2113
						#跳出switch
2114
						break;
2115
 
2116
					}#switch end
2117
 
2118
				}#if end
2119
 
2120
			#如果有設定不能為NULL
2121
			if($conf["newDataTableColmunNull"][$i]=="no"){
2122
 
2123
				$sql=$sql." NOT NULL";
2124
 
2125
				}#if end
2126
 
2127
			#如果有設定要自動加1
2128
			if($conf["newDataTableColmunAutoAdd"][$i]=="true"){
2129
 
2130
				#加上自動加1的語句
2131
				$sql=$sql." auto_increment";
2132
 
2133
				}#if end
2134
 
2135
			#如果有設定鍵的屬性
2136
			if($conf["newDataTableColmunKeyType"][$i]!=""){
2137
 
2138
				$sql=$sql." ".$conf["newDataTableColmunKeyType"][$i];
2139
 
2140
				}#if end
2141
 
2142
			#如果不是最後一個欄位
2143
			if($i!=count($conf["newDataTableColmunName"])-1){
2144
 
2145
				#加上逗號
177 liveuser 2146
				$sql=$sql.",";
3 liveuser 2147
 
2148
				}#if end
2149
 
2150
			}#for end
2151
 
2152
		#加上指定欄位內容的結束
2153
		$sql=$sql.") DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ;";
2154
 
2155
		#取得sql語法
2156
		$result["sql"]=$sql;
2157
 
2158
		#var_dump($sql);
2159
 
2160
		#函式說明:
2161
		#回傳結果::
2162
		#$result["status"],"true"為執行成功;"false"為執行失敗。
2163
		#$result["error"],錯誤訊息的陣列
2164
		#查詢號的解果,需要解析。
2165
		#必填參數:
2166
		$conf["db"]["execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
2167
		$conf["db"]["execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
2168
		$conf["db"]["execMysqlQuery"]["dbSql"]=$sql;#要執行sql語法
2169
		#可省略參數: 
2170
 
2171
		#如果有設定密碼
2172
		if(isset($conf["dbPassword"])){
2173
 
2174
			$conf["db"]["execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
2175
 
2176
			}#if end
2177
 
2178
		#如果 $conf["dbPort"] 有設定
2179
		if(isset($conf["dbPort"])){
2180
 
2181
			#$conf["dbPort"],字串,為連線到mysql-Server時對應的port,可省略,預設為3306.
2182
			$conf["db"]["execMysqlQuery"]["dbPort"]=$conf["dbPort"];
2183
 
2184
			}#if end
2185
 
2186
		$queryResult=db::execMysqlQuery($conf["db"]["execMysqlQuery"]);
2187
		unset($conf["db"]["execMysqlQuery"]);
2188
 
2189
		#如果執行 sql 失敗
2190
		if($queryResult["status"]=="false"){
2191
 
2192
			#設置執行失敗訊息
2193
			$result["status"]="false";
2194
 
2195
			#設置錯誤訊息
2196
			$result["error"]=$queryResult["error"];
2197
 
177 liveuser 2198
			#回傳結果
3 liveuser 2199
			return $result;
2200
 
2201
			}#if end
2202
 
2203
		#設置執成功訊息
2204
		$result["status"]="true";
2205
 
2206
		#回傳結果
2207
		return $result;
2208
 
2209
		}#function createDataTable end
2210
 
2211
	/*
2212
	#函式說明:
2213
	#新增資料表的欄位
2214
	#回傳結果:
2215
	#$result["status"],"true",代表執行成功;"false"代表執行失敗
2216
	#$result["error"],錯誤訊息陣列
2217
	#$result["sql"],執行的sql內容
2218
	#$result["function"],當前執行的函數名稱
2219
	#必填參數:
2220
	#$conf["dbAddress"],字串,爲mysql-Server的位置.
2221
	$conf["dbAddress"]=$dbAddress;
2222
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號.
2223
	$conf["dbAccount"]=$dbAccount;#爲用於連入mysql-Server時要使用的帳號.
2224
	#$conf["selectedDataBaseName"],字串,爲目標資料表所屬的資料庫.
2225
	$conf["selectedDataBaseName"]="";
2226
	#$conf["selectedDataTableName"],字串,爲目標資料表所屬的資料庫.
2227
	$conf["selectedDataTableName"]="";
2228
	#$conf["addedColumnName"],字串,要增加的欄位名稱.
2229
	$conf["addedColumnName"]="";
2230
	#$conf["newDataTableColmunType"],字串,為新資料表的欄位儲存的型態,常見的有:#int,用來儲存整數.#double,用來儲存有小數點的數值.#timestamp,用來儲存時間.#varchar,最多可以儲存65535個字元,請記得使用$conf["newDataTableColmunLength"]參數指定長度.#char,用來儲存任何東西,儲存成字元,最大長限制為255.#tinytext,儲存長度限制為255,根據實際使用大小來調整儲存大小.#text,儲存大量文字,不能當索引鍵.
2231
	$conf["newDataTableColmunType"]="char";
2232
	#可省略參數: 
2233
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
2234
	#$conf["dbPassword"]=$dbPassword;
2235
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,預設為3306.
2236
	#$conf["dbPort"]="3306";
2237
	#$conf["newDataTableColmunLength"],字串,為新資料表的欄位儲存的長度.
2238
	#$conf["newDataTableColmunLength"]="";
2239
	#$conf["newDataTableColmunDefault"],字串,為該欄位的預設值.#currentTime,當前時間.#updatedCurrentTime,初始為當前時間,之後每更動一次就更新為當次時間.#null,代表空值.#以外的內容視為指定的數值.
2240
	#$conf["newDataTableColmunDefault"]="";
2241
	#$conf["newDataTableColmunNotNull"],字串,為新資料表的欄位不可為NULL.#"true"代表不能為null.#"false"代表可以為null.
2242
	#$conf["newDataTableColmunNotNull"]="true";#
2243
	#$conf["newDataTableColmunAutoAdd"],字串,為新資料表的欄位是否自動+1
2244
	#$conf["newDataTableColmunAutoAdd"]="true";
2245
	#$conf["newDataTableColmunKeyType"],字串,為該欄位的鍵屬性:"primary key"爲主鍵、"index"爲索引鍵、"foreign key"爲外鍵
2246
	#$conf["newDataTableColmunKeyType"]="primary key";
2247
	#$conf["foreignDb"]="";#外鍵參考的資料庫,預設為$conf["selectedDataBaseName"].
2248
	#$conf["foreignDb"]=$conf["selectedDataBaseName"];
2249
	#$conf["foreignTable"],字串,外鍵參考的資料表
2250
	#$conf["foreignTable"]="";
2251
	#$conf["foreignTableColumn"],字串,外鍵參考的資料表欄位
2252
	#$conf["foreignTableColumn"]="";
2253
	#$conf["onUpdateAction"],字串,當外鍵參考的欄位資料修改時,外鍵要如何回應?"CASCADE"會將有所關聯的紀錄行也會進行刪除或修改。"SET NULL"代表會將有所關聯的紀錄行設定成 NULL。"NO ACTION"代表有存在的關聯紀錄行時,會禁止父資料表的刪除或修改動作。
2254
	#$conf["onUpdateAction"]="CASCADE";#
2255
	#$conf["onDeleteAction"],字串,當外鍵參考的欄位資料移除時,外鍵要如何回應?"CASCADE"會將有所關聯的紀錄行也會進行刪除或修改。"SET NULL"代表會將有所關聯的紀錄行設定成 NULL。"NO ACTION"代表有存在的關聯紀錄行時,會禁止父資料表的刪除或修改動作。
2256
	#$conf["onDeleteAction"]="SET NULL";	
2257
	#$conf["comment"],字串,欄位的註解,預設不使用.
2258
	#$conf["comment"]="";
2259
	#參考資料:
2260
	#儲存型態=>https://mariadb.com/kb/en/data-types/
2261
	#備註:
2262
	#無.
2263
	*/
2264
	public static function addColumn(&$conf){
2265
 
2266
		#初始化要回傳的結果
2267
		$result=array();
2268
 
2269
		#記錄當前執行的函數名稱
2270
		$result["function"]=__FUNCTION__;
2271
 
2272
		#如果 $conf 不為陣列
2273
		if(gettype($conf)!="array"){
2274
 
2275
			#設置執行失敗
2276
			$result["status"]="false";
2277
 
2278
			#設置執行錯誤訊息
2279
			$result["error"][]="\$conf變數須為陣列形態";
2280
 
2281
			#如果傳入的參數為 null
2282
			if($conf==null){
2283
 
2284
				#設置執行錯誤訊息
2285
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
2286
 
2287
				}#if end
2288
 
2289
			#回傳結果
2290
			return $result;
2291
 
2292
			}#if end
2293
 
2294
		#檢查參數
2295
		#函式說明:
2296
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
2297
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2298
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
2299
		#$result["function"],當前執行的函式名稱.
2300
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
2301
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
2302
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
2303
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
2304
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
2305
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
2306
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
2307
		#必填參數:
2308
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
2309
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
2310
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
2311
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("dbAddress","dbAccount","selectedDataBaseName","selectedDataTableName","addedColumnName");
2312
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
2313
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string","string","string");
2314
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
2315
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
2316
		#可省略參數:
2317
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
2318
		#$conf["canBeEmptyString"]="false";
2319
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
2320
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("dbPassword","dbPort","newDataTableColmunType","newDataTableColmunLength","newDataTableColmunDefault","newDataTableColmunNotNull","newDataTableColmunAutoAdd","newDataTableColmunKeyType","foreignDb","foreignTable","foreignTableColumn","onUpdateAction","onDeleteAction","comment");
2321
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
2322
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string","string","string","string","string","string","string","string","string","string","string","string");
2323
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
2324
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null,null,null,null,null,null,null,"\$conf[\"selectedDataBaseName\"]",null,null,null,null,null);
2325
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
2326
		#$conf["arrayCountEqualCheck"][]=array();
2327
		#參考資料:
2328
		#array_keys=>http://php.net/manual/en/function.array-keys.php
2329
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
2330
		unset($conf["variableCheck::checkArguments"]);
2331
 
2332
		#如果檢查過程有錯
2333
		if($checkResult["status"]=="false"){
2334
 
2335
			#設置執行失敗的訊息
2336
			$result["status"]="false";
2337
 
2338
			#設置錯誤訊息
2339
			$result["error"]=$checkResult;
2340
 
2341
			#回傳結果
2342
			return $result;
2343
 
2344
			}#if end
2345
 
2346
		#如果檢查不通過
2347
		if($checkResult["passed"]=="false"){
2348
 
2349
			#設置執行失敗的訊息
2350
			$result["status"]="false";
2351
 
2352
			#設置錯誤訊息
2353
			$result["error"]=$checkResult;
2354
 
2355
			#回傳結果
2356
			return $result;
2357
 
2358
			}#if end
2359
 
2360
		#組合sql語言
2361
		$sql="alter table `".$conf["selectedDataTableName"]."` add `".$conf["addedColumnName"]."`";
2362
 
2363
		#接上欄位儲存型態
2364
		$sql=$sql." ".$conf["newDataTableColmunType"];
2365
 
2366
		#如果資料形態爲 "double、float"
2367
		if($conf["newDataTableColmunType"]=="double" || $conf["newDataTableColmunType"]=="float" ){
2368
 
2369
			#則取消資料長度的限制
2370
			unset($conf["newDataTableColmunLength"]);
2371
 
2372
			}#if end	
2373
 
2374
		#如果有設定資料長度,且資料儲存型態不為 tinytext 與 text
2375
		if(isset($conf["newDataTableColmunLength"]) && $conf["newDataTableColmunType"]!="tinytext" && $conf["newDataTableColmunType"]!="text"){
2376
 
2377
			#接上欄位儲存長度
2378
			$sql=$sql." (".$conf["newDataTableColmunLength"].")";
2379
 
2380
			}#if end
2381
 
2382
		#如果資料形態不爲 "double、float、"
2383
		if($conf["newDataTableColmunType"]!="double" && $conf["newDataTableColmunType"]!="float" && $conf["newDataTableColmunType"]!="int"){
2384
 
2385
			#指定欄CHARACTER SET爲utf8,COLLATE爲utf8_unicode_ci
2386
			$sql=$sql." CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci'";
2387
 
2388
			}#if end
2389
 
2390
		#如果有設定預設值
2391
		if(isset($conf["newDataTableColmunDefault"])){
2392
 
2393
			#如果 $conf["newDataTableColmunType"] 不等於 "tinytext" 也不等於 "text"
2394
			if($conf["newDataTableColmunType"]!="tinytext" && $conf["newDataTableColmunType"]!="text"){
2395
 
2396
				#根據 $conf["newDataTableColmunDefault"] 的數值內容
2397
				switch($conf["newDataTableColmunDefault"]){
2398
 
2399
					#如果設為 currentTime
2400
					case "currentTime":
2401
 
2402
						#設定語法
2403
						$sql=$sql." default CURRENT_TIMESTAMP";
2404
 
2405
						#跳出switch
2406
						break;
2407
 
2408
					#如果設為updatedCurrentTime
2409
					case "updatedCurrentTime":
2410
 
2411
						#設定語法
2412
						$sql=$sql." default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP";
2413
 
2414
						#跳出switch
2415
						break;
2416
 
2417
					#如果設為 null
2418
					case "null":
2419
 
2420
						#設定語法
2421
						$sql=$sql." default null";
2422
 
2423
						#跳出switch
2424
						break;
2425
 
2426
					#如果不為以上數值
2427
					default :
2428
 
2429
						#設定語法
2430
						$sql=$sql." default '".$conf["newDataTableColmunDefault"]."'";
2431
 
2432
						#跳出switch
2433
						break;
2434
 
2435
					}#switch end
2436
 
2437
				}#if end
2438
 
2439
			}#if end
2440
 
2441
		#如果有設定不能為NUL
2442
		if(isset($conf["newDataTableColmunNotNull"])){
2443
 
2444
			#如果 $conf["newDataTableColmunNotNull"] 等於 "true"
2445
			if($conf["newDataTableColmunNotNull"]=="true"){
2446
 
2447
				$sql=$sql." NOT NULL";
2448
 
2449
				}#if end
2450
 
2451
			}#if end
2452
 
2453
			#如果有設定要自動加1
2454
			if(isset($conf["newDataTableColmunAutoAdd"])){
2455
 
2456
				#如果 $conf["newDataTableColmunAutoAdd"] 設為 "true"
2457
				if($conf["newDataTableColmunAutoAdd"]=="true"){
2458
 
2459
					#加上自動加1的語句
2460
					$sql=$sql." auto_increment";
2461
 
2462
					}#if end
2463
 
2464
				}#if end
2465
 
2466
		#如果有設定註解
2467
		if(isset($conf["comment"])){
2468
 
2469
			#設定其註解
2470
			$sql=$sql." COMMENT '".$conf["comment"]."' ";
2471
 
2472
			}#if end		
2473
 
2474
		#如果有設定鍵的屬性
2475
		if(isset($conf["newDataTableColmunKeyType"])){
2476
 
2477
			#如果爲 primary key 
2478
			if($conf["newDataTableColmunKeyType"]=="primary key"){
2479
 
2480
				#設定其鍵值
2481
				$sql=$sql." ".$conf["newDataTableColmunKeyType"];
2482
 
2483
				}#if end
2484
 
2485
			}#if end
2486
 
2487
		#執行sql語法
2488
		#函式說明:
2489
		#執行mysql指令
2490
		#回傳結果::
2491
		#$result["status"],"true"為執行成功;"false"為執行失敗。
2492
		#$result["error"],錯誤訊息的陣列
2493
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
2494
		#$result["queryString"],mysql查詢的語言
2495
		#查詢號的解果,需要解析。
2496
		#必填參數:
2497
		$conf["db"]["execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
2498
		$conf["db"]["execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
2499
		$conf["db"]["execMysqlQuery"]["dbSql"]=$sql.";";#要執行sql語法
2500
		#可省略參數:
2501
 
2502
		#如果 $conf["dbPassword"] 有設定
2503
		if(isset($conf["dbPassword"])){
2504
 
2505
			#設定其密碼
2506
			$conf["db"]["execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
2507
 
2508
			}#if end
2509
 
2510
		$conf["db"]["execMysqlQuery"]["dbName"]=$conf["selectedDataBaseName"];#為是否要指定資料庫,預設不指定.
2511
 
2512
		#如果有設定 $conf["dbPort"]	
2513
		if(isset($conf["dbPort"])){
2514
 
2515
			#設定 $conf["dbPort"]
2516
			$conf["db"]["execMysqlQuery"]["dbPort"]=$conf["dbPort"];
2517
 
2518
			}#if end			
2519
 
2520
		$queryResult=db::execMysqlQuery($conf["db"]["execMysqlQuery"]);
2521
		unset($conf["db"]["execMysqlQuery"]);
2522
 
2523
		#如果有錯誤
2524
		if($queryResult["status"]=="false"){
2525
 
2526
			#設置錯誤訊息
2527
			$result["status"]="false";
2528
 
2529
			#設置錯誤提示
2530
			$result["error"]=$queryResult;
2531
 
2532
			#回傳結果
2533
			return $result;
2534
 
2535
			}#if end
2536
 
2537
		#取得執行的sql語法
2538
		$result["sql"][]=$queryResult["queryString"];
2539
 
2540
		#如果 $conf["newDataTableColmunKeyType"] 存在
2541
		if(isset($conf["newDataTableColmunKeyType"])){
2542
 
2543
			#如果爲 index
2544
			if($conf["newDataTableColmunKeyType"]=="index"){
2545
 
2546
				#函式說明:
2547
				#新增資料表的欄位
2548
				#回傳結果:
2549
				#$result["status"],"true",代表執行成功;"false"代表執行失敗.
2550
				#$result["function"],當前執行的函數名稱.
2551
				#$result["error"],錯誤訊息陣列.
2552
				#$result["sql"],執行的sql字串.
2553
				#必填參數:
2554
				$conf["db::setColumnIndex"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
2555
				$conf["db::setColumnIndex"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
2556
				$conf["db::setColumnIndex"]["selectedDataBaseName"]=$conf["selectedDataBaseName"];#爲目標資料表所屬的資料庫
2557
				$conf["db::setColumnIndex"]["selectedDataTableName"]=$conf["selectedDataTableName"];#爲目標資料表所屬的資料庫
2558
				$conf["db::setColumnIndex"]["indexedColumnName"]=$conf["addedColumnName"];#要設爲index的欄位名稱
2559
				#可省略參數:
2560
 
2561
				#如果 $conf["dbPassword"] 有設定
2562
				if(isset($conf["dbPassword"])){
2563
 
2564
					$conf["db::setColumnIndex"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
2565
 
2566
					}#if end
2567
 
2568
				#如果有設定 $conf["dbPort"]	
2569
				if(isset($conf["dbPort"])){
2570
 
2571
					#設定 $conf["dbPort"]
2572
					$conf["db::setColumnIndex"]["dbPort"]=$conf["dbPort"];
2573
 
2574
					}#if end	
2575
 
2576
				$setColumnIndex=db::setColumnIndex($conf["db::setColumnIndex"]);
2577
				unset($conf["db::setColumnIndex"]);
2578
 
2579
				#如果建立index失敗
2580
				if($setColumnIndex["status"]=="false"){
2581
 
2582
					#設置執行失敗
2583
					$result["status"]="false";
2584
 
2585
					#設置錯誤訊息
2586
					$result["error"]=$setColumnIndex;
2587
 
2588
					#回傳結果
2589
					return $result;
2590
 
2591
					}#if end
2592
 
2593
				#取得執行的sql語法
2594
				$result["sql"][]=$setColumnIndex["sql"];
2595
 
2596
				}#if end
2597
 
2598
			}#if end
2599
 
2600
		#如果 $conf["newDataTableColmunKeyType"] 有設定
2601
		if(isset($conf["newDataTableColmunKeyType"])){	
2602
 
2603
			#如果爲 foreign key
2604
			if($conf["newDataTableColmunKeyType"]=="foreign key"){
2605
 
2606
				#函式說明:
2607
				#修改資料表的欄位
2608
				#回傳結果:
2609
				#$result["status"],"true",代表執行成功;"false"代表執行失敗.
2610
				#$result["error"],錯誤訊息陣列.
2611
				#$result["function"],當前執行的函數名稱.
2612
				#$result["sql"][$i],第$i+1個執行的sql語法字串陣列.
2613
				#必填參數:
2614
				$conf["db::editColumn"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
2615
				$conf["db::editColumn"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
2616
				$conf["db::editColumn"]["selectedDataBaseName"]=$conf["selectedDataBaseName"];#爲目標資料表所屬的資料庫
2617
				$conf["db::editColumn"]["selectedDataTableName"]=$conf["selectedDataTableName"];#爲目標資料表所屬的資料表
2618
				$conf["db::editColumn"]["editedColumnName"]=$conf["addedColumnName"];#要修改的欄位名稱
2619
				#可省略參數: 
2620
 
2621
				#如果 $conf["dbPassword"] 有設定
2622
				if(isset($conf["dbPassword"])){
2623
 
2624
					$conf["db::editColumn"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
2625
 
2626
					}#if end
2627
 
2628
				#$conf["newColumnName"]="";#要修改成的欄位名稱,預設與$conf["dbInformation"]["editedColumnName"]一樣。
2629
				#$conf["newDataTableColmunType"]="";#為新資料表的欄位儲存的型態,常見的有:
2630
					#int,用來儲存整數.
2631
					#double,用來儲存有小數點的數值.
2632
					#timestamp,用來儲存時間.
2633
					#varchar,可以儲存65536個字元.
2634
					#char,用來儲存任何東西,儲存成字元,長度限制為255.
2635
					#tinytest,來儲存大量的文字,會更據使用量調整儲存大小,長度限制跟char一樣.
2636
					#text,用來儲存大量的文字,不能作為索引值
2637
				#$conf["newDataTableColmunLength"]="";#為新資料表的欄位儲存的長度,""代表不限制長度
2638
				#$conf["newDataTableColmunDefault"]="";#為該欄位的預設值
2639
					#"",代表不指定預設值
2640
					#currentTime,當前時間;
2641
					#updatedCurrentTime,初始為當前時間,之後每更動一次就更新為當次時間
2642
					#null,代表空值
2643
					#以外的內容視為指定的數值
2644
				#$conf["newDataTableColmunNotNull"]="";#為新資料表的欄位不可為NULL否:
2645
					#true代表不能為null,
2646
					#false代表可以為null。
2647
				#$conf["newDataTableColmunAutoAdd"]="true";#為新資料表的欄位是否自動+1
2648
				$conf["db::editColumn"]["newDataTableColmunKeyType"]="foreign key";#為該欄位的鍵屬性:""為移除鍵的設定、"primary key"爲主鍵、"index"爲索引鍵、"foreign key"為外鍵
2649
				$conf["db::editColumn"]["foreignKeyDb"]=$conf["foreignDb"];#若要設定foreign key的話,則要提供參考的資料庫,預設為$conf["selectedDataBaseName"].
2650
				$conf["db::editColumn"]["foreignKeyReferenceTable"]=$conf["foreignTable"];#若要設定foreign key的話,則要提供參考的資料表
2651
				$conf["db::editColumn"]["foreignKeyReferenceColumn"]=$conf["foreignTableColumn"];#若要設定foreign key的話,則要提供參考的資料表欄位
2652
 
2653
				#如果有設定 $conf["onUpdateAction"]
2654
				if(isset($conf["onUpdateAction"])){
2655
 
2656
					$conf["db::editColumn"]["foreignKeyUpdateAction"]=$conf["onUpdateAction"];#若要設定foreign key的話,可以指定參考的資料表欄位更新時該欄位該怎麼處理,預設為"CASCADE",會將有所關聯的紀錄行也會進行刪除或修改。"SET NULL"代表會將有所關聯的紀錄行設定成 NULL。"NO ACTION"代表有存在的關聯紀錄行時,會禁止父資料表的刪除或修改動作。
2657
 
2658
					}#if end
2659
 
2660
				#如果有設定 $conf["onDeleteAction"]
2661
				if(isset($conf["onDeleteAction"])){
2662
 
2663
					$conf["db::editColumn"]["foreignKeyDeleteAction"]=$conf["onDeleteAction"];#若要設定foreign key的話,可以指定參考的資料表欄位移除時該欄位該怎麼處理,預設為"SET NULL",會將有所關聯的紀錄行設定成 NULL。"NO ACTION"代表有存在的關聯紀錄行時,會禁止父資料表的刪除或修改動作。
2664
 
2665
					}#if end
2666
 
2667
				#如果有設定 $conf["dbPort"]	
2668
				if(isset($conf["dbPort"])){
2669
 
2670
					#設定 $conf["dbPort"]
2671
					$conf["db::editColumn"]["dbPort"]=$conf["dbPort"];
2672
 
2673
					}#if end
2674
 
2675
				$editColumn=db::editColumn($conf["db::editColumn"]);
2676
				unset($conf["db::editColumn"]);
2677
 
2678
				#如果設置為foreign失敗
2679
				if($editColumn["status"]=="false"){
2680
 
2681
					#設置執行失敗
2682
					$result["status"]="false";
2683
 
2684
					#設置錯誤訊息
2685
					$result["error"]=$editColumn;
2686
 
2687
					#回傳結果
2688
					return $result;
2689
 
2690
					}#if end	
2691
 
2692
				#有幾個執行的sql語法就執行幾次
2693
				for($i=0;$i<count($editColumn["sql"]);$i++){
2694
 
2695
					#取得執行的sql語法
2696
					$result["sql"][]=$editColumn["sql"][$i];
2697
 
2698
					}#for end
2699
 
2700
				}#if end
2701
 
2702
			}#if end
2703
 
2704
		#執行到這邊代表執行成功
2705
 
2706
		#設置成功訊息
2707
		$result["status"]="true";
2708
 
2709
		#回傳結果
2710
		return $result;
2711
 
2712
		}#function addColumn end
2713
 
2714
	/*
2715
	#函式說明:
2716
	#修改資料表的欄位
2717
	#回傳結果:
2718
	#$result["status"],"true",代表執行成功;"false"代表執行失敗.
2719
	#$result["error"],錯誤訊息陣列.
2720
	#$result["function"],當前執行的函數名稱.
2721
	#$result["sql"][$i],第$i+1個執行的sql語法字串陣列.
2722
	#必填參數:
2723
	#$conf["dbAddress"],字串,爲mysql-Server的位置.
2724
	$conf["dbAddress"]=$dbAddress;
2725
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號.
2726
	$conf["dbAccount"]=$dbAccount;
2727
	#$conf["selectedDataBaseName"],字串,爲目標資料表所屬的資料庫.
2728
	$conf["selectedDataBaseName"]="";
2729
	#$conf["selectedDataTableName"],字串,爲目標資料表所屬的資料表.
2730
	$conf["selectedDataTableName"]="";
2731
	#$conf["editedColumnName"],字串,要修改的欄位名稱.
2732
	$conf["editedColumnName"]="";
2733
	#可省略參數: 
2734
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼.
2735
	#$conf["dbPassword"]=$dbPassword;
2736
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,預設為3306.
2737
	#$conf["dbPort"]="3306";
2738
	#$conf["newColumnName"],字串,要修改成的欄位名稱,預設與$conf["editedColumnName"]一樣。
2739
	#$conf["newColumnName"]=$conf["editedColumnName"];
2740
	#$conf["newDataTableColmunType"],字串,為新資料表的欄位儲存的型態,常見的有:int,用來儲存整數;double,用來儲存有小數點的數值;timestamp,用來儲存時間;varchar,可以儲存65536個字元;char,用來儲存任何東西,儲存成字元,長度限制為255;tinytest,來儲存大量的文字,會更據使用量調整儲存大小,長度限制跟char一樣;text,用來儲存大量的文字,不能作為索引值
2741
	#$conf["newDataTableColmunType"]="";
2742
	#$conf["newDataTableColmunLength"]=,字串,為新資料表的欄位儲存的長度,""代表不限制長度.
2743
	#$conf["newDataTableColmunLength"]="";
2744
	#$conf["newDataTableColmunDefault"],字串,為該欄位的預設值:"",代表不指定預設值;currentTime,當前時間;updatedCurrentTime,初始為當前時間,之後每更動一次就更新為當次時間;null,代表空值;以外的內容視為指定的數值.
2745
	#$conf["newDataTableColmunDefault"]="";
2746
	#$conf["newDataTableColmunNotNull"],字串,為新資料表的欄位不可為NULL否:true代表不能為null;false代表可以為null.
2747
	#$conf["newDataTableColmunNotNull"]="";
2748
	#$conf["newDataTableColmunComment"],字串,欄位的註解.
2749
	#$conf["newDataTableColmunComment"]="";
2750
	#$conf["newDataTableColmunAutoAdd"],字串,為新資料表的欄位是否自動+1
2751
	#$conf["newDataTableColmunAutoAdd"]="true";
2752
	#$conf["newDataTableColmunKeyType"],字串,為該欄位的鍵屬性:""為移除鍵的設定、"primary key"爲主鍵、"index"爲索引鍵、"foreign key"為外鍵.
2753
	#$conf["newDataTableColmunKeyType"]="";
2754
	#$conf["foreignKeyDb"],字串,若要設定foreign key的話,則要提供參考的資料庫,預設為$conf["selectedDataBaseName"].
2755
	#$conf["foreignKeyDb"]="";
2756
	#$conf["foreignKeyReferenceTable"],字串,若要設定foreign key的話,則要提供參考的資料表.
2757
	#$conf["foreignKeyReferenceTable"]="";
2758
	#$conf["foreignKeyReferenceColumn"],字串,若要設定foreign key的話,則要提供參考的資料表欄位.
2759
	#$conf["foreignKeyReferenceColumn"]="";
2760
	#$conf["foreignKeyUpdateAction"],字串,若要設定foreign key的話,可以指定參考的資料表欄位更新時該欄位該怎麼處理,預設為"CASCADE",會將有所關聯的紀錄行也會進行刪除或修改。"SET NULL"代表會將有所關聯的紀錄行設定成 NULL。"NO ACTION"代表有存在的關聯紀錄行時,會禁止父資料表的刪除或修改動作。
2761
	#$conf["foreignKeyUpdateAction"]="";
2762
	#$conf["foreignKeyDeleteAction"],字串,若要設定foreign key的話,可以指定參考的資料表欄位移除時該欄位該怎麼處理,預設為"SET NULL",會將有所關聯的紀錄行設定成 NULL。"NO ACTION"代表有存在的關聯紀錄行時,會禁止父資料表的刪除或修改動作。
2763
	#$conf["foreignKeyDeleteAction"]="SET NULL";
2764
	#參考資料:
2765
	#無.
2766
	#備註:
2767
	#無.
2768
	*/
2769
	public static function editColumn(&$conf){
2770
 
2771
		#初始化要回傳的內容
2772
		$result=array();
2773
 
2774
		#取得當前執行的函數名稱
2775
		$result["function"]=__FUNCTION__;
2776
 
2777
		#如果 $conf 不為陣列
2778
		if(gettype($conf)!="array"){
2779
 
2780
			#設置執行失敗
2781
			$result["status"]="false";
2782
 
2783
			#設置執行錯誤訊息
2784
			$result["error"][]="\$conf變數須為陣列形態";
2785
 
2786
			#如果傳入的參數為 null
2787
			if($conf==null){
2788
 
2789
				#設置執行錯誤訊息
2790
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
2791
 
2792
				}#if end
2793
 
2794
			#回傳結果
2795
			return $result;
2796
 
2797
			}#if end
2798
 
2799
		#檢查參數
2800
		#函式說明:
2801
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
2802
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2803
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
2804
		#$result["function"],當前執行的函式名稱.
2805
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
2806
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
2807
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
2808
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
2809
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
2810
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
2811
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
2812
		#必填參數:
2813
		#$conf["db::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
2814
		$conf["db::checkArguments"]["varInput"]=&$conf;
2815
		#$conf["db::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
2816
		$conf["db::checkArguments"]["mustBeFilledVariableName"]=array("dbAddress","dbAccount","selectedDataBaseName","selectedDataTableName","editedColumnName");
2817
		#$conf["db::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
2818
		$conf["db::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string","string","string");
2819
		#$conf["db::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
2820
		$conf["db::checkArguments"]["referenceVarKey"]="db::checkArguments";
2821
		#可省略參數:
2822
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
2823
		#$conf["canBeEmptyString"]="false";
2824
		#$conf["db::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
2825
		$conf["db::checkArguments"]["skipableVariableName"]=array("dbPassword","dbPort","newColumnName","newDataTableColmunType","newDataTableColmunLength","newDataTableColmunDefault","newDataTableColmunNotNull","newDataTableColmunAutoAdd","newDataTableColmunKeyType","foreignKeyDb","foreignKeyReferenceTable","foreignKeyReferenceColumn","foreignKeyUpdateAction","foreignKeyDeleteAction","newDataTableColmuComment");
2826
		#$conf["db::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
2827
		$conf["db::checkArguments"]["skipableVariableType"]=array("string","string","string","string","string","string","string","string","string","string","string","string","string","string","string");
2828
		#$conf["db::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
2829
		$conf["db::checkArguments"]["skipableVarDefaultValue"]=array(null,null,$conf["editedColumnName"],null,null,null,null,null,null,"\$conf[\"selectedDataBaseName\"]",null,null,null,null,null);
2830
		#$conf["db::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
2831
		#$conf["db::checkArguments"]["arrayCountEqualCheck"][]=array();
2832
		#參考資料:
2833
		#array_keys=>http://php.net/manual/en/function.array-keys.php
2834
		$checkResult=variableCheck::checkArguments($conf["db::checkArguments"]);
2835
		unset($conf["db::checkArguments"]);
2836
 
2837
		#如果檢查有誤
2838
		if($checkResult["status"]=="false"){
2839
 
2840
			#設置執行失敗的訊息
2841
			$result["status"]="false";
2842
 
2843
			#設置錯誤訊息
2844
			$result["error"]=$checkResult;
2845
 
2846
			#回傳結果
2847
			return $result;
2848
 
2849
			}#if end
2850
 
2851
		#如果檢查不通過
2852
		if($checkResult["passed"]=="false"){
2853
 
2854
			#設置執行失敗的訊息
2855
			$result["status"]="false";
2856
 
2857
			#設置錯誤訊息
2858
			$result["error"]=$checkResult;
2859
 
2860
			#回傳結果
2861
			return $result;
2862
 
2863
			}#if end
2864
 
2865
		#取得目標資料表的所有資訊
2866
		#函式說明:
2867
		#取得資料表所有欄位的詳細資訊
2868
		#回傳的內容:
2869
		#$result["status"],執行結果,"true"代表執行成功;"false"代表執行失敗
2870
		#$result["error"],錯誤訊息陣列
2871
		#$result["sql"],執行的sql語法
2872
		#$result["oriInput"],原始的資料表欄位資訊
2873
		#$result["everyLine"],逐行的欄位資訊
2874
		#$result["tableName"],當前查詢的資料表名稱
2875
		#$result["engine"],資料表使用的儲存引擎
2876
		#$result["charset"],資料表預設的編碼
2877
		#$result["columnName"][$i],各欄位的名稱陣列,$i爲0開始的數字,也可以使用欄位的名稱。
2878
		#$result["columnVarTypeAndLengthLimit"][$i],各欄位儲存的變數形態與長度限制,$i爲0開始的數字,也可以使用欄位的名稱。
2879
		#$result["columnVarType"][$i],各欄位變數儲存的型態,$i爲0開始的數字,也可以使用欄位的名稱.
2880
		#$result["columnVarLengthLimit"][$i],個欄位變數的長度限制,若不存在其限制,則為"",$i爲0開始的數字,也可以使用欄位的名稱.
2881
		#$result["columnNull"][$i],各欄位是否可以爲null,"true"爲可以爲null;"false"爲可不以爲"null",$i爲0開始的數字,也可以使用欄位的名稱。
2882
		#$result["columnAutoIncrement"][$i],各欄位是否會自動加1,"true"爲會;"false"爲不會,$i爲0開始的數字,也可以使用欄位的名稱。
2883
		#$result["columnDefault"][$i],各欄位的預設內容,若無則爲"沒有指定",$i爲0開始的數字,也可以使用欄位的名稱。
2884
		#$result["columnOnUpdateAction"][$i],當資料有修改時,該欄位的內容要怎麼因應,$i爲0開始的數字,也可以使用欄位的名稱。
2885
		#$result["columnCharacterSet"][$i],各欄位使用的CharacterSet,$i爲0開始的數字,也可以使用欄位的名稱。
2886
		#$result["columnCollate"][$i],各欄位使用的Collate,$i爲0開始的數字,也可以使用欄位的名稱。
2887
		#$result["columnComment"][$i],各欄位的註解,$i爲1開始的數字,也可以使用欄位的名稱。
2888
		#$result["key"]["exist"],該資料表是否有索引鍵,"true"代表有;"false"代表沒有。
2889
		#$result["key"][$j],該資料表的索引鍵陣列,$j爲0開始的數字,也可以使用欄位的名稱。
2890
		#$result["keyConstraintName"][$j],該資料表用於識別索引鍵的CONSTRAINT名稱陣列,$j爲0開始的數字,也可以使用欄位的名稱。
2891
		#$result["primaryKey"],該資料表的主鍵
2892
		#$result["foreignKey"]["exist"],該資料表是否有foreign key,"true"代表有;"fasle"代表沒有。
2893
		#$result["foreignKey"]["constraintName"][$k],用來識別外鍵的CONSTRAINT名稱陣列,$k爲0開始的數字,也可以使用欄位的名稱。
2894
		#$result["foreignKey"]["columnName"][$k],外鍵的名稱陣列,$k爲0開始的數字,也可以使用欄位的名稱。
2895
		#$result["foreignKey"]["referencesTable"][$k],外鍵參照的欄位,$k爲0開始的數字,,也可用欄位的名稱來找value.
2896
		#$result["foreignKey"]["referencesColumn"][$k],外鍵參照的欄位屬於哪個資料表,$k爲0開始的數字,也可用欄位的名稱來找value.
2897
		#$result["foreignKey"]["onUpdateAction"][$i],當參照的欄位資料更新時,會怎麼同步,$i爲0開始的數字,也可用欄位的名稱來找value.
2898
		#$result["foreignKey"]["onDeleteAction"][$i],當參照的欄位資料移除時,會怎麼同步,$i爲0開始的數字,也可用欄位的名稱來找value.
2899
		#必填參數:
2900
		$conf["db"]["getTableColumnDetailInfo"]["dbAddress"]=$conf["dbAddress"];#資料庫的網路位置
2901
		$conf["db"]["getTableColumnDetailInfo"]["dbAccount"]=$conf["dbAccount"];#連線到資料庫要用的帳號
2902
		$conf["db"]["getTableColumnDetailInfo"]["selectedDataBase"]=$conf["selectedDataBaseName"];#連線到資料庫要選擇的資料庫
2903
		$conf["db"]["getTableColumnDetailInfo"]["selectedDataTable"]=$conf["selectedDataTableName"];#連線到資料庫要檢視的資料表
2904
		#可省略參數:
2905
 
2906
		#如果有設定連線密碼
2907
		if(isset($conf["dbPassword"])){
2908
 
2909
			$conf["db"]["getTableColumnDetailInfo"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
2910
 
2911
			}#if end
2912
 
2913
		#如果有設定 $conf["dbPort"]	
2914
		if(isset($conf["dbPort"])){
2915
 
2916
			#設定 $conf["dbPort"]
2917
			$conf["db"]["getTableColumnDetailInfo"]["dbPort"]=$conf["dbPort"];
2918
 
2919
			}#if end	
2920
 
2921
		$oriColumnInfo=db::getTableColumnDetailInfo($conf["db"]["getTableColumnDetailInfo"]);
2922
		unset($conf["db"]["getTableColumnDetailInfo"]);
2923
 
2924
		#debug
2925
		#var_dump($oriColumnInfo);
2926
		#exit;
2927
 
2928
		#如果查詢資料表資訊失敗
2929
		if($oriColumnInfo["status"]=="false"){
2930
 
2931
			#設定執行失敗的識別
2932
			$result["status"]="false";
2933
 
2934
			#設定錯誤訊息
2935
			$result["error"]=$oriColumnInfo;
2936
 
2937
			#回傳結果
2938
			return $result;
2939
 
2940
			}#if end
2941
 
2942
		#檢視目標欄位的鍵屬性
2943
		#var_dump($oriColumnInfo);
2944
 
2945
		#如果沒有定新的欄位明稱
2946
		if(!isset($conf["newColumnName"])){
2947
 
2948
			#則設定為原始欄位的名稱
2949
			$conf["newColumnName"]=$oriColumnInfo["columnName"][$conf["editedColumnName"]];
2950
 
2951
			}#if end
2952
 
2953
		#如果 $conf["newDataTableColmunType"] 沒有設定 
2954
		if(!isset($conf["newDataTableColmunType"])){
2955
 
2956
			#$oriColumnInfo["columnVarTypeAndLengthLimit"][$conf["editedColumnName"]];
2957
 
2958
			#則設定為原始欄位的儲存型態
2959
			$conf["newDataTableColmunType"]=$oriColumnInfo["columnVarType"][$conf["editedColumnName"]];
2960
 
2961
			}#if end
2962
 
2963
		#以下要檢查
2964
 
2965
		#如果新資料型態不等於 "tinytext" 跟 "text"
2966
		if($conf["newDataTableColmunType"]!="tinytext" && $conf["newDataTableColmunType"]!="text"){
2967
 
2968
			#如果沒有設定 $conf["newDataTableColmunLength"]
2969
			if(!isset($conf["newDataTableColmunLength"])){
2970
 
2971
				#則設定為原始欄位的儲存長度
2972
				$conf["newDataTableColmunLength"]=$oriColumnInfo["columnVarLengthLimit"][$conf["editedColumnName"]];
2973
 
2974
				}#if end
2975
 
2976
			#如果 $conf["newDataTableColmunLength"] 不為 ""
2977
			if($conf["newDataTableColmunLength"]!=""){
2978
 
2979
				#則加上 「(」與「)」
2980
				$conf["newDataTableColmunLength"]="(".$conf["newDataTableColmunLength"].")";
2981
 
2982
				#屬性後面加上長度
2983
				$conf["newDataTableColmunType"]=$conf["newDataTableColmunType"].$conf["newDataTableColmunLength"];
2984
 
2985
				}#if end
2986
 
2987
			}#if end
2988
 
2989
		#如果 $conf["newDataTableColmunDefault"] 不存在
2990
		if(!isset($conf["newDataTableColmunDefault"])){
2991
 
2992
			#則設定為原始欄位的預設數值
2993
			$conf["newDataTableColmunDefault"]="default \"".$oriColumnInfo["columnDefault"][$conf["editedColumnName"]]."\"";
2994
 
2995
			#如果 $oriColumnInfo["columnDefault"][$conf["editedColumnName"]] 為 ""
2996
			if($oriColumnInfo["columnDefault"][$conf["editedColumnName"]]==""){
2997
 
2998
				#則將 $conf["newDataTableColmunDefault"] 設為
2999
				$conf["newDataTableColmunDefault"]="";
3000
 
3001
				}#if end
3002
 
3003
			#如果 $oriColumnInfo["columnDefault"][$conf["editedColumnName"]] 為 "NULL"
3004
			if($oriColumnInfo["columnDefault"][$conf["editedColumnName"]]=="NULL"){
3005
 
3006
				#則將 $conf["newDataTableColmunDefault"] 設為
3007
				$conf["newDataTableColmunDefault"]="";
3008
 
3009
				}#if end
3010
 
3011
			#如果 $oriColumnInfo["columnDefault"][$conf["editedColumnName"]] 為 "沒有指定"
3012
			if($oriColumnInfo["columnDefault"][$conf["editedColumnName"]]=="沒有指定"){
3013
 
3014
				#則將 $conf["newDataTableColmunDefault"] 設為
3015
				$conf["newDataTableColmunDefault"]="";
3016
 
3017
				}#if end
3018
 
3019
			}#if end
3020
 
3021
		#反之有設定 $conf["newDataTableColmunDefault"]
3022
		else{
3023
 
3024
			#當 $conf["newDataTableColmunType"] 不等於 "text" 與 "tinytest" 時,才能用預設值。
3025
			if($conf["newDataTableColmunType"]!="text" && $conf["newDataTableColmunType"]!="tinytest" ){
3026
 
3027
				#判斷 $conf["newDataTableColmunDefault"] 的數值
3028
				#currentTime,當前時間;
3029
				#updatedCurrentTime,初始為當前時間,之後每更動一次就更新為當次時間
3030
				#null,代表空值
3031
				#以外的內容視為指定的數值
3032
				switch($conf["newDataTableColmunDefault"]){
3033
 
3034
					#如果是
3035
					case "currentTime":
3036
 
3037
						#則將 $conf["newDataTableColmunDefault"] 設為 " default CURRENT_TIMESTAMP "
3038
						$conf["newDataTableColmunDefault"]=" default CURRENT_TIMESTAMP ";
3039
 
3040
						#跳出 switch 
3041
						break;
3042
 
3043
					#如果是 "updatedCurrentTime"
3044
					case "updatedCurrentTime":
3045
 
3046
						#則將 $conf["newDataTableColmunDefault"] 設為 " default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP "
3047
						$conf["newDataTableColmunDefault"]=" default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP ";
3048
 
3049
						#跳出 switch 
3050
						break;
3051
 
3052
					#如果是 "null"
3053
					case "null":
3054
 
3055
						#則將 $conf["newDataTableColmunDefault"] 設為 " default null "
3056
						$conf["newDataTableColmunDefault"]=" default null ";
3057
 
3058
						#跳出 switch 
3059
						break;
3060
 
3061
					#如果是 "NULL"
3062
					case "NULL":
3063
 
3064
						#則將 $conf["newDataTableColmunDefault"] 設為 " default null "
3065
						$conf["newDataTableColmunDefault"]=" default NULL ";
3066
 
3067
						#跳出 switch 
3068
						break;
3069
 
3070
					#如果是 ""
3071
					case "":
3072
 
3073
						#則代表不設定預設值
3074
						$conf["newDataTableColmunDefault"]="";
3075
 
3076
						break;
3077
 
3078
					#如果為其他內容	
3079
					default :
3080
 
3081
						#套用自訂的預設值
3082
						$conf["newDataTableColmunDefault"]=" default '".$conf["newDataTableColmunDefault"]."'";		
3083
 
3084
					}#switch end
3085
 
3086
				}#if end
3087
 
3088
			}#else end
3089
 
3090
		#如果 $conf["newDataTableColmunNotNull"] 沒有設定
3091
		if(!isset($conf["newDataTableColmunNotNull"])){
3092
 
3093
			#則按照原始欄位的設定
3094
 
3095
			#如果 $oriColumnInfo["columnNotNull"][$conf["editedColumnName"]] 等於 "true"
3096
			if($oriColumnInfo["columnNotNull"][$conf["editedColumnName"]]=="true"){
3097
 
3098
				#則代表不能為 null
3099
				$conf["newDataTableColmunNotNull"]=" not null";
3100
 
3101
				}#if end
3102
 
3103
			#反之 $oriColumnInfo["columnNotNull"][$conf["editedColumnName"]] 等於 "false"
3104
			else{
3105
 
3106
				#則代表可以為 null
3107
				#將 $conf["newDataTableColmunNotNull"] 置換為 ""
3108
				$conf["newDataTableColmunNotNull"]="";
3109
 
3110
				}#if end
3111
 
3112
			}#if end
3113
 
3114
		#反之 如果 $conf["newDataTableColmunNotNull"] 有設定
3115
		else{
3116
 
3117
			#如果 $conf["newDataTableColmunNotNull"] 為 "true"
3118
			if($conf["newDataTableColmunNotNull"]=="true"){
3119
 
3120
				#則置換為 "not null"
3121
				$conf["newDataTableColmunNotNull"]="not null";
3122
 
3123
				}#if end
3124
 
3125
			#如果 $conf["newDataTableColmunNotNull"] 為 "false"
3126
			if($conf["newDataTableColmunNotNull"]=="false"){
3127
 
3128
				#則置換為 ""
3129
				$conf["newDataTableColmunNotNull"]="";
3130
 
3131
				}#if end
3132
 
3133
			}#else end
3134
 
3135
		#如果 $conf["newDataTableColmunAutoAdd"] 沒有設定
3136
		if(!isset($conf["newDataTableColmunAutoAdd"])){
3137
 
3138
			#原始欄位的設定為 true 的話
3139
			if($oriColumnInfo["columnAutoIncrement"][$conf["editedColumnName"]]=="true"){
3140
 
3141
				#則按照原始欄位的設定
3142
				$conf["newDataTableColmunAutoAdd"]="auto_increment";
3143
 
3144
				}#if end
3145
 
3146
			#反之代表沒有設定
3147
			else{
3148
 
3149
				#設為 ""
3150
				$conf["newDataTableColmunAutoAdd"]="";
3151
 
3152
				}#else end
3153
 
3154
			}#if end
3155
 
3156
		#反之代表 $conf["newDataTableColmunAutoAdd"] 有設定
3157
		else{
3158
 
3159
			#如果 $conf["newDataTableColmunAutoAdd"] 等於 "true"
3160
			if($conf["newDataTableColmunAutoAdd"]=="true"){
3161
 
3162
				#則將 $conf["newDataTableColmunAutoAdd"] 設為 auto_increment
3163
				$conf["newDataTableColmunAutoAdd"]="auto_increment";
3164
 
3165
				}#if end
3166
 
3167
			#反之 $conf["newDataTableColmunAutoAdd"] 不等於 "true"
3168
			else{
3169
 
3170
				#則將 $conf["newDataTableColmunAutoAdd"] 設為 ""
3171
				$conf["newDataTableColmunAutoAdd"]="";
3172
 
3173
				}#else end				
3174
 
3175
			}#else end
3176
 
3177
		#如果 $conf["newDataTableColmunType"] 為 "char" 或 "text"	
3178
		if($conf["newDataTableColmunType"]=="char" || $conf["newDataTableColmunType"]=="text"){
3179
 
3180
			#CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci',設定為utf8
3181
			$utf8="CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci'";
3182
 
3183
			}#if end
3184
 
3185
		#反之不是字元或文字
3186
		else{
3187
 
3188
			#則設為""
3189
			$utf8="";
3190
 
3191
			}#else end	
3192
 
3193
		#如果有設定 $conf["newDataTableColmunComment"]
3194
		if(isset($conf["newDataTableColmunComment"])){
3195
 
3196
			#如果 $conf["newDataTableColmunComment"] 等於 ""
3197
			if($conf["newDataTableColmunComment"]==""){
3198
 
3199
				#設置為"沒有註解"
3200
				$comment=" COMMENT '沒有註解'";
3201
 
3202
				}#if end
3203
 
3204
			#反之設置指定的註解字串
3205
			else{
3206
 
3207
				#設置註解
3208
				$comment=" COMMENT '".$conf["newDataTableColmunComment"]."'";
3209
 
3210
				}#else end
3211
 
3212
			}#if end
3213
 
3214
		#反之
3215
		else{
3216
 
3217
			#如果原始沒有註解
3218
			if(!isset($oriColumnInfo["colmunComment"][$conf["editedColumnName"]])){
3219
 
3220
				#設為空字串
3221
				$comment="";
3222
 
3223
				}#if end
3224
 
3225
			#反之
3226
			else{
3227
 
3228
				#設為原始的註解
3229
				$comment=" COMMENT '".$oriColumnInfo["colmunComment"][$conf["editedColumnName"]]."'";
3230
 
3231
				}#else end
3232
 
3233
			}#else end	
3234
 
3235
		#組合sql語法
3236
		$sql="alter table ".$conf["selectedDataBaseName"].".".$conf["selectedDataTableName"]." change `".$conf["editedColumnName"]."` `".$conf["newColumnName"]."` ".$conf["newDataTableColmunType"]." ".$utf8." ".$conf["newDataTableColmunDefault"]." ".$conf["newDataTableColmunNotNull"]." ".$conf["newDataTableColmunAutoAdd"]." ".$comment." ;";
3237
 
3238
		#執行 sql 語法
3239
		#函式說明:
3240
		#執行mysql指令
3241
		#回傳結果::
3242
		#$result["status"],"true"為執行成功;"false"為執行失敗。
3243
		#$result["error"],錯誤訊息的陣列
3244
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
3245
		#$result["queryString"],mysql查詢的語言
3246
		#查詢號的解果,需要解析。
3247
		#必填參數:
3248
		$conf["db"]["execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
3249
		$conf["db"]["execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
3250
		$conf["db"]["execMysqlQuery"]["dbSql"]=$sql;#要執行sql語法
3251
		#可省略參數: 
3252
 
3253
		#如果有設定連線密碼
3254
		if(isset($conf["dbPassword"])){
3255
 
3256
			$conf["db"]["execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
3257
 
3258
			}#if end
3259
 
3260
		#如果有設定 $conf["dbPort"]	
3261
		if(isset($conf["dbPort"])){
3262
 
3263
			#設定 $conf["dbPort"]
3264
			$conf["db"]["execMysqlQuery"]["dbPort"]=$conf["dbPort"];
3265
 
3266
			}#if end	
3267
 
3268
		$sqlExecResult=db::execMysqlQuery($conf["db"]["execMysqlQuery"]);
3269
		unset($conf["db"]["execMysqlQuery"]);
3270
 
3271
		#如果執行 sql 語法錯誤
3272
		if($sqlExecResult["status"]=="false"){
3273
 
3274
			#設定執行失敗的識別
3275
			$result["status"]="false";
3276
 
3277
			#設定錯誤訊息
3278
			$result["error"]=$sqlExecResult;
3279
 
3280
			#回傳結果
3281
			return $result;
3282
 
3283
			}#if end
3284
 
3285
		#取得執行的sql語法
3286
		$result["sql"][]=$sqlExecResult["queryString"];
3287
 
3288
		#如果 $conf["newDataTableColmunKeyType"] 有設定
3289
		if(isset($conf["newDataTableColmunKeyType"])){
3290
 
3291
			#取得其key為何種
3292
			#函式說明:
3293
			#取得資料表所有欄位的詳細資訊
3294
			#回傳的內容:
3295
			#$result["status"],執行結果,"true"代表執行成功;"false"代表執行失敗
3296
			#$result["error"],錯誤訊息陣列
3297
			#$result["sql"],執行的sql語法
3298
			#$result["oriInput"],原始的資料表欄位資訊
3299
			#$result["everyLine"],逐行的欄位資訊
3300
			#$result["tableName"],當前查詢的資料表名稱
3301
			#$result["engine"],資料表使用的儲存引擎
3302
			#$result["charset"],資料表預設的編碼
3303
			#$result["columnName"][$i],各欄位的名稱陣列,$i爲0開始的數字,也可以使用欄位的名稱。
3304
			#$result["columnVarTypeAndLengthLimit"][$i],各欄位儲存的變數形態與長度限制,$i爲0開始的數字,也可以使用欄位的名稱。
3305
			#$result["columnNotNull"][$i],各欄位是否可以不爲null,"true"爲可以不爲null;"false"爲可以爲"null",$i爲0開始的數字,也可以使用欄位的名稱。
3306
			#$result["columnAutoIncrement"][$i],各欄位是否會自動加1,"true"爲會;"false"爲不會,$i爲0開始的數字,也可以使用欄位的名稱。
3307
			#$result["columnDefault"][$i],各欄位的預設內容,若無則爲"沒有指定",$i爲0開始的數字,也可以使用欄位的名稱。
3308
			#$result["columnOnUpdateAction"][$i],當資料有修改時,該欄位的內容要怎麼因應,$i爲0開始的數字,也可以使用欄位的名稱。
3309
			#$result["columnCharacterSet"][$i],各欄位使用的CharacterSet,$i爲0開始的數字,也可以使用欄位的名稱。
3310
			#$result["columnCollate"][$i],各欄位使用的Collate,$i爲0開始的數字,也可以使用欄位的名稱。
3311
			#$result["key"]["exist"],該資料表是否有索引鍵,"true"代表有;"false"代表沒有。
3312
			#$result["key"][$j],該資料表的索引鍵陣列,$j爲0開始的數字,也可以使用欄位的名稱。
3313
			#$result["primaryKey"],該資料表的主鍵
3314
			#$result["foreignKey"]["exist"],該資料表是否有foreign key,"true"代表有;"fasle"代表沒有。
3315
			#$result["foreignKey"]["constraintName"][$k],用來識別外鍵的CONSTRAINT名稱陣列,$k爲0開始的數字,也可以使用欄位的名稱。
3316
			#$result["foreignKey"]["columnName"][$k],外鍵的名稱陣列
3317
			#$result["foreignKey"]["referencesTable"][$k],外鍵參照的欄位,$k爲0開始的數字
3318
			#$result["foreignKey"]["referencesColumn"][$k],外鍵參照的欄位屬於哪個資料表,$k爲0開始的數字
3319
			#$result["foreignKey"]["OnUpdateAction"][$l],當參照的欄位資料更新時,會怎麼同步,$l爲0開始的數字
3320
			#$result["foreignKey"]["OnDeleteAction"][$m],當參照的欄位資料移除時,會怎麼同步,$m爲0開始的數字
3321
			#必填參數:
3322
			$conf["db"]["getTableColumnDetailInfo"]["dbAddress"]=$conf["dbAddress"];
3323
			$conf["db"]["getTableColumnDetailInfo"]["dbAccount"]=$conf["dbAccount"];
3324
			$conf["db"]["getTableColumnDetailInfo"]["selectedDataBase"]=$conf["selectedDataBaseName"];
3325
			$conf["db"]["getTableColumnDetailInfo"]["selectedDataTable"]=$conf["selectedDataTableName"];
3326
			#可省略參數:
3327
 
3328
			#如果 $conf["dbPassword"] 有設定
3329
			if(isset($conf["dbPassword"])){
3330
 
3331
				#套用連限時的密碼
3332
				$conf["db"]["getTableColumnDetailInfo"]["dbPassword"]=$conf["dbPassword"];
3333
 
3334
				}#if end
3335
 
3336
			#如果有設定 $conf["dbPort"]	
3337
			if(isset($conf["dbPort"])){
3338
 
3339
				#設定 $conf["dbPort"]
3340
				$conf["db"]["getTableColumnDetailInfo"]["dbPort"]=$conf["dbPort"];
3341
 
3342
				}#if end	
3343
 
3344
			$tableColumnDetial=db::getTableColumnDetailInfo($conf["db"]["getTableColumnDetailInfo"]);
3345
			unset($conf["db"]["getTableColumnDetailInfo"]);#卸除變數,避免錯誤產生.
3346
 
3347
			#如果取得資料表結構失敗
3348
			if($tableColumnDetial["status"]=="false"){
3349
 
3350
				#設置執行不正常
3351
				$result["status"]="false";
3352
 
3353
				#設置執行錯誤訊息
3354
				$result["error"]=$tableColumnDetial;
3355
 
3356
				#回傳結果
3357
				return $result;
3358
 
3359
				}#if end
3360
 
3361
			#判斷 $conf["newDataTableColmunKeyType"] 來進行處理
3362
			#"index"爲索引鍵,"foreign key"為外鍵,""為將鍵屬性取消。
3363
			switch($conf["newDataTableColmunKeyType"]){
3364
 
3365
				#如果 $conf["newDataTableColmunKeyType"] 是 ""
3366
				case "":
3367
 
3368
					#檢查目標欄位是主鍵或是索引鍵或是外鍵
3369
 
3370
					#debug	
3371
					#var_dump($tableColumnDetial);
3372
 
3373
					#如果 $tableColumnDetial["foreignKey"]["exist"] 等於 "true",代表有外鍵
3374
					if($tableColumnDetial["foreignKey"]["exist"]=="true"){
3375
 
3376
						#如果 $tableColumnDetial["foreignKey"]["columnName"][$conf["dbInformation"]["newColumnName"]] 存在,則代表該欄位為索引鍵
3377
						if(isset($tableColumnDetial["foreignKey"]["columnName"][$conf["newColumnName"]])){
3378
 
3379
							#移除外鍵
3380
							#函式說明:
3381
							#移除資料表單1欄位的外鍵
3382
							#回傳結果:
3383
							#$result["status"],"true",代表執行成功;"false"代表執行失敗
3384
							#$result["error"],錯誤訊息陣列
3385
							#$result["sql"],執行的sql字串.
3386
							#必填參數:
3387
							$conf["db"]["eraseForeignKey"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
3388
							$conf["db"]["eraseForeignKey"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
3389
							$conf["db"]["eraseForeignKey"]["selectedDataBaseName"]=$conf["selectedDataBaseName"];#爲目標資料表所屬的資料庫
3390
							$conf["db"]["eraseForeignKey"]["selectedDataTableName"]=$conf["selectedDataTableName"];#爲目標資料表所屬的資料庫
3391
							$conf["db"]["eraseForeignKey"]["erasedForeignKeyColumnConstraintName"]=$tableColumnDetial["foreignKey"]["constraintName"][$conf["newColumnName"]];#要移除外鍵欄位的CONSTRAINT名稱
3392
							#可省略參數: 
3393
 
3394
							#如果 $conf["dbPassword"] 存在
3395
							if(isset($conf["dbPassword"])){
3396
 
3397
								#則設定連線的密碼
3398
								$conf["db"]["eraseForeignKey"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
3399
 
3400
								}#if end
3401
 
3402
							#如果有設定 $conf["dbPort"]	
3403
							if(isset($conf["dbPort"])){
3404
 
3405
								#設定 $conf["dbPort"]
3406
								$conf["db"]["eraseForeignKey"]["dbPort"]=$conf["dbPort"];
3407
 
3408
								}#if end	
3409
 
3410
							$eraseForeignKeyResult=db::eraseForeignKey($conf["db"]["eraseForeignKey"]);
3411
							unset($conf["db"]["eraseForeignKey"]);
3412
 
3413
							#取得執行的sql字串
3414
							$result["sql"][]=$eraseForeignKeyResult["sql"];
3415
 
3416
							#如果 $eraseForeignKeyResult["status"]等於"fasle"
3417
							if($eraseForeignKeyResult["status"]=="false"){
3418
 
3419
								#設置出錯的識別
3420
								$result["status"]="fasle";
3421
 
3422
								#設置錯誤訊息
3423
								$result["error"]=$eraseForeignKeyResult;
3424
 
3425
								#回傳結果
3426
								return $result;
3427
 
3428
								}#if end
3429
 
3430
							}#if end
3431
 
3432
						}#if end
3433
 
3434
					#如果 $tableColumnDetial["key"]["exist"] 等於 "true",代表有索引鍵
3435
					if($tableColumnDetial["key"]["exist"]=="true"){
3436
 
3437
						#如果 $tableColumnDetial["key"][$conf["newColumnName"]] 存在,則代表該欄位為索引鍵
3438
						if(isset($tableColumnDetial["key"][$conf["newColumnName"]])){
3439
 
3440
							#移除索引鍵
3441
							#函式說明:
3442
							#移除資料表單1欄位的索引鍵
3443
							#回傳結果:
3444
							#$result["status"],"true",代表執行成功;"false"代表執行失敗
3445
							#$result["error"],錯誤訊息陣列
3446
							#$result["sql"],執行的sql字串.
3447
							#必填參數:
3448
							$conf["db"]["eraseIndexKey"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
3449
							$conf["db"]["eraseIndexKey"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
3450
							$conf["db"]["eraseIndexKey"]["selectedDataBaseName"]=$conf["selectedDataBaseName"];#爲目標資料表所屬的資料庫
3451
							$conf["db"]["eraseIndexKey"]["selectedDataTableName"]=$conf["selectedDataTableName"];#爲目標資料表所屬的資料表
3452
							$conf["db"]["eraseIndexKey"]["erasedIndexKeyColumnConstraintName"]=$tableColumnDetial["keyConstraintName"][$conf["newColumnName"]];#要移除外鍵欄位的CONSTRAINT名稱
3453
							#可省略參數:
3454
 
3455
							#如果 $conf["dbPassword"] 存在
3456
							if(isset($conf["dbPassword"])){
3457
 
3458
								#則設定連線的密碼
3459
								$conf["db"]["eraseIndexKey"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
3460
 
3461
								}#if end
3462
 
3463
							#如果有設定 $conf["dbPort"]	
3464
							if(isset($conf["dbPort"])){
3465
 
3466
								#設定 $conf["dbPort"]
3467
								$conf["db"]["eraseIndexKey"]["dbPort"]=$conf["dbPort"];
3468
 
3469
								}#if end	
3470
 
3471
							$eraseIndexKeyResult=db::eraseIndexKey($conf["db"]["eraseIndexKey"]);
3472
							#var_dump($conf["db"]["eraseIndexKey"]);
3473
							unset($conf["db"]);
3474
 
3475
							#debug
3476
							#var_dump($eraseIndexKeyResult);
3477
 
3478
							#取得執行的sql語言
3479
							$result["sql"][]=$eraseIndexKeyResult["sql"];
3480
 
3481
							#如果 $eraseIndexKeyResult["status"]等於"fasle"
3482
							if($eraseIndexKeyResult["status"]=="false"){
3483
 
3484
								#設置出錯的識別
3485
								$result["status"]="false";
3486
 
3487
								#設置錯誤訊息
3488
								$result["error"]=$eraseIndexKeyResult;
3489
 
3490
								#回傳結果
3491
								return $result;
3492
 
3493
								}#if end
3494
 
3495
							}#if end
3496
 
3497
						}#if end
3498
 
3499
					#中斷switch
3500
					break;
3501
 
3502
				#如果 $conf["newDataTableColmunKeyType"] 是 "index"
3503
				case "index":
3504
 
3505
					#如果 $tableColumnDetial["foreignKey"]["exist"] 等於 "true",代表有外鍵
3506
					if($tableColumnDetial["foreignKey"]["exist"]=="true"){
3507
 
3508
						#echo "have foreign key";
3509
 
3510
						#如果 $tableColumnDetial["foreignKey"]["columnName"][$conf["newColumnName"]] 存在,則代表該欄位為索引鍵
3511
						if(isset($tableColumnDetial["foreignKey"]["columnName"][$conf["newColumnName"]])){
3512
 
3513
							#移除外鍵
3514
							#函式說明:
3515
							#移除資料表單1欄位的外鍵
3516
							#回傳結果:
3517
							#$result["status"],"true",代表執行成功;"false"代表執行失敗
3518
							#$result["error"],錯誤訊息陣列
3519
							#必填參數:
3520
							$conf["db"]["eraseForeignKey"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
3521
							$conf["db"]["eraseForeignKey"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
3522
							$conf["db"]["eraseForeignKey"]["selectedDataBaseName"]=$conf["selectedDataBaseName"];#爲目標資料表所屬的資料庫
3523
							$conf["db"]["eraseForeignKey"]["selectedDataTableName"]=$conf["selectedDataTableName"];#爲目標資料表所屬的資料庫
3524
							$conf["db"]["eraseForeignKey"]["erasedForeignKeyColumnConstraintName"]=$tableColumnDetial["foreignKey"]["constraintName"][$conf["newColumnName"]];#要移除外鍵欄位的CONSTRAINT名稱
3525
							#可省略參數: 
3526
 
3527
							#如果 $conf["dbPassword"] 存在
3528
							if(isset($conf["dbPassword"])){
3529
 
3530
								#則設定連線的密碼
3531
								$conf["db"]["eraseForeignKey"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
3532
 
3533
								}#if end
3534
 
3535
							#如果有設定 $conf["dbPort"]	
3536
							if(isset($conf["dbPort"])){
3537
 
3538
								#設定 $conf["dbPort"]
3539
								$conf["db"]["eraseForeignKey"]["dbPort"]=$conf["dbPort"];
3540
 
3541
								}#if end			
3542
 
3543
							$eraseForeignKeyResult=db::eraseForeignKey($conf["db"]["eraseForeignKey"]);
3544
							unset($conf["db"]["eraseForeignKey"]);
3545
 
3546
							#執行的sql字串
3547
							$result["sql"][]=$eraseForeignKeyResult["sql"];
3548
 
3549
							#如果 $eraseForeignKeyResult["status"]等於"fasle"
3550
							if($eraseForeignKeyResult["status"]=="false"){
3551
 
3552
								#設置出錯的識別
3553
								$result["status"]="false";
3554
 
3555
								#設置錯誤訊息
3556
								$result["error"]=$eraseForeignKeyResult;
3557
 
3558
								#回傳結果
3559
								return $result;
3560
 
3561
								}#if end
3562
 
3563
							}#if end
3564
 
3565
						}#if end
3566
 
3567
					#如果 $tableColumnDetial["key"]["exist"] 等於 "true",代表有索引鍵
3568
					if($tableColumnDetial["key"]["exist"]=="true"){
3569
 
3570
						#檢查目標欄位是否為索引鍵
3571
						if(!isset($tableColumnDetial["index"][$conf["newColumnName"]])){
3572
 
3573
							#代表目標欄位不為索引鍵
3574
 
3575
							#建立索引鍵
3576
							#函式說明:
3577
							#新增資料表的欄位
3578
							#回傳結果:
3579
							#$result["status"],"true",代表執行成功;"false"代表執行失敗.
3580
							#$result["function"],當前執行的函數名稱.
3581
							#$result["error"],錯誤訊息陣列.
3582
							#$result["warning"],警告訊息.
3583
							#$result["sql"],執行的sql字串.
3584
							#必填參數:
3585
							$conf["db"]["setColumnIndex"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
3586
							$conf["db"]["setColumnIndex"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
3587
							$conf["db"]["setColumnIndex"]["selectedDataBaseName"]=$conf["selectedDataBaseName"];#爲目標資料表所屬的資料庫
3588
							$conf["db"]["setColumnIndex"]["selectedDataTableName"]=$conf["selectedDataTableName"];#爲目標資料表所屬的資料庫
3589
							$conf["db"]["setColumnIndex"]["indexedColumnName"]=$conf["newColumnName"];#要設爲index的欄位名稱
3590
							#可省略參數:
3591
 
3592
							#如果 $conf["dbPassword"] 存在
3593
							if(isset($conf["dbPassword"])){
3594
 
3595
								#則設定連線的密碼
3596
								$conf["db"]["setColumnIndex"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
3597
 
3598
								}#if end
3599
 
3600
							#如果有設定 $conf["dbPort"]	
3601
							if(isset($conf["dbPort"])){
3602
 
3603
								#設定 $conf["dbPort"]
3604
								$conf["db"]["setColumnIndex"]["dbPort"]=$conf["dbPort"];
3605
 
3606
								}#if end	
3607
 
3608
							$setColumnIndexResult=db::setColumnIndex($conf["db"]["setColumnIndex"]);
3609
							unset($conf["db"]["setColumnIndex"]);
3610
 
3611
							#如果設置 column index 失敗
3612
							if($setColumnIndexResult["status"]==="false"){
3613
 
3614
								#設置出錯的識別
3615
								$result["status"]="false";
3616
 
3617
								#設置錯誤訊息
3618
								$result["error"]=$setColumnIndexResult;
3619
 
3620
								#回傳結果
3621
								return $result;
3622
 
3623
								}#if end
3624
 
3625
							#如果有執行 sql
3626
							if(isset($setColumnIndexResult["sql"])){
3627
 
3628
								#取得執行的sql字串
3629
								$result["sql"][]=$setColumnIndexResult["sql"];
3630
 
3631
								}#if end
3632
 
3633
							#如果 $setColumnIndexResult["status"] 為 "fasle"
3634
							if($setColumnIndexResult["status"]=="fasle"){
3635
 
3636
								#設置出錯的識別
3637
								$result["status"]="false";
3638
 
3639
								#設置錯誤訊息
3640
								$result["error"]=$setColumnIndexResult;
3641
 
3642
								#回傳結果
3643
								return $result;
3644
 
3645
								}#if end
3646
 
3647
							}#if end
3648
 
3649
						}#if end
3650
 
3651
					#如果 $tableColumnDetial["key"]["exist"] 等於 "fasle",代表沒有索引鍵
3652
					if($tableColumnDetial["key"]["exist"]=="false"){
3653
 
3654
						#建立索引鍵
3655
						#函式說明:
3656
						#新增資料表的欄位
3657
						#回傳結果:
3658
						#$result["status"],"true",代表執行成功;"false"代表執行失敗
3659
						#$result["error"],錯誤訊息陣列
3660
						#必填參數:
3661
						$conf["db"]["setColumnIndex"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
3662
						$conf["db"]["setColumnIndex"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
3663
						$conf["db"]["setColumnIndex"]["selectedDataBaseName"]=$conf["selectedDataBaseName"];#爲目標資料表所屬的資料庫
3664
						$conf["db"]["setColumnIndex"]["selectedDataTableName"]=$conf["selectedDataTableName"];#爲目標資料表所屬的資料庫
3665
						$conf["db"]["setColumnIndex"]["indexedColumnName"]=$conf["newColumnName"];#要設爲index的欄位名稱
3666
						#可省略參數:
3667
 
3668
						#如果 $conf["dbPassword"] 存在
3669
						if(isset($conf["dbPassword"])){
3670
 
3671
							#則設定連線的密碼
3672
							$conf["db"]["setColumnIndex"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
3673
 
3674
							}#if end
3675
 
3676
						#如果有設定 $conf["dbPort"]	
3677
						if(isset($conf["dbPort"])){
3678
 
3679
							#設定 $conf["dbPort"]
3680
							$conf["db"]["setColumnIndex"]["dbPort"]=$conf["dbPort"];
3681
 
3682
							}#if end	
3683
 
3684
						$setColumnIndexResult=db::setColumnIndex($conf["db"]["setColumnIndex"]);
3685
						unset($conf["db"]["setColumnIndex"]);
3686
 
3687
						#取得執行的sql字串.
3688
						$result["sql"][]=$setColumnIndexResult["sql"];
3689
 
3690
						#如果 $setColumnIndexResult["status"] 為 "fasle"
3691
						if($setColumnIndexResult["status"]=="fasle"){
3692
 
3693
							#設置出錯的識別
3694
							$result["status"]="false";
3695
 
3696
							#設置錯誤訊息
3697
							$result["error"]=$setColumnIndexResult;
3698
 
3699
							#回傳結果
3700
							return $result;
3701
 
3702
							}#if end
3703
 
3704
						}#if end
3705
 
3706
					#中斷switch
3707
					break;
3708
 
3709
				#如果是 foreign key
3710
				case "foreign key":
3711
 
3712
					#echo "enter foreign key";
3713
 
3714
					#檢查該欄位是否為foreign key
3715
					#如果 $tableColumnDetial["foreignKey"]["exist"] 等於 "true",代表有外鍵
3716
					if($tableColumnDetial["foreignKey"]["exist"]=="true"){
3717
 
3718
						#echo "have foreig key";
3719
 
3720
						#如果 $tableColumnDetial["foreignKey"]["columnName"][$conf["dbInformation"]["newColumnName"]] 存在,則代表該欄位為索引鍵
3721
						if(isset($tableColumnDetial["foreignKey"]["columnName"][$conf["newColumnName"]])){
3722
 
3723
							#移除外鍵
3724
							#函式說明:
3725
							#移除資料表單1欄位的外鍵
3726
							#回傳結果:
3727
							#$result["status"],"true",代表執行成功;"false"代表執行失敗
3728
							#$result["error"],錯誤訊息陣列
3729
							#必填參數:
3730
							$conf["db"]["eraseForeignKey"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
3731
							$conf["db"]["eraseForeignKey"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
3732
							$conf["db"]["eraseForeignKey"]["selectedDataBaseName"]=$conf["selectedDataBaseName"];#爲目標資料表所屬的資料庫
3733
							$conf["db"]["eraseForeignKey"]["selectedDataTableName"]=$conf["selectedDataTableName"];#爲目標資料表所屬的資料庫
3734
							$conf["db"]["eraseForeignKey"]["erasedForeignKeyColumnConstraintName"]=$tableColumnDetial["foreignKey"]["constraintName"][$conf["newColumnName"]];#要移除外鍵欄位的CONSTRAINT名稱
3735
							#可省略參數: 
3736
 
3737
							#如果 $conf["dbPassword"] 存在
3738
							if(isset($conf["dbPassword"])){
3739
 
3740
								#則設定連線的密碼
3741
								$conf["db"]["eraseForeignKey"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
3742
 
3743
								}#if end
3744
 
3745
							#如果有設定 $conf["dbPort"]	
3746
							if(isset($conf["dbPort"])){
3747
 
3748
								#設定 $conf["dbPort"]
3749
								$conf["db"]["eraseForeignKey"]["dbPort"]=$conf["dbPort"];
3750
 
3751
								}#if end
3752
 
3753
							$eraseForeignKeyResult=db::eraseForeignKey($conf["db"]["eraseForeignKey"]);
3754
							unset($conf["db"]["eraseForeignKey"]);
3755
 
3756
							#取得執行的sql字串
3757
							$result["sql"][]=$eraseForeignKeyResult["sql"];
3758
 
3759
							#如果 $eraseForeignKeyResult["status"]等於"fasle"
3760
							if($eraseForeignKeyResult["status"]=="false"){
3761
 
3762
								#設置出錯的識別
3763
								$result["status"]="false";
3764
 
3765
								#設置錯誤訊息
3766
								$result["error"]=$eraseForeignKeyResult;
3767
 
3768
								#回傳結果
3769
								return $result;
3770
 
3771
								}#if end
3772
 
3773
							}#if end
3774
 
3775
						}#if end
3776
 
3777
					#檢查該欄位是否為index
3778
					#如果 $tableColumnDetial["key"]["exist"] 等於 "false",代表沒有索引鍵
3779
					if($tableColumnDetial["key"]["exist"]=="false"){
3780
 
3781
						#echo "have no index";
3782
 
3783
						#建立索引鍵
3784
						#函式說明:
3785
						#新增資料表的欄位
3786
						#回傳結果:
3787
						#$result["status"],"true",代表執行成功;"false"代表執行失敗
3788
						#$result["error"],錯誤訊息陣列
3789
						#必填參數:
3790
						$conf["db"]["setColumnIndex"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
3791
						$conf["db"]["setColumnIndex"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
3792
						$conf["db"]["setColumnIndex"]["selectedDataBaseName"]=$conf["selectedDataBaseName"];#爲目標資料表所屬的資料庫
3793
						$conf["db"]["setColumnIndex"]["selectedDataTableName"]=$conf["selectedDataTableName"];#爲目標資料表所屬的資料庫
3794
						$conf["db"]["setColumnIndex"]["indexedColumnName"]=$conf["newColumnName"];#要設爲index的欄位名稱
3795
						#可省略參數:
3796
 
3797
						#如果 $conf["dbPassword"] 存在
3798
						if(isset($conf["dbPassword"])){
3799
 
3800
							#則設定連線的密碼
3801
							$conf["db"]["setColumnIndex"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
3802
 
3803
							}#if end
3804
 
3805
						#如果有設定 $conf["dbPort"]	
3806
						if(isset($conf["dbPort"])){
3807
 
3808
							#設定 $conf["dbPort"]
3809
							$conf["db"]["setColumnIndex"]["dbPort"]=$conf["dbPort"];
3810
 
3811
							}#if end	
3812
 
3813
						$setColumnIndexResult=db::setColumnIndex($conf["db"]["setColumnIndex"]);
3814
						unset($conf["db"]["setColumnIndex"]);
3815
 
3816
						#取得執行的sql字串
3817
						$result["sql"][]=$setColumnIndexResult["sql"];
3818
 
3819
						#如果 $setColumnIndexResult["status"] 為 "false"
3820
						if($setColumnIndexResult["status"]=="false"){
3821
 
3822
							#設置出錯的識別
3823
							$result["status"]="false";
3824
 
3825
							#設置錯誤訊息
3826
							$result["error"]=$setColumnIndexResult;
3827
 
3828
							#回傳結果
3829
							return $result;
3830
 
3831
							}#if end
3832
 
3833
						}#if end
3834
 
3835
					#反之有索引鍵	
3836
					#如果目標欄位不是索引鍵
3837
					else if(!isset($tableColumnDetial["key"][$conf["newColumnName"]])){
3838
 
3839
						#建立索引鍵
3840
						#函式說明:
3841
						#新增資料表的欄位
3842
						#回傳結果:
3843
						#$result["status"],"true",代表執行成功;"false"代表執行失敗
3844
						#$result["error"],錯誤訊息陣列
3845
						#必填參數:
3846
						$conf["db"]["setColumnIndex"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
3847
						$conf["db"]["setColumnIndex"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
3848
						$conf["db"]["setColumnIndex"]["selectedDataBaseName"]=$conf["selectedDataBaseName"];#爲目標資料表所屬的資料庫
3849
						$conf["db"]["setColumnIndex"]["selectedDataTableName"]=$conf["selectedDataTableName"];#爲目標資料表所屬的資料庫
3850
						$conf["db"]["setColumnIndex"]["indexedColumnName"]=$conf["newColumnName"];#要設爲index的欄位名稱
3851
						#可省略參數:
3852
 
3853
						#如果 $conf["dbPassword"] 存在
3854
						if(isset($conf["dbPassword"])){
3855
 
3856
							#則設定連線的密碼
3857
							$conf["db"]["setColumnIndex"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
3858
 
3859
							}#if end
3860
 
3861
						#如果有設定 $conf["dbPort"]	
3862
						if(isset($conf["dbPort"])){
3863
 
3864
							#設定 $conf["dbPort"]
3865
							$conf["db"]["setColumnIndex"]["dbPort"]=$conf["dbPort"];
3866
 
3867
							}#if end			
3868
 
3869
						$setColumnIndexResult=db::setColumnIndex($conf["db"]["setColumnIndex"]);
3870
						unset($conf["db"]["setColumnIndex"]);
3871
 
3872
						#取得執行的sql字串
3873
						$result["sql"][]=$setColumnIndexResult["sql"];
3874
 
3875
						#如果 $setColumnIndexResult["status"] 為 "false"
3876
						if($setColumnIndexResult["status"]=="false"){
3877
 
3878
							#設置出錯的識別
3879
							$result["status"]="false";
3880
 
3881
							#設置錯誤訊息
3882
							$result["error"]=$setColumnIndexResult;
3883
 
3884
							#回傳結果
3885
							return $result;
3886
 
3887
							}#if end					
3888
 
3889
						}#else end
3890
 
3891
					#檢查該欄位的foreign key設定參數是否存在
3892
					#函式說明:
3893
					#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
3894
					#回傳結果:
3895
					#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
3896
					#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
3897
					#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
3898
					#必填參數:
3899
					$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
3900
					$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("foreignKeyReferenceTable","foreignKeyReferenceColumn");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
3901
					#可省略參數:
3902
					#$conf["variableType"]=array();#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
3903
					#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
3904
					$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
3905
					unset($conf["variableCheck"]["isexistMuti"]);
3906
 
3907
					#如果檢查失敗
3908
					if($checkResult["status"]=="false"){
3909
 
3910
						#設置執行失敗的訊息
3911
						$result["status"]="false";
3912
 
3913
						#設置錯誤訊息
3914
						$result["error"]=$checkResult;
3915
 
3916
						#回傳結果
3917
						return $result;
3918
 
3919
						}#if end
3920
 
3921
					#如果檢查不通過
3922
					if($checkResult["passed"]=="false"){
3923
 
3924
						#設置執行失敗的訊息
3925
						$result["status"]="false";
3926
 
3927
						#設置錯誤訊息
3928
						$result["error"]=$checkResult;
3929
 
3930
						#回傳結果
3931
						return $result;
3932
 
3933
						}#if end
3934
 
3935
					#如果 $conf["foreignKeyUpdateAction"] 不存在
3936
					if(!isset($conf["foreignKeyUpdateAction"])){
3937
 
3938
						#則預設為"CASCADE"將有所關聯的紀錄行也會進行刪除或修改。
3939
						$conf["foreignKeyUpdateAction"]="CASCADE";#若要設定foreign key的話,可以指定參考的資料表欄位更新時該欄位該怎麼處理,預設為"CASCADE",會將有所關聯的紀錄行也會進行刪除或修改。"SET NULL"代表會將有所關聯的紀錄行設定成 NULL。"NO ACTION"代表有存在的關聯紀錄行時,會禁止父資料表的刪除或修改動作。
3940
 
3941
						}#if end
3942
 
3943
					#如果 $conf["foreignKeyDeleteAction"] 沒有設定
3944
					if(!isset($conf["foreignKeyDeleteAction"])){
3945
 
3946
						#預設為"SET NULL",會將有所關聯的紀錄行設定成 NULL。
3947
						$conf["foreignKeyDeleteAction"]="SET NULL";#若要設定foreign key的話,可以指定參考的資料表欄位移除時該欄位該怎麼處理,預設為"SET NULL",會將有所關聯的紀錄行設定成 NULL。"NO ACTION"代表有存在的關聯紀錄行時,會禁止父資料表的刪除或修改動作。
3948
 
3949
						}#if end
3950
 
3951
					#檢查目標欄位的 key constraint 名稱
3952
					#取得其key為何種
3953
					#函式說明:
3954
					#取得資料表所有欄位的詳細資訊
3955
					#回傳的內容:
3956
					#$result["status"],執行結果,"true"代表執行成功;"false"代表執行失敗
3957
					#$result["error"],錯誤訊息陣列
3958
					#$result["sql"],執行的sql語法
3959
					#$result["oriInput"],原始的資料表欄位資訊
3960
					#$result["everyLine"],逐行的欄位資訊
3961
					#$result["tableName"],當前查詢的資料表名稱
3962
					#$result["engine"],資料表使用的儲存引擎
3963
					#$result["charset"],資料表預設的編碼
3964
					#$result["columnName"][$i],各欄位的名稱陣列,$i爲0開始的數字,也可以使用欄位的名稱。
3965
					#$result["columnVarTypeAndLengthLimit"][$i],各欄位儲存的變數形態與長度限制,$i爲0開始的數字,也可以使用欄位的名稱。
3966
					#$result["columnNotNull"][$i],各欄位是否可以不爲null,"true"爲可以不爲null;"false"爲可以爲"null",$i爲0開始的數字,也可以使用欄位的名稱。
3967
					#$result["columnAutoIncrement"][$i],各欄位是否會自動加1,"true"爲會;"false"爲不會,$i爲0開始的數字,也可以使用欄位的名稱。
3968
					#$result["columnDefault"][$i],各欄位的預設內容,若無則爲"沒有指定",$i爲0開始的數字,也可以使用欄位的名稱。
3969
					#$result["columnOnUpdateAction"][$i],當資料有修改時,該欄位的內容要怎麼因應,$i爲0開始的數字,也可以使用欄位的名稱。
3970
					#$result["columnCharacterSet"][$i],各欄位使用的CharacterSet,$i爲0開始的數字,也可以使用欄位的名稱。
3971
					#$result["columnCollate"][$i],各欄位使用的Collate,$i爲0開始的數字,也可以使用欄位的名稱。
3972
					#$result["key"]["exist"],該資料表是否有索引鍵,"true"代表有;"false"代表沒有。
3973
					#$result["key"][$j],該資料表的索引鍵陣列,$j爲0開始的數字,也可以使用欄位的名稱。
3974
					#$result["primaryKey"],該資料表的主鍵
3975
					#$result["foreignKey"]["exist"],該資料表是否有foreign key,"true"代表有;"fasle"代表沒有。
3976
					#$result["foreignKey"]["constraintName"][$k],用來識別外鍵的CONSTRAINT名稱陣列,$k爲0開始的數字,也可以使用欄位的名稱。
3977
					#$result["foreignKey"]["columnName"][$k],外鍵的名稱陣列
3978
					#$result["foreignKey"]["referencesTable"][$k],外鍵參照的欄位,$k爲0開始的數字
3979
					#$result["foreignKey"]["referencesColumn"][$k],外鍵參照的欄位屬於哪個資料表,$k爲0開始的數字
3980
					#$result["foreignKey"]["OnUpdateAction"][$l],當參照的欄位資料更新時,會怎麼同步,$l爲0開始的數字
3981
					#$result["foreignKey"]["OnDeleteAction"][$m],當參照的欄位資料移除時,會怎麼同步,$m爲0開始的數字
3982
					#必填參數:
3983
					$conf["db"]["getTableColumnDetailInfo"]["dbAddress"]=$conf["dbAddress"];
3984
					$conf["db"]["getTableColumnDetailInfo"]["dbAccount"]=$conf["dbAccount"];
3985
					$conf["db"]["getTableColumnDetailInfo"]["selectedDataBase"]=$conf["selectedDataBaseName"];
3986
					$conf["db"]["getTableColumnDetailInfo"]["selectedDataTable"]=$conf["selectedDataTableName"];
3987
					#可省略參數:
3988
 
3989
					#如果 $conf["dbPassword"] 有設定
3990
					if(isset($conf["dbPassword"])){
3991
 
3992
						#套用連限時的密碼
3993
						$conf["db"]["getTableColumnDetailInfo"]["dbPassword"]=$conf["dbPassword"];
3994
 
3995
						}#if end
3996
 
3997
					#如果有設定 $conf["dbPort"]	
3998
					if(isset($conf["dbPort"])){
3999
 
4000
						#設定 $conf["dbPort"]
4001
						$conf["db"]["getTableColumnDetailInfo"]["dbPort"]=$conf["dbPort"];
4002
 
4003
						}#if end			
4004
 
4005
					$tableColumnDetial=db::getTableColumnDetailInfo($conf["db"]["getTableColumnDetailInfo"]);
4006
					unset($conf["db"]["getTableColumnDetailInfo"]);#卸除變數,避免錯誤產生.
4007
 
4008
					#如果取得資料表結構失敗
4009
					if($tableColumnDetial["status"]=="false"){
4010
 
4011
						#設置執行不正常
4012
						$result["status"]="false";
4013
 
4014
						#設置執行錯誤訊息
4015
						$result["error"]=$tableColumnDetial;
4016
 
4017
						#回傳結果
4018
						return $result;
4019
 
4020
						}#if end	
4021
 
4022
					#依據設定將該欄位設定為foreign key
4023
 
4024
					#設定其參照的資料表與欄位的sql語法
4025
					$sql="alter table `".$conf["selectedDataBaseName"]."`.`".$conf["selectedDataTableName"]."` add FOREIGN KEY(`".$tableColumnDetial["key"][$conf["newColumnName"]]."`) REFERENCES `".$conf["foreignKeyDb"]."`.`".$conf["foreignKeyReferenceTable"]."`(`".$conf["foreignKeyReferenceColumn"]."`) ON UPDATE ".$conf["foreignKeyUpdateAction"]." ON DELETE ".$conf["foreignKeyDeleteAction"];
4026
 
4027
					#執行 sql 語法
4028
					#函式說明:
4029
					#執行mysql指令
4030
					#回傳結果::
4031
					#$result["status"],"true"為執行成功;"false"為執行失敗。
4032
					#$result["error"],錯誤訊息的陣列
4033
					#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
4034
					#$result["queryString"],mysql查詢的語言
4035
					#查詢號的解果,需要解析。
4036
					#必填參數:
4037
					$conf["db"]["execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
4038
					$conf["db"]["execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
4039
					$conf["db"]["execMysqlQuery"]["dbSql"]=$sql;#要執行sql語法
4040
					#可省略參數: 
4041
 
4042
					#如果有設定連線密碼
4043
					if(isset($conf["dbPassword"])){
4044
 
4045
						$conf["db"]["execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
4046
 
4047
						}#if end
4048
 
4049
					#$conf["db"]["execMysqlQuery"]["dbName"]=$conf["selectedDataBaseName"];#為是否要指定資料庫,預設不指定.
4050
 
4051
					#如果有設定 $conf["dbPort"]	
4052
					if(isset($conf["dbPort"])){
4053
 
4054
						#設定 $conf["dbPort"]
4055
						$conf["db"]["execMysqlQuery"]["dbPort"]=$conf["dbPort"];
4056
 
4057
						}#if end	
4058
 
4059
					$sqlExecResult=db::execMysqlQuery($conf["db"]["execMysqlQuery"]);
4060
					unset($conf["db"]["execMysqlQuery"]);
4061
 
4062
					#var_dump($sqlExecResult);
4063
 
4064
					#取得執行的sql語法
4065
					$result["sql"][]=$sqlExecResult["queryString"];
4066
 
4067
					#如果執行 sql 語法錯誤
4068
					if($sqlExecResult["status"]=="false"){
4069
 
4070
						#echo "fasle";
4071
 
4072
						#設定執行失敗的識別
4073
						$result["status"]="false";
4074
 
4075
						#設定錯誤訊息
4076
						$result["error"]=$sqlExecResult;
4077
 
4078
						#回傳結果
4079
						return $result;
4080
 
4081
						}#if end					
4082
 
4083
					#跳出 foreign key
4084
					break;
4085
 
4086
				#如果不是以上參數
4087
				default:
4088
 
4089
					#設定執行錯誤的識別
4090
					$result["status"]="false";
4091
 
4092
					#設定錯誤訊息
4093
					$result["error"]="可用的鍵型為index、foregin key、primary key";
4094
 
4095
					#回傳結果
4096
					return $result;
4097
 
4098
				}#switch end
4099
 
4100
			}#if end
4101
 
4102
		#執行到這邊代表執行成功
4103
		#設定執行成功的識別
4104
		$result["status"]="true";
4105
 
4106
		#回傳結果
4107
		return $result;
4108
 
4109
		}#function editColumn end
4110
 
4111
	/*
4112
	#函式說明:
4113
	#新增資料表的欄位
4114
	#回傳結果:
4115
	#$result["status"],"true",代表執行成功;"false"代表執行失敗.
4116
	#$result["function"],當前執行的函數名稱.
4117
	#$result["error"],錯誤訊息陣列.
4118
	#$result["warning"],警告訊息.
4119
	#$result["sql"],執行的sql字串.
4120
	#必填參數:
4121
	$conf["dbAddress"],字串,爲mysql-Server的位置.
4122
	$conf["dbAddress"]=$dbAddress;
4123
	$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號.
4124
	$conf["dbAccount"]=$dbAccount;
4125
	$conf["selectedDataBaseName"],字串,爲目標資料表所屬的資料庫.
4126
	$conf["selectedDataBaseName"]="";
4127
	$conf["selectedDataTableName"],字串,爲目標資料表所屬的資料庫.
4128
	$conf["selectedDataTableName"]="";
4129
	$conf["indexedColumnName"],字串,要設爲index的欄位名稱.
4130
	$conf["indexedColumnName"]="";
4131
	#可省略參數:
4132
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
4133
	#$conf["dbPassword"]=$dbPassword;
4134
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,預設為3306.
4135
	#$conf["dbPort"]="3306";
4136
	#參考資料:
4137
	#無.
4138
	#備註:
4139
	#無.
4140
	*/
4141
	public static function setColumnIndex($conf){
4142
 
4143
		#初始化要回傳的內容
4144
		$result=array();
4145
 
4146
		#取得當前執行的函數名稱
4147
		$result["function"]=__FUNCTION__;
4148
 
4149
		#如果 $conf 不為陣列
4150
		if(gettype($conf)!="array"){
4151
 
4152
			#設置執行失敗
4153
			$result["status"]="false";
4154
 
4155
			#設置執行錯誤訊息
4156
			$result["error"][]="\$conf變數須為陣列形態";
4157
 
4158
			#如果傳入的參數為 null
4159
			if($conf==null){
4160
 
4161
				#設置執行錯誤訊息
4162
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
4163
 
4164
				}#if end
4165
 
4166
			#回傳結果
4167
			return $result;
4168
 
4169
			}#if end
4170
 
4171
		#函式說明:
4172
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
4173
		#回傳結果:
4174
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
4175
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
4176
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
4177
		#必填參數:
4178
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
4179
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("dbAddress","dbAccount","selectedDataBaseName","selectedDataTableName","indexedColumnName");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
4180
		#可省略參數:
4181
		#$conf["variableType"]=array();#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
4182
		#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
4183
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
4184
		unset($conf["variableCheck"]["isexistMuti"]);
4185
 
4186
		#如果檢查不通過
4187
		if($checkResult["passed"]=="false"){
4188
 
4189
			#設置執行失敗的訊息
4190
			$result["status"]="false";
4191
 
4192
			#設置錯誤訊息
4193
			$result["error"]=$checkResult;
4194
 
4195
			#回傳結果
4196
			return $result;
4197
 
4198
			}#if end
4199
 
4200
		#查詢該欄位是否已經是index了
4201
		#函式說明:
4202
		#取得資料表所有欄位的詳細資訊
4203
		#回傳的內容:
4204
		#$result["status"],執行結果,"true"代表執行成功;"false"代表執行失敗
4205
		#$result["error"],錯誤訊息陣列
4206
		#$result["function"],當前執行的函數名稱.
4207
		#$result["sql"],執行的sql語法
4208
		#$result["oriInput"],原始的資料表欄位資訊
4209
		#$result["everyLine"],逐行的欄位資訊
4210
		#$result["tableName"],當前查詢的資料表名稱
4211
		#$result["engine"],資料表使用的儲存引擎
4212
		#$result["charset"],資料表預設的編碼
4213
		#$result["columnName"][$i],各欄位的名稱陣列,$i爲1開始的數字,也可以使用欄位的名稱。
4214
		#$result["columnVarTypeAndLengthLimit"][$i],各欄位儲存的變數形態與長度限制,$i爲1開始的數字,也可以使用欄位的名稱。
4215
		#$result["columnVarType"][$i],各欄位變數儲存的型態,$i爲1開始的數字,也可以使用欄位的名稱.
4216
		#$result["columnVarLengthLimit"][$i],個欄位變數的長度限制,若不存在其限制,則為"",$i爲1開始的數字,也可以使用欄位的名稱.
4217
		#$result["columnNotNull"][$i],各欄位是否不可爲null,"true"爲不可以爲null;"false"爲可爲"null",$i爲1開始的數字,也可以使用欄位的名稱。
4218
		#$result["columnAutoIncrement"][$i],各欄位是否會自動加1,"true"爲會;"false"爲不會,$i爲1開始的數字,也可以使用欄位的名稱。
4219
		#$result["columnDefault"][$i],各欄位的預設內容,若無則爲"沒有指定",$i爲1開始的數字,也可以使用欄位的名稱。
4220
		#$result["columnOnUpdateAction"][$i],當資料有修改時,該欄位的內容要怎麼因應,$i爲1開始的數字,也可以使用欄位的名稱。
4221
		#$result["columnCharacterSet"][$i],各欄位使用的CharacterSet,$i爲1開始的數字,也可以使用欄位的名稱。
4222
		#$result["columnCollate"][$i],各欄位使用的Collate,$i爲1開始的數字,也可以使用欄位的名稱。
4223
		#$result["key"]["exist"],該資料表是否有索引鍵,"true"代表有;"false"代表沒有。
4224
		#$result["key"][$j],該資料表的索引鍵陣列,$j爲0開始的數字,也可以使用欄位的名稱。
4225
		#$result["keyConstraintName"][$j],該資料表用於識別索引鍵的CONSTRAINT名稱陣列,$j爲1開始的數字,也可以使用欄位的名稱。
4226
		#$result["primaryKey"],該資料表的主鍵
4227
		#$result["foreignKey"]["exist"],該資料表是否有foreign key,"true"代表有;"fasle"代表沒有。
4228
		#$result["foreignKey"]["constraintName"][$k],用來識別外鍵的CONSTRAINT名稱陣列,$k爲1開始的數字,也可以使用欄位的名稱。
4229
		#$result["foreignKey"]["columnName"][$k],外鍵的名稱陣列,$k爲1開始的數字,也可以使用欄位的名稱。
4230
		#$result["foreignKey"]["referencesTable"][$k],外鍵參照的欄位,$k爲1開始的數字,,也可用欄位的名稱來找value.
4231
		#$result["foreignKey"]["referencesColumn"][$k],外鍵參照的欄位屬於哪個資料表,$k爲1開始的數字,也可用欄位的名稱來找value.
4232
		#$result["foreignKey"]["onUpdateAction"][$i],當參照的欄位資料更新時,會怎麼同步,$i爲1開始的數字,也可用欄位的名稱來找value.
4233
		#$result["foreignKey"]["onDeleteAction"][$i],當參照的欄位資料移除時,會怎麼同步,$i爲1開始的數字,也可用欄位的名稱來找value.
4234
		#必填參數:
4235
		$conf["db::getTableColumnDetailInfo"]["dbAddress"]=$conf["dbAddress"];#資料庫的網路位置
4236
		$conf["db::getTableColumnDetailInfo"]["dbAccount"]=$conf["dbAccount"];#連線到資料庫要用的帳號
4237
		$conf["db::getTableColumnDetailInfo"]["selectedDataBase"]=$conf["selectedDataBaseName"];#連線到資料庫要選擇的資料庫
4238
		$conf["db::getTableColumnDetailInfo"]["selectedDataTable"]=$conf["selectedDataTableName"];#連線到資料庫要檢視的資料表
4239
		#可省略參數:
4240
 
4241
		#如果 $conf["dbPassword"] 有設定
4242
		if(isset($conf["dbPassword"])){
4243
 
4244
			#設定其密碼
4245
			$conf["db::getTableColumnDetailInfo"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
4246
 
4247
			}#if end
4248
 
4249
		#如果有設定 $conf["dbPort"]	
4250
		if(isset($conf["dbPort"])){
4251
 
4252
			#設定 $conf["dbPort"]
4253
			$conf["db::getTableColumnDetailInfo"]["dbPort"]=$conf["dbPort"];
4254
 
4255
			}#if end
4256
 
4257
		#備註:
4258
		#如果forign key參照的是別的資料庫,將無法取得參照的資料庫名稱?
4259
		$getTableColumnDetailInfo=db::getTableColumnDetailInfo($conf["db::getTableColumnDetailInfo"]);
4260
		unset($conf["db::getTableColumnDetailInfo"]);	
4261
 
4262
		#如果取得資料表資訊失敗
4263
		if($getTableColumnDetailInfo["status"]=="false"){
4264
 
4265
			#設置錯誤訊息
4266
			$result["status"]="false";
4267
 
4268
			#設置錯誤提示
4269
			$result["error"]=$getTableColumnDetailInfo;
4270
 
4271
			#回傳結果
4272
			return $result;
4273
 
4274
			}#if end	
4275
 
4276
		#如果該欄位已經是index了
4277
		if(isset($getTableColumnDetailInfo["key"][$conf["indexedColumnName"]])){
4278
 
4279
			#設置執行正常
4280
			$result["status"]="true";
4281
 
4282
			#設置警告提示
4283
			$result["warning"][]="已經是index key了";
4284
 
4285
			#回傳結果
4286
			return $result;
4287
 
4288
			}#if end
4289
 
4290
		#組合sql語言
4291
		$sql="alter table ".$conf["selectedDataBaseName"].".".$conf["selectedDataTableName"]." add index(`".$conf["indexedColumnName"]."`)";
4292
 
4293
		#執行sql語法
4294
		#函式說明:
4295
		#執行mysql指令
4296
		#回傳結果::
4297
		#$result["status"],"true"為執行成功;"false"為執行失敗。
4298
		#$result["error"],錯誤訊息的陣列
4299
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
4300
		#$result["queryString"],mysql查詢的語言
4301
		#查詢號的解果,需要解析。
4302
		#必填參數:
4303
		$conf["db"]["execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
4304
		$conf["db"]["execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
4305
		$conf["db"]["execMysqlQuery"]["dbSql"]=$sql;#要執行sql語法
4306
		#可省略參數:
4307
 
4308
		#如果 $conf["dbPassword"] 有設定
4309
		if(isset($conf["dbPassword"])){
4310
 
4311
			#設定其密碼
4312
			$conf["db"]["execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
4313
 
4314
			}#if end
4315
 
4316
		#如果有設定 $conf["dbPort"]	
4317
		if(isset($conf["dbPort"])){
4318
 
4319
			#設定 $conf["dbPort"]
4320
			$conf["db"]["execMysqlQuery"]["dbPort"]=$conf["dbPort"];
4321
 
4322
			}#if end
4323
 
4324
		$queryResult=db::execMysqlQuery($conf["db"]["execMysqlQuery"]);
4325
		unset($conf["db"]["execMysqlQuery"]);
4326
 
4327
		#取得執行的sql語法
4328
		$result["sql"]=$queryResult["queryString"];
4329
 
4330
		#如果有錯誤
4331
		if($queryResult["status"]=="false"){
4332
 
4333
			#設置錯誤訊息
4334
			$result["status"]="false";
4335
 
4336
			#設置錯誤提示
4337
			$result["error"]=$queryResult;
4338
 
4339
			#回傳結果
4340
			return $result;
4341
 
4342
			}#if end
4343
 
4344
		#執行到這邊代表執行成功
4345
 
4346
		#設置成功訊息
4347
		$result["status"]="true";
4348
 
4349
		#回傳結果
4350
		return $result;
4351
 
4352
		}#function setColumnIndex end
4353
 
4354
	/*
4355
	#函式說明:
4356
	#取得資料表所有欄位的詳細資訊
4357
	#回傳的內容:
4358
	#$result["status"],執行結果,"true"代表執行成功;"false"代表執行失敗
4359
	#$result["error"],錯誤訊息陣列
4360
	#$result["function"],當前執行的函數名稱.
4361
	#$result["sql"],執行的sql語法
4362
	#$result["oriInput"],原始的資料表欄位資訊
4363
	#$result["everyLine"],逐行的欄位資訊
4364
	#$result["tableName"],當前查詢的資料表名稱
4365
	#$result["engine"],資料表使用的儲存引擎
4366
	#$result["charset"],資料表預設的編碼
4367
	#$result["columnName"][$i],各欄位的名稱陣列,$i爲1開始的數字,也可以使用欄位的名稱。
4368
	#$result["columnVarTypeAndLengthLimit"][$i],各欄位儲存的變數形態與長度限制,$i爲1開始的數字,也可以使用欄位的名稱。
4369
	#$result["columnVarType"][$i],各欄位變數儲存的型態,$i爲1開始的數字,也可以使用欄位的名稱.
4370
	#$result["columnVarLengthLimit"][$i],個欄位變數的長度限制,若不存在其限制,則為"",$i爲1開始的數字,也可以使用欄位的名稱.
4371
	#$result["columnNotNull"][$i],各欄位是否不可爲null,"true"爲不可以爲null;"false"爲可爲"null",$i爲1開始的數字,也可以使用欄位的名稱。
4372
	#$result["columnAutoIncrement"][$i],各欄位是否會自動加1,"true"爲會;"false"爲不會,$i爲1開始的數字,也可以使用欄位的名稱。
4373
	#$result["columnDefault"][$i],各欄位的預設內容,若無則爲"沒有指定",$i爲1開始的數字,也可以使用欄位的名稱。
4374
	#$result["columnOnUpdateAction"][$i],當資料有修改時,該欄位的內容要怎麼因應,$i爲1開始的數字,也可以使用欄位的名稱。
4375
	#$result["columnCharacterSet"][$i],各欄位使用的CharacterSet,$i爲1開始的數字,也可以使用欄位的名稱。
4376
	#$result["columnCollate"][$i],各欄位使用的Collate,$i爲1開始的數字,也可以使用欄位的名稱。
4377
	#$result["columnComment"][$i],各欄位的註解,$i爲1開始的數字,也可以使用欄位的名稱。
4378
	#$result["key"]["exist"],該資料表是否有索引鍵,"true"代表有;"false"代表沒有。
4379
	#$result["key"][$j],該資料表的索引鍵陣列,$j爲0開始的數字,也可以使用欄位的名稱。
4380
	#$result["keyConstraintName"][$j],該資料表用於識別索引鍵的CONSTRAINT名稱陣列,$j爲1開始的數字,也可以使用欄位的名稱。
4381
	#$result["primaryKey"],該資料表的主鍵
4382
	#$result["foreignKey"]["exist"],該資料表是否有foreign key,"true"代表有;"fasle"代表沒有。
4383
	#$result["foreignKey"]["constraintName"][$k],用來識別外鍵的CONSTRAINT名稱陣列,$k爲1開始的數字,也可以使用欄位的名稱。
4384
	#$result["foreignKey"]["columnName"][$k],外鍵的名稱陣列,$k爲1開始的數字,也可以使用欄位的名稱。
4385
	#$result["foreignKey"]["referencesTable"][$k],外鍵參照的欄位,$k爲1開始的數字,,也可用欄位的名稱來找value.
4386
	#$result["foreignKey"]["referencesColumn"][$k],外鍵參照的欄位屬於哪個資料表,$k爲1開始的數字,也可用欄位的名稱來找value.
4387
	#$result["foreignKey"]["onUpdateAction"][$i],當參照的欄位資料更新時,會怎麼同步,$i爲1開始的數字,也可用欄位的名稱來找value.
4388
	#$result["foreignKey"]["onDeleteAction"][$i],當參照的欄位資料移除時,會怎麼同步,$i爲1開始的數字,也可用欄位的名稱來找value.
4389
	#必填參數:
4390
	#$conf["dbAddress"],字串,資料庫的網路位置
4391
	$conf["dbAddress"]="";
4392
	#$conf["dbAccount"],字串,連線到資料庫要用的帳號
4393
	$conf["dbAccount"]="";連線到資料庫要用的帳號
4394
	#$conf["selectedDataBase"]字串,連線到資料庫要選擇的資料庫
4395
	$conf["selectedDataBase"]=$dbName;
4396
	#$conf["selectedDataTable"],字串,連線到資料庫要檢視的資料表
4397
	$conf["selectedDataTable"]="";
4398
	#可省略參數:
4399
	#$conf["dbPassword"],字串,連線到資料庫要用的密碼
4400
	#$conf["dbPassword"]=$dbPassword;
4401
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,預設為3306.
4402
	#$conf["dbPort"]="3306";
4403
	#參考資料:
4404
	#無.
4405
	#備註:
4406
	#如果forign key參照的是別的資料庫,將無法取得參照的資料庫名稱?
4407
	*/
4408
	public static function getTableColumnDetailInfo(&$conf){
4409
 
4410
		#初始化要回傳的內容
4411
		$result=array();
4412
 
4413
		#取得當前執行的函數名稱
4414
		$result["function"]=__FUNCTION__;
4415
 
4416
		#如果 $conf 不為陣列
4417
		if(gettype($conf)!="array"){
4418
 
4419
			#設置執行失敗
4420
			$result["status"]="false";
4421
 
4422
			#設置執行錯誤訊息
4423
			$result["error"][]="\$conf變數須為陣列形態";
4424
 
4425
			#如果傳入的參數為 null
4426
			if($conf==null){
4427
 
4428
				#設置執行錯誤訊息
4429
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
4430
 
4431
				}#if end
4432
 
4433
			#回傳結果
4434
			return $result;
4435
 
4436
			}#if end
4437
 
4438
		#檢查參數設定是否正確
4439
		#函式說明:
4440
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
4441
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4442
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
4443
		#$result["function"],當前執行的函式名稱.
4444
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
4445
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
4446
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
4447
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
4448
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
4449
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
4450
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
4451
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
4452
		#必填參數:
4453
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
4454
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
4455
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
4456
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("dbAddress","dbAccount","selectedDataBase","selectedDataTable");
4457
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
4458
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string","string");
4459
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
4460
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
4461
		#可省略參數:
4462
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
4463
		#$conf["canBeEmptyString"]="false";
4464
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或集合.
4465
		#$conf["skipableVariableCanNotBeEmpty"]=array();
4466
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
4467
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("dbPassword","dbPort");
4468
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
4469
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
4470
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
4471
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null);
4472
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
4473
		#$conf["arrayCountEqualCheck"][]=array();
4474
		#參考資料:
4475
		#array_keys=>http://php.net/manual/en/function.array-keys.php
4476
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
4477
		unset($conf["variableCheck::checkArguments"]);
4478
 
4479
		#如果檢查失敗
177 liveuser 4480
		if($checkArguments["passed"]==="false"){
3 liveuser 4481
 
4482
			#設置執行失敗識別
4483
			$result["status"]="false";
4484
 
4485
			#設置錯誤訊息陣列
4486
			$result["error"]=$checkArguments;
4487
 
4488
			#回傳結果
4489
			return $result;
4490
 
4491
			}#if end
4492
 
4493
		#如果檢查不通過
177 liveuser 4494
		if($checkArguments["passed"]==="false"){
3 liveuser 4495
 
4496
			#設置執行失敗識別
4497
			$result["status"]="false";
4498
 
4499
			#設置錯誤訊息陣列
4500
			$result["error"]=$checkArguments;
4501
 
4502
			#回傳結果
4503
			return $result;
4504
 
4505
			}#if end
4506
 
177 liveuser 4507
		#檢查資料庫 $conf["selectedDataBase"] 是否可以存取
4508
		#確認資料庫存在或可以被存取
4509
		#函式說明:
4510
		#執行mysql指令
4511
		#回傳結果:
4512
		#$result["status"],"true"為執行成功;"false"為執行失敗。
4513
		#$result["error"],錯誤訊息的陣列
4514
		#$result["function"],當前執行的涵式
4515
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
4516
		#$result["queryConn"],mysql用來查尋的連資源.
4517
		#$result["queryString"],要執行的sql內容.
4518
		#必填參數:
4519
		#$conf["dbSql"],字串,要執行sql語法
4520
		$conf["db::execMysqlQuery"]["dbSql"]="show databases;";
4521
		#可省略參數:
4522
		#$conf["dbLink"],物件,mysqli物件,由mysqli_connect()回傳的物件內容,若為數值則改用賬號密碼等資訊進行連線,反之則沿用連線物件.
4523
		#$conf["db::execMysqlQuery"]["dbLink"]=$conf["connectInformation"];
4524
		#$conf["dbAddress"],字串,爲mysql-Server的位置。
4525
		$conf["db::execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];
4526
		#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號。
4527
		$conf["db::execMysqlQuery"]["dbAccount"]=$conf["dbAccount"]; 
4528
 
4529
		#如果存在 $conf["dbPassword"]
4530
		if(isset($conf["dbPassword"])){
4531
 
4532
			#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼。
4533
			$conf["db::execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];
4534
 
4535
			}#if end
4536
 
4537
		#$conf["dbName"],字串,爲要連的資料庫名稱
4538
		#$conf["dbName"]="";
4539
 
4540
		#如果存在 $dbPort
4541
		if(isset($conf["dbPort"])){
4542
 
4543
			#$conf["dbPort"],字串,為連線到mysql-Server時對應的port,可省略,預設為3306.
4544
			$conf["db::execMysqlQuery"]["dbPort"]=$conf["dbPort"];
4545
 
4546
			}#if end
4547
 
4548
		#$conf["autoClose"],字串,"true"代表要自動斷線,預設為"true"會自動斷線
4549
		#$conf["autoClose"]="true";
4550
		#參考資料:
4551
		#無.
4552
		#備註:
4553
		#無.
4554
		$execMysqlQuery=db::execMysqlQuery($conf["db::execMysqlQuery"]);
4555
		unset($conf["db::execMysqlQuery"]);
4556
 
4557
		#如果執行失敗
4558
		if($execMysqlQuery["status"]==="false"){
4559
 
4560
			#設置連線失敗的提示
4561
			$result["error"][]="檢查資料庫可否存取出錯";
4562
 
4563
			#設置錯誤訊息
4564
			$result["error"][]=$execMysqlQuery["error"];
4565
 
4566
			#設置執行失敗
4567
			$result["status"]="false";
4568
 
4569
			#回傳結果
4570
			return $result;
4571
 
4572
			}#if end
4573
 
4574
		#解析 $execMysqlQuery["queryResource"] 看是否存在要存取的資料庫
4575
		#函式說明:
4576
		#解析 dataTableSelect($conf) 後的結果,亦即將執行sql語法後所得到的結果解析放進變數裏面
4577
		#回傳結果:
4578
		#$result["status"],執行結果"true"為成功;"false"為失敗
4579
		#$result["error"],錯誤訊息
4580
		#$result["function"],儲存當前函數名稱
4581
		#$result["dataColumnName"],為資料欄位的名稱陣列.
4582
		#$result["dataColumnName"][$i]代表第一個欄位名稱.
4583
		#$result["dataContent"],爲資料的內容陣列,第1維度的key為$conf["tableValueName"][$i],亦即第 $i+1 個欄位的名稱,若該欄位不存在,則其value為空字串;第2維度的key為第$i+1筆資料的索引.
4584
		#$result["dataCount"],爲取得的資料筆數.
4585
		#必填參數:
4586
		#$conf["sqlQueryResult"],object,爲執行sql語法所獲得的查詢結果。
4587
		$conf["db::sendQueryDataToVariabele"]["sqlQueryResult"]=$execMysqlQuery["queryResource"];
4588
		#$conf["tableValueName"],字串陣列,爲該資料表列項目的每一項名稱,須爲陣列值,若為「array("*")」則代表所有欄位.
4589
		$conf["db::sendQueryDataToVariabele"]["tableValueName"]=array("Database");
4590
		#可省略參數:
4591
		#$conf["dbAddress"],字串,爲mysql-Server的位置,目前沒有用途.
4592
		#$conf["dbAddress"]=$dbAddress;
4593
		#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號,目前沒有用途.
4594
		#$conf["dbAccount"]=$dbAccount;
4595
		#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼,目前沒有用途.
4596
		#$conf["dbPassword"]=$dbPassword;
4597
		#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,可省略,若省略則代表使用預設的3306 port,目前沒有用途.
4598
		#$conf["dbPort"]="";
4599
		#$conf["valueName"],字串陣列,爲該資料表列項目的每一項所要對應的變數名稱,預設為欄位的名稱($conf["tableValueName"]).
4600
		#$conf["valueName"]=$conf["tableValueName"];
4601
		#參考資料:
4602
		#http://www.w3school.com.cn/php/func_mysql_fetch_array.asp => 解析取得的資料表欄位時,能夠選擇回傳含有欄位名稱與數字代表的key.
4603
		#備註:
4604
		#無.
4605
		$sendQueryDataToVariabele=db::sendQueryDataToVariabele($conf["db::sendQueryDataToVariabele"]);
4606
		unset($conf["db::sendQueryDataToVariabele"]);
4607
 
4608
		#如果執行異常
4609
		if($sendQueryDataToVariabele["status"]==="false"){
4610
 
4611
			#設置連線失敗的提示
4612
			$result["error"][]="檢查資料庫可否存取出錯";
4613
 
4614
			#設置錯誤訊息
4615
			$result["error"][]=$sendQueryDataToVariabele["error"];
4616
 
4617
			#設置執行失敗
4618
			$result["status"]="false";
4619
 
4620
			#回傳結果
4621
			return $result;
4622
 
4623
			}#if end
4624
 
4625
		#檢查資料庫是否可以存取
4626
		#函式說明:
4627
		#檢查一個數值是否與陣列裏面的元素相同,找到一個相符合的元素後就會停止搜尋.
4628
		#回傳結果:
4629
		#$result["status"],"true"表示執行正確,"false"表示執行錯誤.
4630
		#$result["founded"],"true"表示有找到相同的,"false"表示沒有找到相同的.
4631
		#$result["error"],錯誤訊息
4632
		#$result["function"],當前執行的函數名稱
4633
		#$result["argv"],使用的參數
4634
		#$result["equalVarName"],相等的變數名稱或key.
4635
		#$result["equalVarValue"],相等的變數數值內容.
4636
		#必填參數:
4637
		#$conf["conditionElement"],字串,條件元素,要等於的元素內容.
4638
		$conf["search::getEqualVar"]["conditionElement"]=$conf["selectedDataBase"];
4639
		#$conf["compareElements"],字串陣列,要比對的陣列變數內容.
4640
		$conf["search::getEqualVar"]["compareElements"]=$sendQueryDataToVariabele["dataContent"]["Database"];
4641
		#可省略參數:
4642
		#無.
4643
		#參考資料:
4644
		#無.
4645
		#備註:
4646
		#無.
4647
		$getEqualVar=search::getEqualVar($conf["search::getEqualVar"]);
4648
		unset($conf["search::getEqualVar"]);
4649
 
4650
		#如果執行失敗
4651
		if($getEqualVar["status"]==="false"){
4652
 
4653
			#設置錯誤的提示
4654
			$result["error"][]="檢查資料庫可否存取出錯";
4655
 
4656
			#設置錯誤訊息
4657
			$result["error"][]=$getEqualVar["error"];
4658
 
4659
			#設置執行失敗
4660
			$result["status"]="false";
4661
 
4662
			#回傳結果
4663
			return $result;
4664
 
4665
			}#if end
4666
 
4667
		#如果無法存取資料庫
4668
		if($getEqualVar["founded"]==="false"){
4669
 
4670
			#設置錯誤的提示
4671
			$result["error"][]="資料庫(".$conf["selectedDataBase"].")無法存取";
4672
 
4673
			#設置錯誤訊息
4674
			$result["error"][]=$getEqualVar;
4675
 
4676
			#設置執行失敗
4677
			$result["status"]="false";
4678
 
4679
			#回傳結果
4680
			return $result;
4681
 
4682
			}#if end
4683
 
3 liveuser 4684
		#設置要執行的sql語法
4685
		$sql="SHOW CREATE TABLE ".$conf["selectedDataBase"].".".$conf["selectedDataTable"].";";
4686
 
4687
		#執行sql語法
4688
		#函式說明:
4689
		#執行mysql指令
177 liveuser 4690
		#回傳結果:
3 liveuser 4691
		#$result["status"],"true"為執行成功;"false"為執行失敗。
4692
		#$result["error"],錯誤訊息的陣列
4693
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
4694
		#$result["queryString"],mysql查詢的語言
4695
		#查詢號的解果,需要解析。
4696
		#必填參數:
4697
		$conf["db"]["execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
4698
		$conf["db"]["execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
4699
		$conf["db"]["execMysqlQuery"]["dbSql"]=$sql;#要執行sql語法
4700
		#可省略參數:
4701
 
4702
		#如果 $conf["dbPassword"] 有設定
4703
		if(isset($conf["dbPassword"])){
4704
 
4705
			#設定其密碼
4706
			$conf["db"]["execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
4707
 
4708
			}#if end
177 liveuser 4709
 
4710
		#如果有設定 $conf["dbPort"]
3 liveuser 4711
		if(isset($conf["dbPort"])){
4712
 
4713
			#設定 $conf["dbPort"]
4714
			$conf["db"]["execMysqlQuery"]["dbPort"]=$conf["dbPort"];
4715
 
177 liveuser 4716
			}#if end
4717
 
3 liveuser 4718
		$queryResult=db::execMysqlQuery($conf["db"]["execMysqlQuery"]);
4719
		unset($conf["db"]["execMysqlQuery"]);
4720
 
4721
		#如果有錯誤
4722
		if($queryResult["status"]=="false"){
4723
 
4724
			#設置錯誤訊息
4725
			$result["status"]="false";
4726
 
4727
			#設置錯誤提示
4728
			$result["error"]=$queryResult;
4729
 
4730
			#回傳結果
4731
			return $result;
4732
 
4733
			}#if end
4734
 
4735
		#解析mysql resource
4736
 
4737
		#初始化暫存的變數
4738
		$temp="";
4739
 
4740
		#將讀取到的資料一次只讀取一列
4741
		while($row = mysqli_fetch_array($queryResult["queryResource"])){
4742
 
4743
			#$i筆項列資料,則運行$i次。
4744
			foreach($row as $key=>$value){		
4745
 
4746
				#如果key爲"Create Table"
4747
				if($key=="Create Table"){
4748
 
4749
					#將解析的資料內容結果放進$temp變數裏面
4750
					$temp=$value;	
4751
 
4752
					}#if end
4753
 
4754
				}#foreach end
4755
 
4756
			}#while end
4757
 
4758
		#逐行解析$temp
4759
		#函式說明:
4760
		#將多行內容的字串,依行切割
4761
		#回傳的參數:
4762
		#$result["status"],執行成功與否,若爲"true",代表執行成功,若爲"false"代表執失敗。
4763
		#$result["error"],錯誤訊息陣列.
4764
		#$result["function"],當前執行的函數名稱.#$result["oriStr"],要分割的原始字串內容
4765
		#$result["oriStr"],要分割的原始字串內容
4766
		#$result["dataArray"],爲以行分割好的字串陣列內容,$result["dataArray"][$i]爲第($i+1)行的內容。
4767
		#$result["dataCounts"],爲總共分成幾行
4768
		#必填參數:
4769
		$conf["stringProcess"]["spiltMutiLineString"]["stringIn"]=$temp;#要處理的多行文字字串。
4770
		#參考資料來源:
4771
		#http://dragonspring.pixnet.net/blog/post/33146613-%5blinux%5d%5btips%5d%e5%8e%bb%e9%99%a4dos%e6%aa%94%e6%a1%88%e8%a1%8c%e5%b0%be%e7%9a%84%5em => windows 與 linux 換行字元
4772
		$everyLine=stringProcess::spiltMutiLineString($conf["stringProcess"]["spiltMutiLineString"]);
4773
		unset($conf["stringProcess"]["spiltMutiLineString"]);
4774
 
4775
		#如果 逐行解析$temp 失敗
4776
		if($everyLine["status"]==="false"){
4777
 
4778
			#設置錯誤訊息
4779
			$result["status"]="false";
4780
 
4781
			#設置錯誤提示
4782
			$result["error"]=$everyLine;
4783
 
4784
			#回傳結果
4785
			return $result;
4786
 
4787
			}#if end
4788
 
4789
		#針對每列內容
4790
		foreach($everyLine["dataArray"] as $no => $line){
4791
 
4792
			#函式說明:
4793
			#取得符合特定字首與字尾的字串
4794
			#回傳結果::
4795
			#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
4796
			#$result["function"],當前執行的函數名稱.
4797
			#$result["error"],錯誤訊息陣列.
4798
			#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
4799
			#$result["returnString"],爲符合字首條件的字串內容。
4800
			#$result["argu"],使用的參數.
4801
			#必填參數:
4802
			#$conf["checkString"],字串,要檢查的字串.
4803
			$conf["search::getMeetConditionsString"]["checkString"]=$line;
4804
			#可省略參數:
4805
			#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
4806
			$conf["search::getMeetConditionsString"]["frontWord"]="/*";
4807
			#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
4808
			#$conf["tailWord"]="";
4809
			#參考資料:
4810
			#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
4811
			$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
4812
			unset($conf["search::getMeetConditionsString"]);			
4813
 
4814
			#如果執行失敗
4815
			if($getMeetConditionsString["status"]==="false"){
4816
 
4817
				#設置錯誤訊息
4818
				$result["status"]="false";
4819
 
4820
				#設置錯誤提示
4821
				$result["error"]=$getMeetConditionsString;
4822
 
4823
				#回傳結果
4824
				return $result;
4825
 
4826
				}#if end
4827
 
4828
			#如果執行失敗
4829
			if($getMeetConditionsString["founded"]==="true"){
4830
 
4831
				#while loop
4832
				while(true){
4833
 
4834
					#移除 partion 描述 - start 
4835
 
4836
					#如果存在該列
4837
					if(isset($everyLine["dataArray"][$no])){
4838
 
4839
						#卸除之
4840
						unset($everyLine["dataArray"][$no]);
4841
 
4842
						#行數加1
4843
						$no++;
4844
 
4845
						}#if end
4846
 
4847
					#移除 partion 描述 - end
4848
 
4849
					#反之
4850
					else{
4851
 
4852
						//end while
4853
						break;
4854
 
4855
						}#else end						
4856
 
4857
					}#while loop end
4858
 
4859
				#end foreach
4860
				break;
4861
 
4862
				}#if end
4863
 
4864
			}#foreach end
4865
 
4866
		#重新更新總行數
4867
		$everyLine["dataCounts"]=count($everyLine["dataArray"]);
4868
 
4869
		#取得原始輸入的多行字串
4870
		$result["oriInput"]=$everyLine["oriStr"];
4871
 
4872
		#取得原始的每一行
4873
		$result["everyLine"]=$everyLine["dataArray"];
4874
 
4875
		#取得資料表名稱
4876
		#函式說明:
4877
		#將固定格式的字串分開,並回傳分開的結果。
4878
		#回傳的參數:
4879
		#$result["oriStr"],要分割的原始字串內容
4880
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
4881
		#$result["dataCounts"],爲總共分成幾段
4882
		#必填參數:
4883
		$conf["stringProcess"]["spiltString"]["stringIn"]=$everyLine["dataArray"][0];#要處理的字串。
4884
		$conf["stringProcess"]["spiltString"]["spiltSymbol"]="`";#爲以哪個符號作爲分割
4885
		$tableName=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
4886
		unset($conf["stringProcess"]["spiltString"]);
4887
 
4888
		#如果 取得資料表名稱 失敗
4889
		if($tableName["status"]=="false"){
4890
 
4891
			#設置錯誤訊息
4892
			$result["status"]="false";
4893
 
4894
			#設置錯誤提示
4895
			$result["error"]=$tableName;
4896
 
4897
			#回傳結果
4898
			return $result;
4899
 
4900
			}#if end
4901
 
4902
		#取得資料表名稱
4903
		$result["tableName"]=$tableName["dataArray"][1];
4904
 
4905
		#取得資料表用的 ENGINE 與 DEFAULT CHARSET",亦即最後一行的內容.
4906
		#函式說明:
4907
		#將固定格式的字串分開,並回傳分開的結果。
4908
		#回傳的參數:
4909
		#$result["oriStr"],要分割的原始字串內容
4910
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
4911
		#$result["dataCounts"],爲總共分成幾段
4912
		#必填參數:
4913
		$conf["stringProcess"]["spiltString"]["stringIn"]=$everyLine["dataArray"][$everyLine["dataCounts"]-1];#要處理的字串。
4914
		$conf["stringProcess"]["spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
4915
		$engineAndCharset=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
4916
		unset($conf["stringProcess"]["spiltString"]);
4917
 
4918
		#如果 取得資料表用的 ENGINE與DEFAULT CHARSET" 失敗
4919
		if($engineAndCharset["status"]=="false"){
4920
 
4921
			#設置錯誤訊息
4922
			$result["status"]="false";
4923
 
4924
			#設置錯誤提示
4925
			$result["error"]=$engineAndCharset;
4926
 
4927
			#回傳結果
4928
			return $result;
4929
 
4930
			}#if end
4931
 
4932
		#get engine string
4933
		$engine=$engineAndCharset["dataArray"][1];
4934
 
4935
		#函式說明:
4936
		#將固定格式的字串分開,並回傳分開的結果。
4937
		#回傳的參數:
4938
		#$result["oriStr"],要分割的原始字串內容
4939
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
4940
		#$result["dataCounts"],爲總共分成幾段
4941
		#必填參數:
4942
		$conf["stringProcess"]["spiltString"]["stringIn"]=$engine;#要處理的字串。
4943
		$conf["stringProcess"]["spiltString"]["spiltSymbol"]="=";#爲以哪個符號作爲分割
4944
		$engine=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
4945
		unset($conf["stringProcess"]["spiltString"]);
4946
 
4947
		#如果 取得資料表用的 ENGINE與DEFAULT CHARSET" 失敗
4948
		if($engine["status"]=="false"){
4949
 
4950
			#設置錯誤訊息
4951
			$result["status"]="false";
4952
 
4953
			#設置錯誤提示
4954
			$result["error"]=$engine;
4955
 
4956
			#回傳結果
4957
			return $result;
4958
 
4959
			}#if end
4960
 
4961
		#如果不存在 engine
4962
		if(!isset($engine["dataArray"][1])){
4963
 
4964
			#設置錯誤訊息
4965
			$result["status"]="false";
4966
 
4967
			#設置錯誤提示
4968
			$result["error"]=$engine;
4969
 
4970
			return $result;
4971
 
4972
			}#if end
4973
 
4974
		#get engine
4975
		$result["engine"]=$engine["dataArray"][1];
4976
 
4977
		#取得字元編碼
4978
		#函式說明:
4979
		#將固定格式的字串分開,並回傳分開的結果。
4980
		#回傳的參數:
4981
		#$result["oriStr"],要分割的原始字串內容
4982
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
4983
		#$result["dataCounts"],爲總共分成幾段
4984
		#必填參數:
4985
		$conf["stringProcess"]["spiltString"]["stringIn"]=$engineAndCharset["oriStr"];#要處理的字串。
4986
		$conf["stringProcess"]["spiltString"]["spiltSymbol"]="CHARSET=";#爲以哪個符號作爲分割
4987
		$charset=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
4988
		unset($conf["stringProcess"]["spiltString"]);
4989
 
4990
		#如果 取得字元編碼 失敗
4991
		if($charset["status"]=="false"){
4992
 
4993
			#設置錯誤訊息
4994
			$result["status"]="false";
4995
 
4996
			#設置錯誤提示
4997
			$result["error"]=$charset;
4998
 
4999
			#回傳結果
5000
			return $result;
5001
 
5002
			}#if end
5003
 
5004
		#取得字元編碼
5005
		#函式說明:
5006
		#將固定格式的字串分開,並回傳分開的結果。
5007
		#回傳的參數:
5008
		#$result["oriStr"],要分割的原始字串內容
5009
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
5010
		#$result["dataCounts"],爲總共分成幾段
5011
		#必填參數:
5012
		$conf["stringProcess"]["spiltString"]["stringIn"]=$charset["dataArray"][1];#要處理的字串。
5013
		$conf["stringProcess"]["spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
5014
		$charset=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
5015
		unset($conf["stringProcess"]["spiltString"]);
5016
 
5017
		#如果 取得字元編碼 失敗
5018
		if($charset["status"]=="false"){
5019
 
5020
			#設置錯誤訊息
5021
			$result["status"]="false";
5022
 
5023
			#設置錯誤提示
5024
			$result["error"]=$charset;
5025
 
5026
			#回傳結果
5027
			return $result;
5028
 
5029
			}#if end
5030
 
5031
		#取得字元編碼
5032
		$result["charset"]=$charset["dataArray"][0];
5033
 
5034
		#初始化,儲存鍵值定義的陣列變數
5035
		$keyDefine=array();
5036
 
5037
		#逐行取得各欄位詳細資料
5038
		for($i=1;$i<$everyLine["dataCounts"]-1;$i++){
5039
 
5040
			#檢查開頭是否爲 "  `"
5041
 			#函式說明:
5042
			#取得符合特定字首與字尾的字串
5043
			#回傳結果::
5044
			#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
5045
			#$result["function"],當前執行的函數名稱.
5046
			#$result["error"],錯誤訊息陣列.
5047
			#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
5048
			#$result["returnString"],爲符合字首條件的字串內容。
5049
			#必填參數:
5050
			#$conf["checkString"],字串,要檢查的字串.
5051
			$conf["search::getMeetConditionsString"]["checkString"]=$everyLine["dataArray"][$i];
5052
			#可省略參數:
5053
			#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
5054
			$conf["search::getMeetConditionsString"]["frontWord"]="  `";
5055
			#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
5056
			#$conf["tailWord"]="";
5057
			#參考資料:
5058
			#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
5059
			$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
5060
			unset($conf["search::getMeetConditionsString"]);
5061
 
5062
			#如果分割失敗
5063
			if($getMeetConditionsString["status"]==="false"){
5064
 
5065
				#設置錯誤訊息
5066
				$result["status"]="false";
5067
 
5068
				#設置錯誤提示
5069
				$result["error"]=$getMeetConditionsString;
5070
 
5071
				#回傳結果
5072
				return $result;
5073
 
5074
				}#if end
5075
 
5076
			#如果有符合的前戳
5077
			if($getMeetConditionsString["founded"]==="true"){
5078
 
5079
				#函式說明:
5080
				#將固定格式的字串分開,並回傳分開的結果。
5081
				#回傳的參數:
5082
				#$result["oriStr"],要分割的原始字串內容
5083
				#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
5084
				#$result["dataCounts"],爲總共分成幾段
5085
				#必填參數:
5086
				$conf["stringProcess"]["spiltString"]["stringIn"]=$everyLine["dataArray"][$i];#要處理的字串。
5087
				$conf["stringProcess"]["spiltString"]["spiltSymbol"]="`";#爲以哪個符號作爲分割
5088
				$columnString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
5089
				unset($conf["stringProcess"]["spiltString"]);
5090
 
5091
				#如果 分割字串失敗 失敗
5092
				if($columnString["status"]==="false"){
5093
 
5094
					#設置錯誤訊息
5095
					$result["status"]="false";
5096
 
5097
					#設置錯誤提示
5098
					$result["error"]=$columnString;
5099
 
5100
					#回傳結果
5101
					return $result;
5102
 
5103
					}#if end
5104
 
5105
				#取得欄位名稱
5106
				$result["columnName"][$i]=$columnString["dataArray"][1];
5107
				$result["columnName"][$result["columnName"][$i]]=$result["columnName"][$i];
5108
 
5109
				#函式說明:
5110
				#將固定格式的字串分開,並回傳分開的結果。
5111
				#回傳的參數:
5112
				#$result["oriStr"],要分割的原始字串內容
5113
				#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
5114
				#$result["dataCounts"],爲總共分成幾段
5115
				#必填參數:
5116
				$conf["stringProcess"]["spiltString"]["stringIn"]=$columnString["dataArray"][2];#要處理的字串。
5117
				$conf["stringProcess"]["spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
5118
				$columnString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
5119
				unset($conf["stringProcess"]["spiltString"]);
5120
 
5121
				#debug
5122
				#var_dump($columnString);
5123
 
5124
				#如果 分割字串失敗 失敗
5125
				if($columnString["status"]==="false"){
5126
 
5127
					#設置錯誤訊息
5128
					$result["status"]="false";
5129
 
5130
					#設置錯誤提示
5131
					$result["error"]=$columnString;
5132
 
5133
					#回傳結果
5134
					return $result;
5135
 
5136
					}#if end
5137
 
5138
				#取得欄位屬性與長度
5139
				$result["columnVarTypeAndLengthLimit"][$i]=$columnString["dataArray"][0];
5140
				$result["columnVarTypeAndLengthLimit"][$result["columnName"][$i]]=$columnString["dataArray"][0];
5141
 
5142
				}#if end
5143
 
5144
			#函式說明:
5145
			#將固定格式的字串分開,並回傳分開的結果。
5146
			#回傳的參數:
5147
			#$result["oriStr"],要分割的原始字串內容
5148
			#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
5149
			#$result["dataCounts"],爲總共分成幾段
5150
			#必填參數:
5151
			$conf["stringProcess"]["spiltString"]["stringIn"]=$everyLine["dataArray"][$i];#要處理的字串。
5152
			$conf["stringProcess"]["spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
5153
			$columnString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
5154
			unset($conf["stringProcess"]["spiltString"]);	
5155
 
5156
			#如果 分割字串失敗 失敗
5157
			if($columnString["status"]=="false"){
5158
 
5159
				#設置錯誤訊息
5160
				$result["status"]="false";
5161
 
5162
				#設置錯誤提示
5163
				$result["error"]=$columnString;
5164
 
5165
				#回傳結果
5166
				return $result;
5167
 
5168
				}#if end
5169
 
5170
			#如果分割字串失敗
5171
			if($columnString["status"]==="false"){
5172
 
5173
				#設置執行失敗
5174
				$reuslt["status"]="false";
5175
 
5176
				#設置錯誤訊息
5177
				$result["error"]=$columnString;
5178
 
5179
				#回傳結果
5180
				return $result;
5181
 
5182
				}#if end
5183
 
5184
			#debug
5185
			#var_dump($columnString);
5186
 
5187
			#判斷該 $columnString["dataArray"][2]是一般名稱,還是鍵值定義。
5188
			#函式說明:
5189
			#檢查字串裡面有無指定的關鍵字
5190
			#回傳結果::
5191
			#$result["status"],"true"代表執行成功,"false"代表執行失敗。
5192
			#$result["error"],錯誤訊息
5193
			#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
5194
			#必填參數:
5195
			$conf["search"]["findKeyWord"]["keyWord"]="`";#想要搜尋的關鍵字
5196
			$conf["search"]["findKeyWord"]["string"]=$columnString["dataArray"][2];#要被搜尋的字串內容
5197
			#可省略參數:
5198
			#$conf["search"]["findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
5199
			$searchResult=search::findKeyWord($conf["search"]["findKeyWord"]);
5200
			unset($conf["search"]["findKeyWord"]);
5201
 
5202
			#如果尋找失敗
5203
			if($searchResult["status"]==="false"){
5204
 
5205
				#設置執行失敗
5206
				$reuslt["status"]="false";
5207
 
5208
				#設置錯誤訊息
5209
				$result["error"]=$columnString;
5210
 
5211
				#回傳結果
5212
				return $result;
5213
 
5214
				}#if end
5215
 
5216
			#如果有找到,且沒有長度與形態資訊
5217
			if($searchResult["founded"]==="true" && !isset($result["columnVarTypeAndLengthLimit"][$i]) ){
5218
 
5219
				#代表是屬於鍵值的定義
5220
				$keyDefine[]=$everyLine["dataArray"][$i];
5221
 
5222
				#var_dump($keyDefine);
5223
 
5224
				#跳過該行內容
5225
				continue;
5226
 
5227
				}#if end
5228
 
5229
			#判斷該 $columnString["dataArray"][0]是否為 "CONSTRAINT" 或 "KEY"
5230
			if($columnString["dataArray"][0]==="CONSTRAINT" || $columnString["dataArray"][0]==="KEY"){
5231
 
5232
				#代表是屬於定義 外鍵 的 CONSTRAINT 定義
5233
				$keyDefine[]=$everyLine["dataArray"][$i];
5234
 
5235
				#跳過該行內容
5236
				continue;
5237
 
5238
				}#if end
5239
 
5240
			#函式說明:
5241
			#處理字串避免網頁出錯
5242
			#回傳結果::
5243
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5244
			#$result["function"],當前執行的函數.
5245
			#$result["content"],爲處理好的字串.
5246
			#$result["error"],錯誤訊息陣列.
5247
			#必填參數:
5248
			$conf["stringProcess"]["correctCharacter"]["stringIn"]=$columnString["dataArray"][0];#爲要處理的字串
5249
			#可省略參數:
5250
			$conf["stringProcess"]["correctCharacter"]["selectedCharacter"]=array("`");#爲被選擇要處理的字串/字元,須爲陣列值。
5251
			#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
5252
			#$conf["stringProcess"]["correctCharacter"]["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
5253
			$correctCharacterResult=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);
5254
			unset($conf["stringProcess"]);
5255
 
5256
			#如果處理字串失敗
5257
			if($correctCharacterResult["status"]==="false"){
5258
 
5259
				#設置執行失敗
5260
				$reuslt["status"]="false";
5261
 
5262
				#設置錯誤訊息
5263
				$result["error"]=$correctCharacterResult;
5264
 
5265
				#回傳結果
5266
				return $result;
5267
 
5268
				}#if end
5269
 
5270
			#如果不是 "CONSTRAINT" 且 存在 $result["columnVarTypeAndLengthLimit"][$i]
5271
			if($correctCharacterResult["content"]!=="CONSTRAINT" && isset($result["columnVarTypeAndLengthLimit"][$i])){
5272
 
5273
				#取得欄位名稱,遇到有空格的欄位名稱會出錯
5274
				#$result["columnName"][$i]=$correctCharacterResult["content"];
5275
				#$result["columnName"][$correctCharacterResult["content"]]=$correctCharacterResult["content"];
5276
 
5277
				#取得欄位變數形態與長度限制,遇到有空格的欄位名稱會出錯
5278
				#$result["columnVarTypeAndLengthLimit"][$i]=$columnString["dataArray"][1];
5279
				#$result["columnVarTypeAndLengthLimit"][$result["columnName"][$i]]=$columnString["dataArray"][1];
5280
 
5281
				#檢查是否有欄位的長度限制關鍵字 "(" ")"
5282
				#函式說明:
5283
				#檢查一個字串裡面是否有多個關鍵字
5284
				#回傳結果::
5285
				#$result["status"],"true"代表執行成功,"false"代表執行失敗。
5286
				#$result["error"],錯誤訊息
5287
				#$result["founded"],是否找到所有的關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
5288
				#必填參數:
5289
				$conf["search"]["findManyKeyWords"]["keyWords"]=array("(",")");#想要搜尋的關鍵字
5290
				$conf["search"]["findManyKeyWords"]["string"]=$result["columnVarTypeAndLengthLimit"][$i];#要被搜尋的字串內容
5291
				#可省略參數:
5292
				#$conf["search"]["findManyKeyWords"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
5293
				$lengthLimitKeyWordSearchResult=search::findManyKeyWords($conf["search"]["findManyKeyWords"]);
5294
				unset($conf["search"]["findManyKeyWords"]);
5295
 
5296
				#如果  檢查是否有欄位的長度限制關鍵字 "(" ")" 失敗
5297
				if($lengthLimitKeyWordSearchResult["status"]==="false"){
5298
 
5299
					#設置執行失敗
5300
					$reuslt["status"]="false";
5301
 
5302
					#設置錯誤訊息
5303
					$result["error"]=$lengthLimitKeyWordSearchResult;
5304
 
5305
					#回傳結果
5306
					return $result;
5307
 
5308
					}#if end
5309
 
5310
				#如果 $lengthLimitKeyWordSearchResult["founded"] 等於 "true"
5311
				if($lengthLimitKeyWordSearchResult["foundedAll"]==="true"){
5312
 
5313
					#代表有長度限制的字串
5314
 
5315
					#以"("為關鍵字進行分割
5316
					#函式說明:
5317
					#將固定格式的字串分開,並回傳分開的結果。
5318
					#回傳的參數:
5319
					#$result["oriStr"],要分割的原始字串內容
5320
					#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
5321
					#$result["dataCounts"],爲總共分成幾段
5322
					#必填參數:
5323
					$conf["stringProcess"]["spiltString"]["stringIn"]=$result["columnVarTypeAndLengthLimit"][$i];#要處理的字串。
5324
					$conf["stringProcess"]["spiltString"]["spiltSymbol"]="(";#爲以哪個符號作爲分割
5325
					$columnTypeAndLengthLimitSpiledStr=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
5326
					unset($conf["stringProcess"]["spiltString"]);
5327
 
5328
					#如果分割字串失敗
5329
					if($columnTypeAndLengthLimitSpiledStr["status"]==="false"){
5330
 
5331
						#設置執行失敗
5332
						$reuslt["status"]="false";
5333
 
5334
						#設置錯誤訊息
5335
						$result["error"]=$columnTypeAndLengthLimitSpiledStr;
5336
 
5337
						#回傳結果
5338
						return $result;
5339
 
5340
						}#if end
5341
 
5342
					#取得欄位變數型別
5343
					$result["columnVarType"][$i]=$columnTypeAndLengthLimitSpiledStr["dataArray"][0];
5344
					$result["columnVarType"][$result["columnName"][$i]]=$columnTypeAndLengthLimitSpiledStr["dataArray"][0];
5345
 
5346
					#以")"為關鍵字進行分割
5347
					#函式說明:
5348
					#將固定格式的字串分開,並回傳分開的結果。
5349
					#回傳的參數:
5350
					#$result["oriStr"],要分割的原始字串內容
5351
					#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
5352
					#$result["dataCounts"],爲總共分成幾段
5353
					#必填參數:
5354
					$conf["stringProcess"]["spiltString"]["stringIn"]=$columnTypeAndLengthLimitSpiledStr["dataArray"][1];#要處理的字串。
5355
					$conf["stringProcess"]["spiltString"]["spiltSymbol"]=")";#爲以哪個符號作爲分割
5356
					$columnTypeAndLengthLimitSpiledStr=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
5357
					unset($conf["stringProcess"]["spiltString"]);
5358
 
5359
					#如果分割字串失敗
5360
					if($columnTypeAndLengthLimitSpiledStr["status"]==="false"){
5361
 
5362
						#設置執行失敗
5363
						$reuslt["status"]="false";
5364
 
5365
						#設置錯誤訊息
5366
						$result["error"]=$columnTypeAndLengthLimitSpiledStr;
5367
 
5368
						#回傳結果
5369
						return $result;
5370
 
5371
						}#if end
5372
 
5373
					#取得欄位的長度限制
5374
					$result["columnVarLengthLimit"][$i]=$columnTypeAndLengthLimitSpiledStr["dataArray"][0];
5375
					$result["columnVarLengthLimit"][$result["columnName"][$i]]=$columnTypeAndLengthLimitSpiledStr["dataArray"][0];
5376
 
5377
					}#if end
5378
 
5379
				#反之代表沒有長度限制的字串
5380
				else{
5381
 
5382
					#取得欄位變數型別
5383
					$result["columnVarType"][$i]=$result["columnVarTypeAndLengthLimit"][$i];
5384
					$result["columnVarType"][$result["columnName"][$i]]=$result["columnVarTypeAndLengthLimit"][$i];
5385
 
5386
					#取得欄位變數長度限制
5387
					$result["columnVarLengthLimit"][$i]="";
5388
					$result["columnVarLengthLimit"][$result["columnName"][$i]]="";
5389
 
5390
					}#else
5391
 
5392
				#欄位是否不可為null
5393
				#函式說明:
5394
				#檢查字串裡面有無指定的關鍵字
5395
				#回傳結果::
5396
				#$result["status"],"true"代表執行成功,"false"代表執行失敗。
5397
				#$result["error"],錯誤訊息
5398
				#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
5399
				#必填參數:
5400
				$conf["search"]["findKeyWord"]["keyWord"]="NOT NULL";#想要搜尋的關鍵字
5401
				$conf["search"]["findKeyWord"]["string"]=$everyLine["dataArray"][$i];#要被搜尋的字串內容
5402
				#可省略參數:
5403
				#$conf["search"]["findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
5404
				$searchResult=search::findKeyWord($conf["search"]["findKeyWord"]);
5405
				unset($conf["search"]["findKeyWord"]);
5406
 
5407
				#如果取得 欄位是否不可為null 失敗
5408
				if($searchResult["status"]==="false"){
5409
 
5410
					#設置執行失敗
5411
					$reuslt["status"]="false";
5412
 
5413
					#設置錯誤訊息
5414
					$result["error"]=$searchResult;
5415
 
5416
					#回傳結果
5417
					return $result;
5418
 
5419
					}#if end
5420
 
5421
				#如果有找到 NOT NULL
5422
				if($searchResult["founded"]==="true"){
5423
 
5424
					$result["columnNotNull"][$i]="true";
5425
					$result["columnNotNull"][$result["columnName"][$i]]="true";
5426
 
5427
					}#if end
5428
 
5429
				#反之沒有找到 NOT NULL
5430
				else{
5431
 
5432
					$result["columnNotNull"][$i]="false";
5433
					$result["columnNotNull"][$result["columnName"][$i]]="false";
5434
 
5435
					}#else end
5436
 
5437
				#欄位是否會自動加1
5438
				#函式說明:
5439
				#檢查字串裡面有無指定的關鍵字
5440
				#回傳結果::
5441
				#$result["status"],"true"代表執行成功,"false"代表執行失敗。
5442
				#$result["error"],錯誤訊息
5443
				#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
5444
				#必填參數:
5445
				$conf["search"]["findKeyWord"]["keyWord"]="AUTO_INCREMENT";#想要搜尋的關鍵字
5446
				$conf["search"]["findKeyWord"]["string"]=$everyLine["dataArray"][$i];#要被搜尋的字串內容
5447
				#可省略參數:
5448
				#$conf["search"]["findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
5449
				$searchResult=search::findKeyWord($conf["search"]["findKeyWord"]);
5450
				unset($conf["search"]["findKeyWord"]);
5451
 
5452
				#如果取得 欄位是否會自動加1 失敗
5453
				if($searchResult["status"]==="false"){
5454
 
5455
					#設置執行失敗
5456
					$reuslt["status"]="false";
5457
 
5458
					#設置錯誤訊息
5459
					$result["error"]=$searchResult;
5460
 
5461
					#回傳結果
5462
					return $result;
5463
 
5464
					}#if end
5465
 
5466
				#如果有找到 AUTO_INCREMENT
5467
				if($searchResult["founded"]==="true"){
5468
 
5469
					$result["columnAutoIncrement"][$i]="true";
5470
					$result["columnAutoIncrement"][$result["columnName"][$i]]="true";
5471
 
5472
					}#if end
5473
 
5474
				#反之沒有 AUTO_INCREMENT
5475
				else{
5476
 
5477
					$result["columnAutoIncrement"][$i]="false";
5478
					$result["columnAutoIncrement"][$result["columnName"][$i]]="false";
5479
 
5480
					}#else end
5481
 
5482
				#欄位是否有預設內容
5483
 
5484
				#函式說明:
5485
				#檢查字串裡面有無指定的關鍵字
5486
				#回傳結果::
5487
				#$result["status"],"true"代表執行成功,"false"代表執行失敗。
5488
				#$result["error"],錯誤訊息
5489
				#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
5490
				#必填參數:
5491
				$conf["search"]["findKeyWord"]["keyWord"]="DEFAULT";#想要搜尋的關鍵字
5492
				$conf["search"]["findKeyWord"]["string"]=$everyLine["dataArray"][$i];#要被搜尋的字串內容
5493
				#可省略參數:
5494
				#$conf["search"]["findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
5495
				$searchResult=search::findKeyWord($conf["search"]["findKeyWord"]);
5496
				unset($conf["search"]["findKeyWord"]);
5497
 
5498
				#如果取得 欄位是否有預設內容 失敗
5499
				if($searchResult["status"]==="false"){
5500
 
5501
					#設置執行失敗
5502
					$reuslt["status"]="false";
5503
 
5504
					#設置錯誤訊息
5505
					$result["error"]=$searchResult;
5506
 
5507
					#回傳結果
5508
					return $result;
5509
 
5510
					}#if end
5511
 
5512
				#如果有找到 DEFAULT
5513
				if($searchResult["founded"]==="true"){
5514
 
5515
					#函式說明:
5516
					#將固定格式的字串分開,並回傳分開的結果。
5517
					#回傳的參數:
5518
					#$result["oriStr"],要分割的原始字串內容
5519
					#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
5520
					#$result["dataCounts"],爲總共分成幾段
5521
					#必填參數:
5522
					$conf["stringProcess"]["spiltString"]["stringIn"]=$everyLine["dataArray"][$i];#要處理的字串。
5523
					$conf["stringProcess"]["spiltString"]["spiltSymbol"]="DEFAULT ";#爲以哪個符號作爲分割
5524
					$defaultString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
5525
					unset($conf["stringProcess"]["spiltString"]);
5526
 
5527
					#如果分割字串失敗
5528
					if($defaultString["status"]=="false"){
5529
 
5530
						#設置執行失敗
5531
						$result["status"]="false";
5532
 
5533
						#設置執行錯誤訊息
5534
						$result["error"]=$defaultString;
5535
 
5536
						#回傳結果
5537
						return $result;
5538
 
5539
						}#if end
5540
 
5541
					#函式說明:
5542
					#將固定格式的字串分開,並回傳分開的結果。
5543
					#回傳的參數:
5544
					#$result["oriStr"],要分割的原始字串內容
5545
					#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
5546
					#$result["dataCounts"],爲總共分成幾段
5547
					#必填參數:
5548
					$conf["stringProcess"]["spiltString"]["stringIn"]=$defaultString["dataArray"][1];#要處理的字串。
5549
					$conf["stringProcess"]["spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
5550
					$defaultString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
5551
					unset($conf["stringProcess"]["spiltString"]);
5552
 
5553
					#如果分割字串失敗
5554
					if($defaultString["status"]=="false"){
5555
 
5556
						#設置執行失敗
5557
						$result["status"]="false";
5558
 
5559
						#設置執行錯誤訊息
5560
						$result["error"]=$defaultString;
5561
 
5562
						#回傳結果
5563
						return $result;
5564
 
5565
						}#if end
5566
 
5567
					#將「,」,「'」去掉 
5568
					#函式說明:
5569
					#處理字串避免網頁出錯
5570
					#回傳結果::
5571
					#$result,爲處理好的字串。
5572
					#必填參數:
5573
					$conf["stringProcess"]["correctCharacter"]["stringIn"]=$defaultString["dataArray"][0];#爲要處理的字串
5574
					#可省略參數:
5575
					$conf["stringProcess"]["correctCharacter"]["selectedCharacter"]=array(",","'");#爲被選擇要處理的字串/字元,須爲陣列值。
5576
					#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
5577
					#$conf["stringProcess"]["correctCharacter"]["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
5578
					$thisColumnDefaultValue=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);
5579
					unset($conf["stringProcess"]["correctCharacter"]);
5580
 
5581
					#如果處理字串失敗
5582
					if($thisColumnDefaultValue["status"]=="false"){
5583
 
5584
						#設置執行不正常
5585
						$result["status"]="false";
5586
 
5587
						#設置錯誤訊息
5588
						$result["error"]=$thisColumnDefaultValue;
5589
 
5590
						#回傳結果
5591
						return $result;
5592
 
5593
						}#if end
5594
 
5595
					#取得該欄位的預設內容
5596
					$result["columnDefault"][$i]=$thisColumnDefaultValue["content"];
5597
					$result["columnDefault"][$result["columnName"][$i]]=$thisColumnDefaultValue["content"];
5598
 
5599
					}#if end
5600
 
5601
				#反之沒有找到 DEFAULT	
5602
				else{
5603
 
5604
					$result["columnDefault"][$i]="沒有指定";
5605
					$result["columnDefault"][$result["columnName"][$i]]=$result["columnDefault"][$i];
5606
 
5607
					}#else end
5608
 
5609
				#如果有欄位內有 ON UPDATE 的字樣
5610
 
5611
				#函式說明:
5612
				#檢查字串裡面有無指定的關鍵字
5613
				#回傳結果::
5614
				#$result["status"],"true"代表執行成功,"false"代表執行失敗。
5615
				#$result["error"],錯誤訊息
5616
				#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
5617
				#必填參數:
5618
				$conf["search"]["findKeyWord"]["keyWord"]="ON UPDATE";#想要搜尋的關鍵字
5619
				$conf["search"]["findKeyWord"]["string"]=$everyLine["dataArray"][$i];#要被搜尋的字串內容
5620
				#可省略參數:
5621
				#$conf["search"]["findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
5622
				$searchResult=search::findKeyWord($conf["search"]["findKeyWord"]);
5623
				unset($conf["search"]["findKeyWord"]);
5624
 
5625
				#如果尋找 欄位內是否有 ON UPDATE 的字樣失敗
5626
				if($searchResult["status"]==="false"){
5627
 
5628
					#設置執行失敗
5629
					$result["status"]="false";
5630
 
5631
					#設置執行錯誤訊息
5632
					$result["error"]=$searchResult;
5633
 
5634
					#回傳結果
5635
					return $result;
5636
 
5637
					}#if end
5638
 
5639
				#如果有找到 ON UPDATE
5640
				if($searchResult["founded"]==="true"){ 
5641
 
5642
					#函式說明:
5643
					#將固定格式的字串分開,並回傳分開的結果。
5644
					#回傳的參數:
5645
					#$result["oriStr"],要分割的原始字串內容
5646
					#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
5647
					#$result["dataCounts"],爲總共分成幾段
5648
					#必填參數:
5649
					$conf["stringProcess"]["spiltString"]["stringIn"]=$everyLine["dataArray"][$i];#要處理的字串。
5650
					$conf["stringProcess"]["spiltString"]["spiltSymbol"]="ON UPDATE ";#爲以哪個符號作爲分割
5651
					$onUpdateString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
5652
					unset($conf["stringProcess"]["spiltString"]);
5653
 
5654
					#函式說明:
5655
					#將固定格式的字串分開,並回傳分開的結果。
5656
					#回傳的參數:
5657
					#$result["oriStr"],要分割的原始字串內容
5658
					#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
5659
					#$result["dataCounts"],爲總共分成幾段
5660
					#必填參數:
5661
					$conf["stringProcess"]["spiltString"]["stringIn"]=$onUpdateString["dataArray"][1];#要處理的字串。
5662
					$conf["stringProcess"]["spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
5663
					$onUpdateString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
5664
					unset($conf["stringProcess"]["spiltString"]);
5665
 
5666
					#如果分割字串失敗
5667
					if($onUpdateString["status"]=="false"){
5668
 
5669
						#設置執行不正常
5670
						$result["status"]="false";
5671
 
5672
						#設置錯誤訊息
5673
						$result["error"]=$onUpdateString;
5674
 
5675
						#回傳結果
5676
						return $result;
5677
 
5678
						}#if end
5679
 
5680
					#將「,」去掉 
5681
					#函式說明:
5682
					#處理字串避免網頁出錯
5683
					#回傳結果::
5684
					#$result,爲處理好的字串。
5685
					#必填參數:
5686
					$conf["stringProcess"]["correctCharacter"]["stringIn"]=$onUpdateString["dataArray"][0];#爲要處理的字串
5687
					#可省略參數:
5688
					$conf["stringProcess"]["correctCharacter"]["selectedCharacter"]=array(",");#爲被選擇要處理的字串/字元,須爲陣列值。
5689
					#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
5690
					#$conf["stringProcess"]["correctCharacter"]["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
5691
					$columnOnUpdateActionStr=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);
5692
					unset($conf["stringProcess"]["correctCharacter"]);
5693
 
5694
					#如果 處理字串失敗
5695
					if($columnOnUpdateActionStr["status"]=="false"){
5696
 
5697
						#設置執行不正常
5698
						$result["status"]="false";
5699
 
5700
						#設置錯誤訊息
5701
						$result["error"]=$columnOnUpdateActionStr;
5702
 
5703
						#回傳結果
5704
						return $result;
5705
 
5706
						}#if end
5707
 
5708
					#取得 ON UPDATE 的對應動作
5709
					$result["columnOnUpdateAction"][$result["columnName"][$i]]=$columnOnUpdateActionStr["content"];
5710
					$result["columnOnUpdateAction"][$i]=$columnOnUpdateActionStr["content"];
5711
 
5712
					}#if end
5713
 
5714
				#反之,沒有 ON UPDATE 的對應動作
5715
				else{
5716
 
5717
					$result["columnOnUpdateAction"][$i]="沒有指定";
5718
					$result["columnOnUpdateAction"][$result["columnName"][$i]]=$result["columnOnUpdateAction"][$i];
5719
 
5720
					}#else end
5721
 
5722
				}#if end
5723
 
5724
			#如果有欄位內有 CHARACTER SET 的字樣
5725
 
5726
			#函式說明:
5727
			#檢查字串裡面有無指定的關鍵字
5728
			#回傳結果::
5729
			#$result["status"],"true"代表執行成功,"false"代表執行失敗。
5730
			#$result["error"],錯誤訊息
5731
			#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
5732
			#必填參數:
5733
			$conf["search"]["findKeyWord"]["keyWord"]="CHARACTER SET";#想要搜尋的關鍵字
5734
			$conf["search"]["findKeyWord"]["string"]=$everyLine["dataArray"][$i];#要被搜尋的字串內容
5735
			#可省略參數:
5736
			#$conf["search"]["findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
5737
			$searchResult=search::findKeyWord($conf["search"]["findKeyWord"]);
5738
			unset($conf["search"]["findKeyWord"]);
5739
 
5740
			#如果尋找關鍵字失敗
5741
			if($searchResult["status"]==="false"){
5742
 
5743
				#設置執行不正常
5744
				$result["status"]="false";
5745
 
5746
				#設置錯誤訊息
5747
				$result["error"]=$searchResult;
5748
 
5749
				#回傳結果
5750
				return $result;
5751
 
5752
				}#if end
5753
 
5754
			#如果有找到 CHARACTER SET
5755
			if($searchResult["founded"]==="true"){ 
5756
 
5757
				#函式說明:
5758
				#將固定格式的字串分開,並回傳分開的結果。
5759
				#回傳的參數:
5760
				#$result["oriStr"],要分割的原始字串內容
5761
				#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
5762
				#$result["dataCounts"],爲總共分成幾段
5763
				#必填參數:
5764
				$conf["stringProcess"]["spiltString"]["stringIn"]=$everyLine["dataArray"][$i];#要處理的字串。
5765
				$conf["stringProcess"]["spiltString"]["spiltSymbol"]="CHARACTER SET ";#爲以哪個符號作爲分割
5766
				$characterSetString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
5767
				unset($conf["stringProcess"]["spiltString"]);
5768
 
5769
				#如果分割字串失敗
5770
				if($characterSetString["status"]==="false"){
5771
 
5772
					#設置執行不正常
5773
					$result["status"]="false";
5774
 
5775
					#設置錯誤訊息
5776
					$result["error"]=$characterSetString;
5777
 
5778
					#回傳結果
5779
					return $result;
5780
 
5781
					}#if end
5782
 
5783
				#函式說明:
5784
				#將固定格式的字串分開,並回傳分開的結果。
5785
				#回傳的參數:
5786
				#$result["oriStr"],要分割的原始字串內容
5787
				#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
5788
				#$result["dataCounts"],爲總共分成幾段
5789
				#必填參數:
5790
				$conf["stringProcess"]["spiltString"]["stringIn"]=$characterSetString["dataArray"][1];#要處理的字串。
5791
				$conf["stringProcess"]["spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
5792
				$characterSetString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
5793
				unset($conf["stringProcess"]["spiltString"]);
5794
 
5795
				#如果分割字串失敗
5796
				if($characterSetString["status"]==="false"){
5797
 
5798
					#設置執行不正常
5799
					$result["status"]="false";
5800
 
5801
					#設置錯誤訊息
5802
					$result["error"]=$characterSetString;
5803
 
5804
					#回傳結果
5805
					return $result;
5806
 
5807
					}#if end
5808
 
5809
				#將「,」去掉 
5810
				#函式說明:
5811
				#處理字串避免網頁出錯
5812
				#回傳結果::
5813
				#$result,爲處理好的字串。
5814
				#必填參數:
5815
				$conf["stringProcess"]["correctCharacter"]["stringIn"]=$characterSetString["dataArray"][0];#爲要處理的字串
5816
				#可省略參數:
5817
				$conf["stringProcess"]["correctCharacter"]["selectedCharacter"]=array(",");#爲被選擇要處理的字串/字元,須爲陣列值。
5818
				#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
5819
				#$conf["stringProcess"]["correctCharacter"]["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
5820
				$processedCharacterSetStr=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);
5821
				unset($conf["stringProcess"]["correctCharacter"]);
5822
 
5823
				#如果處理字串失敗
5824
				if($processedCharacterSetStr["status"]==="false"){
5825
 
5826
					#設置執行不正常
5827
					$result["status"]="false";
5828
 
5829
					#設置錯誤訊息
5830
					$result["error"]=$processedCharacterSetStr;
5831
 
5832
					#回傳結果
5833
					return $result;
5834
 
5835
					}#if end
5836
 
5837
				#取得CHARACTER SET的設定字串
5838
				$result["columnCharacterSet"][$i]=$processedCharacterSetStr["content"];
5839
				$result["columnCharacterSet"][$result["columnName"][$i]]=$processedCharacterSetStr["content"];
5840
 
5841
				}#if end
5842
 
5843
			#反之,沒有 CHARACTER SET 字樣
5844
			else{
5845
 
5846
				#如果存在該欄位
5847
				if(isset($result["columnName"][$i])){
5848
 
5849
					#採用預設的 $result["charset"]
5850
					$result["columnCharacterSet"][$i]=$result["charset"];
5851
					$result["columnCharacterSet"][$result["columnName"][$i]]=$result["columnCharacterSet"][$i];
5852
 
5853
					}#if end
5854
 
5855
				}#else end
5856
 
5857
			#檢查是否有 COLLATE 字樣...
5858
 
5859
			#函式說明:
5860
			#檢查字串裡面有無指定的關鍵字
5861
			#回傳結果::
5862
			#$result["status"],"true"代表執行成功,"false"代表執行失敗。
5863
			#$result["error"],錯誤訊息
5864
			#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
5865
			#必填參數:
5866
			$conf["search"]["findKeyWord"]["keyWord"]="COLLATE";#想要搜尋的關鍵字
5867
			$conf["search"]["findKeyWord"]["string"]=$everyLine["dataArray"][$i];#要被搜尋的字串內容
5868
			#可省略參數:
5869
			#$conf["search"]["findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
5870
			$searchResult=search::findKeyWord($conf["search"]["findKeyWord"]);
5871
			unset($conf["search"]["findKeyWord"]);
5872
 
5873
			#如果尋找關鍵字失敗
5874
			if($searchResult["status"]==="false"){
5875
 
5876
				#設置執行不正常
5877
				$result["status"]="false";
5878
 
5879
				#設置錯誤訊息
5880
				$result["error"]=$searchResult;
5881
 
5882
				#回傳結果
5883
				return $result;
5884
 
5885
				}#if end
5886
 
5887
			#如果有找到 CHARACTER SET
5888
			if($searchResult["founded"]==="true"){ 
5889
 
5890
				#函式說明:
5891
				#將固定格式的字串分開,並回傳分開的結果。
5892
				#回傳的參數:
5893
				#$result["oriStr"],要分割的原始字串內容
5894
				#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
5895
				#$result["dataCounts"],爲總共分成幾段
5896
				#必填參數:
5897
				$conf["stringProcess"]["spiltString"]["stringIn"]=$everyLine["dataArray"][$i];#要處理的字串。
5898
				$conf["stringProcess"]["spiltString"]["spiltSymbol"]="COLLATE ";#爲以哪個符號作爲分割
5899
				$collateString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
5900
				unset($conf["stringProcess"]["spiltString"]);
5901
 
5902
				#如果分割字串失敗
5903
				if($collateString["status"]=="false"){
5904
 
5905
					#設置執行不正常
5906
					$result["status"]="false";
5907
 
5908
					#設置錯誤訊息
5909
					$result["error"]=$searchResult;
5910
 
5911
					#回傳結果
5912
					return $result;
5913
 
5914
					}#if end
5915
 
5916
				#函式說明:
5917
				#將固定格式的字串分開,並回傳分開的結果。
5918
				#回傳的參數:
5919
				#$result["oriStr"],要分割的原始字串內容
5920
				#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
5921
				#$result["dataCounts"],爲總共分成幾段
5922
				#必填參數:
5923
				$conf["stringProcess"]["spiltString"]["stringIn"]=$collateString["dataArray"][1];#要處理的字串。
5924
				$conf["stringProcess"]["spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
5925
				$collateString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
5926
				unset($conf["stringProcess"]["spiltString"]);
5927
 
5928
				#如果分割字串失敗
5929
				if($collateString["status"]==="false"){
5930
 
5931
					#設置執行不正常
5932
					$result["status"]="false";
5933
 
5934
					#設置錯誤訊息
5935
					$result["error"]=$searchResult;
5936
 
5937
					#回傳結果
5938
					return $result;
5939
 
5940
					}#if end
5941
 
5942
				#將「,」去掉 
5943
				#函式說明:
5944
				#處理字串避免網頁出錯
5945
				#回傳結果::
5946
				#$result,爲處理好的字串。
5947
				#必填參數:
5948
				$conf["stringProcess"]["correctCharacter"]["stringIn"]=$collateString["dataArray"][0];#爲要處理的字串
5949
				#可省略參數:
5950
				$conf["stringProcess"]["correctCharacter"]["selectedCharacter"]=array(",");#爲被選擇要處理的字串/字元,須爲陣列值。
5951
				#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
5952
				#$conf["stringProcess"]["correctCharacter"]["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
5953
				$thisColumnCollate=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);
5954
				unset($conf["stringProcess"]["correctCharacter"]);
5955
 
5956
				#如果處理字串失敗
5957
				if($thisColumnCollate["status"]==="false"){
5958
 
5959
					#設置執行不正常
5960
					$result["status"]="false";
5961
 
5962
					#設置錯誤訊息
5963
					$result["error"]=$thisColumnCollate;
5964
 
5965
					#回傳結果
5966
					return $result;
5967
 
5968
					}#if end
5969
 
5970
				#儲存 COLLATE 資訊字串
5971
				$result["columnCollate"][$i]=$thisColumnCollate["content"];
5972
				$result["columnCollate"][$result["columnName"][$i]]=$thisColumnCollate["content"];
5973
 
5974
				}#if end
5975
 
5976
			#反之,沒有 COLLATE  字樣
5977
			else{
5978
				#如果存在該欄位
5979
				if(isset($result["columnName"][$i])){
5980
 
5981
					$result["columnCollate"][$i]="沒有指定";
5982
					$result["columnCollate"][$result["columnName"][$i]]=$result["columnCollate"][$i];
5983
 
5984
					}#if end
5985
 
5986
				}#else end
5987
 
5988
			#檢查是否有COMMENT字樣
5989
			#函式說明:
5990
			#檢查字串裡面有無指定的關鍵字
5991
			#回傳結果::
5992
			#$result["status"],"true"代表執行成功,"false"代表執行失敗。
5993
			#$result["error"],錯誤訊息
5994
			#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
5995
			#必填參數:
5996
			$conf["search"]["findKeyWord"]["keyWord"]="COMMENT";#想要搜尋的關鍵字
5997
			$conf["search"]["findKeyWord"]["string"]=$everyLine["dataArray"][$i];#要被搜尋的字串內容
5998
			#可省略參數:
5999
			#$conf["search"]["findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
6000
			$searchResult=search::findKeyWord($conf["search"]["findKeyWord"]);
6001
			unset($conf["search"]);
6002
 
6003
			#如果尋找關鍵字失敗
6004
			if($searchResult["status"]==="false"){
6005
 
6006
				#設置執行不正常
6007
				$result["status"]="false";
6008
 
6009
				#設置錯誤訊息
6010
				$result["error"]=$searchResult;
6011
 
6012
				#回傳結果
6013
				return $result;
6014
 
6015
				}#if end
6016
 
6017
			#如果有 COMMENT 字樣
6018
			if($searchResult["founded"]==="true"){
6019
 
6020
				#函式說明:
6021
				#將固定格式的字串分開,並回傳分開的結果。
6022
				#回傳的參數:
6023
				#$result["oriStr"],要分割的原始字串內容
6024
				#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
6025
				#$result["dataCounts"],爲總共分成幾段
6026
				#必填參數:
6027
				$conf["stringProcess"]["spiltString"]["stringIn"]=$everyLine["dataArray"][$i];#要處理的字串。
6028
				$conf["stringProcess"]["spiltString"]["spiltSymbol"]="COMMENT ";#爲以哪個符號作爲分割
6029
				$commentString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
6030
				unset($conf["stringProcess"]["spiltString"]);
6031
 
6032
				#如果分割字串失敗
6033
				if($commentString["status"]=="false"){
6034
 
6035
					#設置執行不正常
6036
					$result["status"]="false";
6037
 
6038
					#設置錯誤訊息
6039
					$result["error"]=$commentString;
6040
 
6041
					#回傳結果
6042
					return $result;
6043
 
6044
					}#if end
6045
 
6046
				#函式說明:
6047
				#將固定格式的字串分開,並回傳分開的結果。
6048
				#回傳的參數:
6049
				#$result["oriStr"],要分割的原始字串內容
6050
				#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
6051
				#$result["dataCounts"],爲總共分成幾段
6052
				#必填參數:
6053
				$conf["stringProcess"]["spiltString"]["stringIn"]=$commentString["dataArray"][1];#要處理的字串。
6054
				$conf["stringProcess"]["spiltString"]["spiltSymbol"]="'";#爲以哪個符號作爲分割
6055
				$commentString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
6056
				unset($conf["stringProcess"]["spiltString"]);
6057
 
6058
				#如果分割字串失敗
6059
				if($commentString["status"]==="false"){
6060
 
6061
					#設置執行不正常
6062
					$result["status"]="false";
6063
 
6064
					#設置錯誤訊息
6065
					$result["error"]=$commentString;
6066
 
6067
					#回傳結果
6068
					return $result;
6069
 
6070
					}#if end
6071
 
6072
				#取得該欄位的註解內容
6073
				$result["columnComment"][$i]=$commentString["dataArray"][0];
6074
				$result["columnComment"][$result["columnName"][$i]]=$commentString["dataArray"][0];
6075
 
6076
				}#if end
6077
 
6078
			#反之,沒有 COMMENT 字樣
6079
			else{
6080
				#如果存在該欄位
6081
				if(isset($result["columnName"][$i])){
6082
 
6083
					#設置該欄位沒有註解
6084
					$result["columnComment"][$i]="沒有註解";
6085
					$result["columnComment"][$result["columnName"][$i]]="沒有註解";
6086
 
6087
					}#if end
6088
 
6089
				}#else end
6090
 
6091
			}#for end
6092
 
6093
		#初始化索引鍵的陣列
6094
		$result["key"]=array();
6095
 
6096
		#依據有幾個鍵值的定義來執行
6097
		foreach($keyDefine as $unClassifyString){
6098
 
6099
			#依據第一個單字來進行判斷
6100
			#可能的有:
6101
			#PRIMARY KEY,主鍵
6102
			#KEY,索引鍵
6103
			#CONSTRAINT,外鍵
6104
 
6105
			#如果找到 PRIMARY KEY
6106
			#函式說明:
6107
			#檢查字串裡面有無指定的關鍵字
6108
			#回傳結果::
6109
			#$result["status"],"true"代表執行成功,"false"代表執行失敗。
6110
			#$result["error"],錯誤訊息
6111
			#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
6112
			#必填參數:
6113
			$conf["search"]["findKeyWord"]["keyWord"]="PRIMARY KEY";#想要搜尋的關鍵字
6114
			$conf["search"]["findKeyWord"]["string"]=$unClassifyString;#要被搜尋的字串內容
6115
			#可省略參數:
6116
			#$conf["search"]["findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
6117
			$searchResult=search::findKeyWord($conf["search"]["findKeyWord"]);
6118
			unset($conf["search"]["findKeyWord"]);
6119
 
6120
			#如果尋找關鍵字失敗
6121
			if($searchResult["status"]=="false"){
6122
 
6123
				#設置執行不正常
6124
				$result["status"]="false";
6125
 
6126
				#設置錯誤訊息
6127
				$result["error"]=$searchResult;
6128
 
6129
				#回傳結果
6130
				return $result;
6131
 
6132
				}#if end
6133
 
6134
			#如果有找到 PRIMARY KEY
6135
			if($searchResult["founded"]=="true"){ 
6136
 
6137
				#函式說明:
6138
				#將固定格式的字串分開,並回傳分開的結果。
6139
				#回傳的參數:
6140
				#$result["oriStr"],要分割的原始字串內容
6141
				#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
6142
				#$result["dataCounts"],爲總共分成幾段
6143
				#必填參數:
6144
				$conf["stringProcess"]["spiltString"]["stringIn"]=$unClassifyString;#要處理的字串。
6145
				$conf["stringProcess"]["spiltString"]["spiltSymbol"]="PRIMARY KEY ";#爲以哪個符號作爲分割
6146
				$primaryKeyString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
6147
				unset($conf["stringProcess"]["spiltString"]);
6148
 
6149
				#如果分割字串失敗
6150
				if($primaryKeyString["status"]=="false"){
6151
 
6152
					#設置執行不正常
6153
					$result["status"]="false";
6154
 
6155
					#設置錯誤訊息
6156
					$result["error"]=$primaryKeyString;
6157
 
6158
					#回傳結果
6159
					return $result;
6160
 
6161
					}#if end
6162
 
6163
				#取得主鍵的欄位名稱
6164
				$primaryKey=$primaryKeyString["dataArray"][1];
6165
 
6166
				#將「,」、「`」、「(」、「)」去掉 
6167
				#函式說明:
6168
				#處理字串避免網頁出錯
6169
				#回傳結果::
6170
				#$result,爲處理好的字串。
6171
				#必填參數:
6172
				$conf["stringProcess"]["correctCharacter"]["stringIn"]=$primaryKey;#爲要處理的字串
6173
				#可省略參數:
6174
				$conf["stringProcess"]["correctCharacter"]["selectedCharacter"]=array(",","`","(",")");#爲被選擇要處理的字串/字元,須爲陣列值。
6175
				#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
6176
				#$conf["stringProcess"]["correctCharacter"]["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
6177
				$getPrimaryKey=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);
6178
				unset($conf["stringProcess"]["correctCharacter"]);
6179
 
6180
				#如果 處理字串失敗
6181
				if($getPrimaryKey["status"]=="false"){
6182
 
6183
					#設置執行不正常
6184
					$result["status"]="false";
6185
 
6186
					#設置錯誤訊息
6187
					$result["error"]=$getPrimaryKey;
6188
 
6189
					#回傳結果
6190
					return $result;
6191
 
6192
					}#if end
6193
 
6194
				#取得主鍵欄位名稱
6195
				$result["primaryKey"]=$getPrimaryKey["content"];
6196
 
6197
				#後續省略
6198
				continue;
6199
 
6200
				}#if end
6201
 
6202
			#尋找是否有 KEY 關鍵字
6203
			#函式說明:
6204
			#檢查字串裡面有無指定的關鍵字
6205
			#回傳結果::
6206
			#$result["status"],"true"代表執行成功,"false"代表執行失敗。
6207
			#$result["error"],錯誤訊息
6208
			#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
6209
			#必填參數:
6210
			$conf["search"]["findKeyWord"]["keyWord"]="  KEY ";#想要搜尋的關鍵字
6211
			$conf["search"]["findKeyWord"]["string"]=$unClassifyString;#要被搜尋的字串內容
6212
			#可省略參數:
6213
			#$conf["search"]["findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
6214
			$searchResult=search::findKeyWord($conf["search"]["findKeyWord"]);
6215
			unset($conf["search"]["findKeyWord"]);
6216
 
6217
			#如果尋找關鍵字失敗
6218
			if($searchResult["status"]=="false"){
6219
 
6220
				#設置執行不正常
6221
				$result["status"]="false";
6222
 
6223
				#設置錯誤訊息
6224
				$result["error"]=$searchResult;
6225
 
6226
				#回傳結果
6227
				return $result;
6228
 
6229
				}#if end
6230
 
6231
			#如果有找到 "  KEY "
6232
			if($searchResult["founded"]=="true"){
6233
 
6234
				# 用 "  KEY " 來分割
6235
				#函式說明:
6236
				#將固定格式的字串分開,並回傳分開的結果。
6237
				#回傳的參數:
6238
				#$result["oriStr"],要分割的原始字串內容
6239
				#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
6240
				#$result["dataCounts"],爲總共分成幾段
6241
				#必填參數:
6242
				$conf["stringProcess"]["spiltString"]["stringIn"]=$unClassifyString;#要處理的字串。
6243
				$conf["stringProcess"]["spiltString"]["spiltSymbol"]="  KEY ";#爲以哪個符號作爲分割
6244
				$keyString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
6245
				unset($conf["stringProcess"]["spiltString"]);
6246
 
6247
				#如果分割字串失敗
6248
				if($keyString["status"]=="false"){
6249
 
6250
					#設置執行不正常
6251
					$result["status"]="false";
6252
 
6253
					#設置錯誤訊息
6254
					$result["error"]=$keyString;
6255
 
6256
					#回傳結果
6257
					return $result;
6258
 
6259
					}#if end
6260
 
6261
				#函式說明:
6262
				#將固定格式的字串分開,並回傳分開的結果。
6263
				#回傳的參數:
6264
				#$result["oriStr"],要分割的原始字串內容
6265
				#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
6266
				#$result["dataCounts"],爲總共分成幾段
6267
				#必填參數:
6268
				$conf["stringProcess"]["spiltString"]["stringIn"]=$keyString["dataArray"][0];#要處理的字串。
6269
				$conf["stringProcess"]["spiltString"]["spiltSymbol"]="`";#爲以哪個符號作爲分割
6270
				$keyString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
6271
				unset($conf["stringProcess"]["spiltString"]);
6272
 
6273
				#debug
6274
				#var_dump($keyString);
6275
 
6276
				#如果分割字串失敗
6277
				if($keyString["status"]=="false"){
6278
 
6279
					#設置執行不正常
6280
					$result["status"]="false";
6281
 
6282
					#設置錯誤訊息
6283
					$result["error"]=$keyString;
6284
 
6285
					#回傳結果
6286
					return $result;
6287
 
6288
					}#if end
6289
 
6290
				#取得索引的欄位名稱
6291
				$thisKeyColumnName=$keyString["dataArray"][2];
6292
 
6293
				#取得要回傳的key欄位名稱
6294
				$result["key"][]=$thisKeyColumnName;
6295
 
6296
				#用index key欄位的名稱來儲存index key的欄位
6297
				$result["key"][$thisKeyColumnName]=$thisKeyColumnName;
6298
 
6299
				#取得用於識別 key 的 Constraint
6300
				$keyConstraintName=$keyString["dataArray"][0];
6301
 
6302
				#將「`」去掉 
6303
				#函式說明:
6304
				#處理字串避免網頁出錯
6305
				#回傳結果::
6306
				#$result,爲處理好的字串。
6307
				#必填參數:
6308
				$conf["stringProcess"]["correctCharacter"]["stringIn"]=$keyConstraintName;#爲要處理的字串
6309
				#可省略參數:
6310
				$conf["stringProcess"]["correctCharacter"]["selectedCharacter"]=array("`");#爲被選擇要處理的字串/字元,須爲陣列值。
6311
				#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
6312
				#$conf["stringProcess"]["correctCharacter"]["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
6313
				$thisKeyConstraintName=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);
6314
				unset($conf["stringProcess"]["correctCharacter"]);
6315
 
6316
				#如果處理字串失敗
6317
				if($thisKeyConstraintName["status"]=="false"){
6318
 
6319
					#設置執行不正常
6320
					$result["status"]="false";
6321
 
6322
					#設置錯誤訊息
6323
					$result["error"]=$thisKeyConstraintName;
6324
 
6325
					#回傳結果
6326
					return $result;
6327
 
6328
					}#if end
6329
 
6330
				#儲存 key 的名稱
6331
				$result["keyConstraintName"][]=$thisKeyConstraintName["content"];
6332
 
6333
				#將 $result["keyConstraintName"] 用 欄位的名稱去儲存
6334
				$result["keyConstraintName"][$thisKeyColumnName]=$thisKeyConstraintName["content"];
6335
 
6336
				#後續省略
6337
				continue;
6338
 
6339
				}#if end
6340
 
6341
			#尋找是否有 CONSTRAINT 關鍵字
6342
			#函式說明:
6343
			#檢查字串裡面有無指定的關鍵字
6344
			#回傳結果::
6345
			#$result["status"],"true"代表執行成功,"false"代表執行失敗。
6346
			#$result["error"],錯誤訊息
6347
			#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
6348
			#必填參數:
6349
			$conf["search"]["findKeyWord"]["keyWord"]="CONSTRAINT";#想要搜尋的關鍵字
6350
			$conf["search"]["findKeyWord"]["string"]=$unClassifyString;#要被搜尋的字串內容
6351
			#可省略參數:
6352
			#$conf["search"]["findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
6353
			$searchResult=search::findKeyWord($conf["search"]["findKeyWord"]);
6354
			unset($conf["search"]["findKeyWord"]);
6355
 
6356
			#如果尋找關鍵字失敗
6357
			if($searchResult["status"]=="false"){
6358
 
6359
				#設置執行不正常
6360
				$result["status"]="false";
6361
 
6362
				#設置錯誤訊息
6363
				$result["error"]=$searchResult;
6364
 
6365
				#回傳結果
6366
				return $result;
6367
 
6368
				}#if end
6369
 
6370
			#如果有找到 "CONSTRAINT"
6371
			if($searchResult["founded"]=="true"){
6372
 
6373
				#取得 CONSTRAINT 的名稱
6374
 
6375
				#用 " " 來分割字串
6376
				#函式說明:
6377
				#將固定格式的字串分開,並回傳分開的結果。
6378
				#回傳的參數:
6379
				#$result["oriStr"],要分割的原始字串內容
6380
				#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
6381
				#$result["dataCounts"],爲總共分成幾段
6382
				#必填參數:
6383
				$conf["stringProcess"]["spiltString"]["stringIn"]=$unClassifyString;#要處理的字串。
6384
				$conf["stringProcess"]["spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
6385
				$foreignKeyConstraintString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
6386
				unset($conf["stringProcess"]["spiltString"]);
6387
 
6388
				#如果分割字串失敗
6389
				if($foreignKeyConstraintString["status"]=="false"){
6390
 
6391
					#設置執行不正常
6392
					$result["status"]="false";
6393
 
6394
					#設置錯誤訊息
6395
					$result["error"]=$foreignKeyConstraintString;
6396
 
6397
					#回傳結果
6398
					return $result;
6399
 
6400
					}#if end	
6401
 
6402
				#將 $foreignKeyString[0] 的非必要字元踢除
6403
				#將「,」、「`」、「(」、「)」去掉 
6404
				#函式說明:
6405
				#處理字串避免網頁出錯
6406
				#回傳結果::
6407
				#$result,爲處理好的字串。
6408
				#必填參數:
6409
				$conf["stringProcess"]["correctCharacter"]["stringIn"]=$foreignKeyConstraintString["dataArray"][1];#爲要處理的字串
6410
				#可省略參數:
6411
				$conf["stringProcess"]["correctCharacter"]["selectedCharacter"]=array("`");#爲被選擇要處理的字串/字元,須爲陣列值。
6412
				#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
6413
				#$conf["stringProcess"]["correctCharacter"]["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
6414
				$foreignConstraintName=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);
6415
				unset($conf["stringProcess"]["correctCharacter"]);		
6416
 
6417
				#如果處理 CONSTRAINT 字串失敗
6418
				if($foreignConstraintName["status"]=="false"){
6419
 
6420
					#設置執行不正常
6421
					$result["status"]="false";
6422
 
6423
					#設置錯誤訊息
6424
					$result["error"]=$foreignConstraintName;
6425
 
6426
					#回傳結果
6427
					return $result;
6428
 
6429
					}#if end	
6430
 
6431
				#儲存 foreignKey 的 CONSTRAINT 名稱
6432
				$result["foreignKey"]["constraintName"][]=$foreignConstraintName["content"];	
6433
 
6434
				#尋找 "FOREIGN KEY"
6435
				#函式說明:
6436
				#檢查字串裡面有無指定的關鍵字
6437
				#回傳結果::
6438
				#$result["status"],"true"代表執行成功,"false"代表執行失敗。
6439
				#$result["error"],錯誤訊息
6440
				#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
6441
				#必填參數:
6442
				$conf["search"]["findKeyWord"]["keyWord"]="FOREIGN KEY";#想要搜尋的關鍵字
6443
				$conf["search"]["findKeyWord"]["string"]=$unClassifyString;#要被搜尋的字串內容
6444
				#可省略參數:
6445
				#$conf["search"]["findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
6446
				$searchResult=search::findKeyWord($conf["search"]["findKeyWord"]);
6447
				unset($conf["search"]["findKeyWord"]);
6448
 
6449
				#如果尋找關鍵字失敗
6450
				if($searchResult["status"]=="false"){
6451
 
6452
					#設置執行不正常
6453
					$result["status"]="false";
6454
 
6455
					#設置錯誤訊息
6456
					$result["error"]=$searchResult;
6457
 
6458
					#回傳結果
6459
					return $result;
6460
 
6461
					}#if end
6462
 
6463
				#如果有找到 "FOREIGN KEY"
6464
				if($searchResult["founded"]=="true"){
6465
 
6466
					#用 "FOREIGN KEY " 來分割字串
6467
					#函式說明:
6468
					#將固定格式的字串分開,並回傳分開的結果。
6469
					#回傳的參數:
6470
					#$result["oriStr"],要分割的原始字串內容
6471
					#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
6472
					#$result["dataCounts"],爲總共分成幾段
6473
					#必填參數:
6474
					$conf["stringProcess"]["spiltString"]["stringIn"]=$unClassifyString;#要處理的字串。
6475
					$conf["stringProcess"]["spiltString"]["spiltSymbol"]="FOREIGN KEY ";#爲以哪個符號作爲分割
6476
					$foreignKeyString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
6477
					unset($conf["stringProcess"]["spiltString"]);
6478
 
6479
					#如果分割字串失敗
6480
					if($foreignKeyString["status"]=="false"){
6481
 
6482
						#設置執行不正常
6483
						$result["status"]="false";
6484
 
6485
						#設置錯誤訊息
6486
						$result["error"]=$foreignKeyString;
6487
 
6488
						#回傳結果
6489
						return $result;
6490
 
6491
						}#if end	
6492
 
6493
					#用 " " 來分割字串
6494
					#函式說明:
6495
					#將固定格式的字串分開,並回傳分開的結果。
6496
					#回傳的參數:
6497
					#$result["oriStr"],要分割的原始字串內容
6498
					#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
6499
					#$result["dataCounts"],爲總共分成幾段
6500
					#必填參數:
6501
					$conf["stringProcess"]["spiltString"]["stringIn"]=$foreignKeyString["dataArray"][1];#要處理的字串。
6502
					$conf["stringProcess"]["spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
6503
					$foreignKeyString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
6504
					unset($conf["stringProcess"]["spiltString"]);
6505
 
6506
					#如果分割字串失敗
6507
					if($foreignKeyString["status"]=="false"){
6508
 
6509
						#設置執行不正常
6510
						$result["status"]="false";
6511
 
6512
						#設置錯誤訊息
6513
						$result["error"]=$foreignKeyString;
6514
 
6515
						#回傳結果
6516
						return $result;
6517
 
6518
						}#if end	
6519
 
6520
					#將 $foreignKeyString[0] 的非必要字元踢除
6521
					#將「,」、「`」、「(」、「)」去掉 
6522
					#函式說明:
6523
					#處理字串避免網頁出錯
6524
					#回傳結果::
6525
					#$result,爲處理好的字串。
6526
					#必填參數:
6527
					$conf["stringProcess"]["correctCharacter"]["stringIn"]=$foreignKeyString["dataArray"][0];#爲要處理的字串
6528
					#可省略參數:
6529
					$conf["stringProcess"]["correctCharacter"]["selectedCharacter"]=array(",","`","(",")");#爲被選擇要處理的字串/字元,須爲陣列值。
6530
					#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
6531
					#$conf["stringProcess"]["correctCharacter"]["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
6532
					$thisForeignKeyColumnName=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);
6533
					unset($conf["stringProcess"]["correctCharacter"]);
6534
 
6535
					#如果 處理字串失敗
6536
					if($thisForeignKeyColumnName["status"]=="false"){
6537
 
6538
						#設置執行不正常
6539
						$result["status"]="false";
6540
 
6541
						#設置錯誤訊息
6542
						$result["error"]=$thisForeignKeyColumnName;
6543
 
6544
						#回傳結果
6545
						return $result;
6546
 
6547
						}#if end
6548
 
6549
					#儲存外鍵欄位的名稱
6550
					$result["foreignKey"]["columnName"][]=$thisForeignKeyColumnName["content"];
6551
 
6552
					#用該外鍵欄位的名稱,作為key來存放外鍵欄位的名稱
6553
					$result["foreignKey"]["columnName"][$thisForeignKeyColumnName["content"]]=$thisForeignKeyColumnName["content"];
6554
 
6555
					#用 "REFERENCES " 來分割字串
6556
					#函式說明:
6557
					#將固定格式的字串分開,並回傳分開的結果。
6558
					#回傳的參數:
6559
					#$result["oriStr"],要分割的原始字串內容
6560
					#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
6561
					#$result["dataCounts"],爲總共分成幾段
6562
					#必填參數:
6563
					$conf["stringProcess"]["spiltString"]["stringIn"]=$unClassifyString;#要處理的字串。
6564
					$conf["stringProcess"]["spiltString"]["spiltSymbol"]="REFERENCES ";#爲以哪個符號作爲分割
6565
					$foreignKeyReferencesString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
6566
					unset($conf["stringProcess"]["spiltString"]);
6567
 
6568
					#如果分割字串失敗
6569
					if($foreignKeyReferencesString["status"]=="false"){
6570
 
6571
						#設置執行不正常
6572
						$result["status"]="false";
6573
 
6574
						#設置錯誤訊息
6575
						$result["error"]=$foreignKeyReferencesString;
6576
 
6577
						#回傳結果
6578
						return $result;
6579
 
6580
						}#if end
6581
 
6582
					#用 " " 來分割字串
6583
					#函式說明:
6584
					#將固定格式的字串分開,並回傳分開的結果。
6585
					#回傳的參數:
6586
					#$result["oriStr"],要分割的原始字串內容
6587
					#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
6588
					#$result["dataCounts"],爲總共分成幾段
6589
					#必填參數:
6590
					$conf["stringProcess"]["spiltString"]["stringIn"]=$foreignKeyReferencesString["dataArray"][1];#要處理的字串。
6591
					$conf["stringProcess"]["spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
6592
					$foreignKeyReferencesString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
6593
					unset($conf["stringProcess"]["spiltString"]);
6594
 
6595
					#如果分割字串失敗
6596
					if($foreignKeyReferencesString["status"]=="false"){
6597
 
6598
						#設置執行不正常
6599
						$result["status"]="false";
6600
 
6601
						#設置錯誤訊息
6602
						$result["error"]=$foreignKeyReferencesString;
6603
 
6604
						#回傳結果
6605
						return $result;
6606
 
6607
						}#if end
6608
 
6609
					#將 $foreignKeyString[0] 的非必要字元踢除
6610
					#將「,」、「`」、「(」、「)」去掉 
6611
					#函式說明:
6612
					#處理字串避免網頁出錯
6613
					#回傳結果::
6614
					#$result,爲處理好的字串。
6615
					#必填參數:
6616
					$conf["stringProcess"]["correctCharacter"]["stringIn"]=$foreignKeyReferencesString["dataArray"][1];#爲要處理的字串
6617
					#可省略參數:
6618
					$conf["stringProcess"]["correctCharacter"]["selectedCharacter"]=array(",","`","(",")");#爲被選擇要處理的字串/字元,須爲陣列值。
6619
						#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
6620
					#$conf["stringProcess"]["correctCharacter"]["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
6621
					$tempReferencesColumn=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);
6622
					unset($conf["stringProcess"]["correctCharacter"]);
6623
 
6624
					#如果 處理字串失敗
6625
					if($tempReferencesColumn["status"]=="false"){
6626
 
6627
						#設置執行不正常
6628
						$result["status"]="false";
6629
 
6630
						#設置錯誤訊息
6631
						$result["error"]=$tempReferencesColumn;
6632
 
6633
						#回傳結果
6634
						return $result;
6635
 
6636
						}#if end
6637
 
6638
					#取得參照的欄位名稱
6639
					$result["foreignKey"]["referencesColumn"][]=$tempReferencesColumn["content"];
6640
 
6641
					#用欄位名稱來儲存參照的資料表
6642
					$result["foreignKey"]["referencesColumn"][$thisForeignKeyColumnName["content"]]=$tempReferencesColumn["content"];
6643
 
6644
					#將 $foreignKeyString[0] 的非必要字元踢除
6645
					#將「,」、「`」、「(」、「)」去掉 
6646
					#函式說明:
6647
					#處理字串避免網頁出錯
6648
					#回傳結果::
6649
					#$result,爲處理好的字串。
6650
					#必填參數:
6651
					$conf["stringProcess"]["correctCharacter"]["stringIn"]=$foreignKeyReferencesString["dataArray"][0];#爲要處理的字串
6652
					#可省略參數:
6653
					$conf["stringProcess"]["correctCharacter"]["selectedCharacter"]=array("`");#爲被選擇要處理的字串/字元,須爲陣列值。
6654
					#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
6655
					#$conf["stringProcess"]["correctCharacter"]["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
6656
					$tempReferencesTable=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);
6657
					unset($conf["stringProcess"]["correctCharacter"]);
6658
 
6659
					#如果處理字串失敗
6660
					if($tempReferencesTable["status"]=="false"){
6661
 
6662
						#設置執行不正常
6663
						$result["status"]="false";
6664
 
6665
						#設置錯誤訊息
6666
						$result["error"]=$tempReferencesTable;
6667
 
6668
						#回傳結果
6669
						return $result;
6670
 
6671
						}#if end	
6672
 
6673
					#取得參照的資料表
6674
					$result["foreignKey"]["referencesTable"][]=$tempReferencesTable["content"];
6675
 
6676
					#用欄位名稱來儲存參照的欄位
6677
					$result["foreignKey"]["referencesTable"][$thisForeignKeyColumnName["content"]]=$tempReferencesTable["content"];
6678
 
6679
					#如果有 "ON UPDATE" 存在
6680
					#函式說明:
6681
					#檢查字串裡面有無指定的關鍵字
6682
					#回傳結果::
6683
					#$result["status"],"true"代表執行成功,"false"代表執行失敗。
6684
					#$result["error"],錯誤訊息
6685
					#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
6686
					#必填參數:
6687
					$conf["search"]["findKeyWord"]["keyWord"]="ON UPDATE";#想要搜尋的關鍵字
6688
					$conf["search"]["findKeyWord"]["string"]=$unClassifyString;#要被搜尋的字串內容
6689
					#可省略參數:
6690
					#$conf["search"]["findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
6691
					$searchResult=search::findKeyWord($conf["search"]["findKeyWord"]);
6692
					unset($conf["search"]["findKeyWord"]);
6693
 
6694
					#如果尋找關鍵字失敗
6695
					if($searchResult["status"]=="false"){
6696
 
6697
						#設置執行不正常
6698
						$result["status"]="false";
6699
 
6700
						#設置錯誤訊息
6701
						$result["error"]=$searchResult;
6702
 
6703
						#回傳結果
6704
						return $result;
6705
 
6706
						}#if end
6707
 
6708
					#如果有找到 "ON UPDATE"
6709
					if($searchResult["founded"]=="true"){
6710
 
6711
						#用 "ON UPDATE " 來分割字串
6712
						#函式說明:
6713
						#將固定格式的字串分開,並回傳分開的結果。
6714
						#回傳的參數:
6715
						#$result["oriStr"],要分割的原始字串內容
6716
						#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
6717
						#$result["dataCounts"],爲總共分成幾段
6718
						#必填參數:
6719
						$conf["stringProcess"]["spiltString"]["stringIn"]=$unClassifyString;#要處理的字串。
6720
						$conf["stringProcess"]["spiltString"]["spiltSymbol"]="ON UPDATE ";#爲以哪個符號作爲分割
6721
						$foreignKeyOnUpdateString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
6722
						unset($conf["stringProcess"]["spiltString"]);
6723
 
6724
						#如果分割字串失敗
6725
						if($foreignKeyOnUpdateString["status"]=="false"){
6726
 
6727
							#設置執行不正常
6728
							$result["status"]="false";
6729
 
6730
							#設置錯誤訊息
6731
							$result["error"]=$searchResult;
6732
 
6733
							#回傳結果
6734
							return $result;
6735
 
6736
							}#if end
6737
 
6738
						#檢查裏面是否含有 " ON DELETE " 字樣
6739
						#函式說明:
6740
						#檢查字串裡面有無指定的關鍵字
6741
						#回傳結果::
6742
						#$result["status"],"true"代表執行成功,"false"代表執行失敗。
6743
						#$result["error"],錯誤訊息
6744
						#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
6745
						#必填參數:
6746
						$conf["search"]["findKeyWord"]["keyWord"]=" ON DELETE ";#想要搜尋的關鍵字
6747
						$conf["search"]["findKeyWord"]["string"]=$foreignKeyOnUpdateString["dataArray"][1];#要被搜尋的字串內容
6748
						#可省略參數:
6749
						#$conf["search"]["findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
6750
						$searchResult=search::findKeyWord($conf["search"]["findKeyWord"]);
6751
						unset($conf["search"]["findKeyWord"]);
6752
 
6753
						#如果尋找關鍵字失敗
6754
						if($searchResult["status"]=="false"){
6755
 
6756
							#設置執行不正常
6757
							$result["status"]="false";
6758
 
6759
							#設置錯誤訊息
6760
							$result["error"]=$searchResult;
6761
 
6762
							#回傳結果
6763
							return $result;
6764
 
6765
							}#if end
6766
 
6767
						#如果裏面含有 "ON DELETE " 字樣
6768
						if($searchResult["founded"]=="true"){
6769
 
6770
							#我們只要取得 "ON DELETE " 前面的內容
6771
							#用"ON UPDATE "來分割
6772
							#函式說明:
6773
							#將固定格式的字串分開,並回傳分開的結果。
6774
							#回傳的參數:
6775
							#$result["oriStr"],要分割的原始字串內容
6776
							#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
6777
							#$result["dataCounts"],爲總共分成幾段
6778
							#必填參數:
6779
							$conf["stringProcess"]["spiltString"]["stringIn"]=$foreignKeyOnUpdateString["dataArray"][1];#要處理的字串。
6780
							$conf["stringProcess"]["spiltString"]["spiltSymbol"]=" ON DELETE ";#爲以哪個符號作爲分割
6781
							$foreignKeyOnDeleteString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
6782
							unset($conf["stringProcess"]["spiltString"]);
6783
							#var_dump($foreignKeyOnDeleteString);
6784
 
6785
							#如果分割字串失敗
6786
							if($foreignKeyOnDeleteString["status"]=="false"){
6787
 
6788
								#設置執行不正常
6789
								$result["status"]="false";
6790
 
6791
								#設置錯誤訊息
6792
								$result["error"]=$foreignKeyOnDeleteString;
6793
 
6794
								#回傳結果
6795
								return $result;
6796
 
6797
								}#if end
6798
 
6799
							$foreignKeyOnUpdateString=$foreignKeyOnUpdateString["dataArray"][0];
6800
 
6801
							#將 $foreignKeyOnUpdateString 的非必要字元踢除
6802
							#將「,」、「`」、「(」、「)」去掉 
6803
							#函式說明:
6804
							#處理字串避免網頁出錯
6805
							#回傳結果::
6806
							#$result,爲處理好的字串。
6807
							#必填參數:
6808
							$conf["stringProcess"]["correctCharacter"]["stringIn"]=$foreignKeyOnUpdateString;#爲要處理的字串
6809
							#可省略參數:
6810
							$conf["stringProcess"]["correctCharacter"]["selectedCharacter"]=array(",");#爲被選擇要處理的字串/字元,須爲陣列值。
6811
								#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
6812
							#$conf["stringProcess"]["correctCharacter"]["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
6813
							$tempOnUpdateAction=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);
6814
							unset($conf["stringProcess"]["correctCharacter"]);
6815
 
6816
							#如果 處理字串 失敗
6817
							if($tempOnUpdateAction["status"]=="false"){
6818
 
6819
								#設置執行不正常
6820
								$result["status"]="false";
6821
 
6822
								#設置錯誤訊息
6823
								$result["error"]=$tempOnUpdateAction;
6824
 
6825
								#回傳結果
6826
								return $result;
6827
 
6828
								}#if end
6829
 
6830
							#紀錄 ON UPDATE 的動作字串
6831
							$result["foreignKey"]["onUpdateAction"][]=$tempOnUpdateAction["content"];
6832
 
6833
							#用 freign key 的名稱來紀錄外鍵更新的動作
6834
							$result["foreignKey"]["onUpdateAction"][$thisForeignKeyColumnName]=$tempOnUpdateAction["content"];
6835
 
6836
							}#if end
6837
 
6838
						#反之 沒有 "ON DELETE " 字樣
6839
						else{	
6840
 
6841
							#var_dump($foreignKeyOnUpdateString["dataArray"][1]);
6842
 
6843
							#將 $foreignKeyOnUpdateString 的非必要字元踢除
6844
							#將「,」、「`」、「(」、「)」去掉 
6845
							#函式說明:
6846
							#處理字串避免網頁出錯
6847
							#回傳結果::
6848
							#$result,爲處理好的字串。
6849
							#必填參數:
6850
							$conf["stringProcess"]["correctCharacter"]["stringIn"]=$foreignKeyOnUpdateString["dataArray"][1];#爲要處理的字串
6851
							#可省略參數:
6852
							$conf["stringProcess"]["correctCharacter"]["selectedCharacter"]=array(",");#爲被選擇要處理的字串/字元,須爲陣列值。
6853
								#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
6854
							#$conf["stringProcess"]["correctCharacter"]["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
6855
							$tempOnUpdateAction=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);
6856
							unset($conf["stringProcess"]["correctCharacter"]);
6857
 
6858
							#如果處理字串失敗
6859
							if($tempOnUpdateAction["status"]=="false"){
6860
 
6861
								#設置執行不正常
6862
								$result["status"]="false";
6863
 
6864
								#設置錯誤訊息
6865
								$result["error"]=$tempOnUpdateAction;
6866
 
6867
								#回傳結果
6868
								return $result;
6869
 
6870
								}#if end
6871
 
6872
							#紀錄外鍵更新的動作
6873
							$result["foreignKey"]["onUpdateAction"][]=$tempOnUpdateAction["content"];
6874
 
6875
							#用 freign key 的名稱來紀錄外鍵更新的動作
6876
							$result["foreignKey"]["onUpdateAction"][$thisForeignKeyColumnName["content"]]=$tempOnUpdateAction["content"];
6877
 
6878
							}#else end
6879
 
6880
						}#if end
6881
 
6882
					#如果有 "ON DELETE" 存在
6883
					#函式說明:
6884
					#檢查字串裡面有無指定的關鍵字
6885
					#回傳結果::
6886
					#$result["status"],"true"代表執行成功,"false"代表執行失敗。
6887
					#$result["error"],錯誤訊息
6888
					#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
6889
					#必填參數:
6890
					$conf["search"]["findKeyWord"]["keyWord"]="ON DELETE";#想要搜尋的關鍵字
6891
					$conf["search"]["findKeyWord"]["string"]=$unClassifyString;#要被搜尋的字串內容
6892
					#可省略參數:
6893
					#$conf["search"]["findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
6894
					$searchResult=search::findKeyWord($conf["search"]["findKeyWord"]);
6895
					unset($conf["search"]["findKeyWord"]);
6896
 
6897
					#如果尋找關鍵字失敗
6898
					if($searchResult["status"]=="false"){
6899
 
6900
						#設置執行不正常
6901
						$result["status"]="false";
6902
 
6903
						#設置錯誤訊息
6904
						$result["error"]=$searchResult;
6905
 
6906
						#回傳結果
6907
						return $result;
6908
 
6909
						}#if end
6910
 
6911
					#如果有找到 "ON DELETE"
6912
					if($searchResult["founded"]=="true"){							
6913
 
6914
						#用 "ON DELETE " 來分割字串
6915
						#函式說明:
6916
						#將固定格式的字串分開,並回傳分開的結果。
6917
						#回傳的參數:
6918
						#$result["oriStr"],要分割的原始字串內容
6919
						#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
6920
						#$result["dataCounts"],爲總共分成幾段
6921
						#必填參數:
6922
						$conf["stringProcess"]["spiltString"]["stringIn"]=$unClassifyString;#要處理的字串。
6923
						$conf["stringProcess"]["spiltString"]["spiltSymbol"]="ON DELETE ";#爲以哪個符號作爲分割
6924
						$foreignKeyOnDeleteString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
6925
						unset($conf["stringProcess"]["spiltString"]);
6926
 
6927
						#如果分割字串失敗
6928
						if($foreignKeyOnDeleteString["status"]=="false"){
6929
 
6930
							#設置執行不正常
6931
							$result["status"]="false";
6932
 
6933
							#設置錯誤訊息
6934
							$result["error"]=$foreignKeyOnDeleteString;
6935
 
6936
							#回傳結果
6937
							return $result;
6938
 
6939
							}#if end
6940
 
6941
						#檢查裏面是否含有 " ON UPDATE " 字樣
6942
						#函式說明:
6943
						#檢查字串裡面有無指定的關鍵字
6944
						#回傳結果::
6945
						#$result["status"],"true"代表執行成功,"false"代表執行失敗。
6946
						#$result["error"],錯誤訊息
6947
						#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
6948
						#必填參數:
6949
						$conf["search"]["findKeyWord"]["keyWord"]="ON UPDATE ";#想要搜尋的關鍵字
6950
						$conf["search"]["findKeyWord"]["string"]=$foreignKeyOnDeleteString["dataArray"][1];#要被搜尋的字串內容
6951
						#可省略參數:
6952
						#$conf["search"]["findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
6953
						$searchResult=search::findKeyWord($conf["search"]["findKeyWord"]);
6954
						unset($conf["search"]["findKeyWord"]);
6955
 
6956
						#如果分割字串失敗
6957
						if($searchResult["status"]=="false"){
6958
 
6959
							#設置執行不正常
6960
							$result["status"]="false";
6961
 
6962
							#設置錯誤訊息
6963
							$result["error"]=$searchResult;
6964
 
6965
							#回傳結果
6966
							return $result;
6967
 
6968
							}#if end
6969
 
6970
						#如果裏面含有 "ON UPDATE " 字樣
6971
						if($searchResult["founded"]=="true"){
6972
 
6973
							#我們只要取得 "ON UPDATE " 前面的內容
6974
							#用"ON UPDATE "來分割
6975
							#函式說明:
6976
							#將固定格式的字串分開,並回傳分開的結果。
6977
							#回傳的參數:
6978
							#$result["oriStr"],要分割的原始字串內容
6979
							#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
6980
							#$result["dataCounts"],爲總共分成幾段
6981
							#必填參數:
6982
							$conf["stringProcess"]["spiltString"]["stringIn"]=$foreignKeyOnDeleteString["dataArray"][1];#要處理的字串。
6983
							$conf["stringProcess"]["spiltString"]["spiltSymbol"]=" ON UPDATE ";#爲以哪個符號作爲分割
6984
							$foreignKeyOnDeleteString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
6985
							unset($conf["stringProcess"]["spiltString"]);
6986
 
6987
							#如果分割字串失敗
6988
							if($searchResult["status"]=="false"){
6989
 
6990
								#設置執行不正常
6991
								$result["status"]="false";
6992
 
6993
								#設置錯誤訊息
6994
								$result["error"]=$searchResult;
6995
 
6996
								#回傳結果
6997
								return $result;
6998
 
6999
								}#if end
7000
 
7001
							$foreignKeyOnDeleteString=$foreignKeyOnDeleteString["dataArray"][0];
7002
 
7003
							#將 $foreignKeyString[0] 的非必要字元踢除
7004
							#將「,」、「`」、「(」、「)」去掉 
7005
							#函式說明:
7006
							#處理字串避免網頁出錯
7007
							#回傳結果::
7008
							#$result,爲處理好的字串。
7009
							#必填參數:
7010
							$conf["stringProcess"]["correctCharacter"]["stringIn"]=$foreignKeyOnDeleteString;#爲要處理的字串
7011
							#可省略參數:
7012
							$conf["stringProcess"]["correctCharacter"]["selectedCharacter"]=array(",");#爲被選擇要處理的字串/字元,須爲陣列值。
7013
								#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
7014
							#$conf["stringProcess"]["correctCharacter"]["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
7015
							$tempOneleteAction=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);
7016
							unset($conf["stringProcess"]["correctCharacter"]);
7017
 
7018
							#如果處理字串失敗
7019
							if($tempOneleteAction["status"]=="false"){
7020
 
7021
								#設置執行不正常
7022
								$result["status"]="false";
7023
 
7024
								#設置錯誤訊息
7025
								$result["error"]=$tempOneleteAction;
7026
 
7027
								#回傳結果
7028
								return $result;
7029
 
7030
								}#if end
7031
 
7032
							#儲存外鍵移除後的動作
7033
							$result["foreignKey"]["onDeleteAction"][]=$tempOneleteAction["content"];
7034
 
7035
							#用 freign key 的名稱來紀錄外鍵移除後的動作
7036
							$result["foreignKey"]["onDeleteAction"][$thisForeignKeyColumnName["content"]]=$tempOneleteAction["content"];
7037
 
7038
							}#if end
7039
 
7040
						#反之裏面沒有 "ON UPDATE " 字樣
7041
						else{
7042
 
7043
							#將 $foreignKeyString[0] 的非必要字元踢除
7044
							#將「,」、「`」、「(」、「)」去掉 
7045
							#函式說明:
7046
							#處理字串避免網頁出錯
7047
							#回傳結果::
7048
							#$result,爲處理好的字串。
7049
							#必填參數:
7050
							$conf["stringProcess"]["correctCharacter"]["stringIn"]=$foreignKeyOnDeleteString["dataArray"][1];#爲要處理的字串
7051
							#可省略參數:
7052
							$conf["stringProcess"]["correctCharacter"]["selectedCharacter"]=array(",");#爲被選擇要處理的字串/字元,須爲陣列值。
7053
							#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
7054
							#$conf["stringProcess"]["correctCharacter"]["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
7055
							$tempOneleteAction=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);
7056
							unset($conf["stringProcess"]["correctCharacter"]);
7057
 
7058
							#如果處理字串失敗
7059
							if($tempOneleteAction["status"]=="false"){
7060
 
7061
								#設置執行不正常
7062
								$result["status"]="false";
7063
 
7064
								#設置錯誤訊息
7065
								$result["error"]=$tempOneleteAction;
7066
 
7067
								#回傳結果
7068
								return $result;
7069
 
7070
								}#if end
7071
 
7072
							#取得 外鍵移除後的動作
7073
							$result["foreignKey"]["OnDeleteAction"][]=$tempOneleteAction["content"];
7074
 
7075
							#用 freign key 的名稱來紀錄外鍵移除後的動作
7076
							$result["foreignKey"]["onDeleteAction"][$thisForeignKeyColumnName]=$tempOneleteAction["content"];
7077
 
7078
							}#else end
7079
 
7080
						}#if end
7081
 
7082
					}#if end
7083
 
7084
				}#if end
7085
 
7086
			}#foreach end
7087
 
7088
		#如果儲存索引鍵資訊的變數存在
7089
		if(isset($result["key"])){
7090
 
7091
			#如果索引鍵的數量大於0
7092
			if(count($result["key"])>0){
7093
 
7094
				#設置 $result["key"]["exist"] 為 "true";
7095
				$result["key"]["exist"]="true";
7096
 
7097
				}#if end
7098
 
7099
			#反之沒有索引鍵	
7100
			else{
7101
 
7102
				#設置 $result["key"]["exist"] 為 "false";
7103
				$result["key"]["exist"]="false";
7104
 
7105
				}#else end
7106
 
7107
			}#if end
7108
 
7109
		#如果 $result["foreignKey"]["constraintName"] 存在
7110
		if(isset($result["foreignKey"]["constraintName"])){
7111
 
7112
			#如果 $result["foreignKey"]["constraintName"] 數量大於 0
7113
			if(count($result["foreignKey"]["constraintName"])>0){
7114
 
7115
				#針對每個 $result["foreignKey"]["constraintName"][$k] 
7116
				for($i=0;$i<count($result["foreignKey"]["columnName"])/2;$i++){
7117
 
7118
					#指派 $result["foreignKey"]["constraintName"][$k] 的內容同時指派給 $result["foreignKey"]["constraintName"][$result["foreignKey"]["columnName"][$k]]
7119
					$result["foreignKey"]["constraintName"][$result["foreignKey"]["columnName"][$i]]=$result["foreignKey"]["constraintName"][$i];
7120
 
7121
					}#if end
7122
 
7123
				#將 $result["foreignKey"]["exist"] 設為 "true"
7124
				$result["foreignKey"]["exist"]="true";
7125
 
7126
				}#if end
7127
 
7128
			#反之 $result["foreignKey"]["exist"] 數量等於 0
7129
			else{
7130
 
7131
				#將 $result["foreignKey"]["exist"] 設為 "fasle"
7132
				$result["foreignKey"]["exist"]="false";
7133
 
7134
				}#else end
7135
 
7136
			}#if end	
7137
 
7138
		#反之 $result["foreignKey"]["constraintName"] 不存在
7139
		else{
7140
 
7141
			#將 $result["foreignKey"]["exist"] 設為 "fasle"
7142
			$result["foreignKey"]["exist"]="false";
7143
 
7144
			}#else end
7145
 
7146
		#執行到這邊代表執行成功
7147
 
7148
		#設置成功訊息
7149
		$result["status"]="true";
7150
 
7151
		#回傳結果
7152
		return $result;
7153
 
7154
		}#function getTableColumnDetailInfo end
7155
 
7156
	/*
7157
	#函式說明:
7158
	#移除資料表單1欄位的外鍵
7159
	#回傳結果:
7160
	#$result["status"],"true",代表執行成功;"false"代表執行失敗
7161
	#$result["function"],當前執行的函數名稱.
7162
	#$result["error"],錯誤訊息陣列
7163
	#$result["sql"],執行的sql字串.
7164
	#必填參數:
7165
	#$conf["dbAddress"],字串,爲mysql-Server的位置
7166
	$conf["dbAddress"]=$dbAddress;
7167
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號
7168
	$conf["dbAccount"]=$dbAccount;
7169
	#$conf["selectedDataBaseName"],字串,爲目標資料表所屬的資料庫.
7170
	$conf["selectedDataBaseName"]="";
7171
	#$conf["selectedDataTableName"],字串,爲目標資料表所屬的資料庫.
7172
	$conf["selectedDataTableName"]="";
7173
	#$conf["erasedForeignKeyColumnConstraintName"],字串,要移除外鍵欄位的CONSTRAINT名稱.
7174
	$conf["erasedForeignKeyColumnConstraintName"]="";
7175
	#可省略參數: 
7176
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼.
7177
	#$conf["dbPassword"]=$dbPassword;
7178
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,預設為3306.
7179
	#$conf["dbPort"]="3306";
7180
	#參考資料:
7181
	#無.
7182
	#備註:
7183
	#無.
7184
	*/ 
7185
	public static function eraseForeignKey($conf){
7186
 
7187
		#初始化要回傳的內容
7188
		$result=array();
7189
 
7190
		#取得當前執行的函數名稱
7191
		$result["function"]=__FUNCTION__;
7192
 
7193
		#如果 $conf 不為陣列
7194
		if(gettype($conf)!="array"){
7195
 
7196
			#設置執行失敗
7197
			$result["status"]="false";
7198
 
7199
			#設置執行錯誤訊息
7200
			$result["error"][]="\$conf變數須為陣列形態";
7201
 
7202
			#如果傳入的參數為 null
7203
			if($conf==null){
7204
 
7205
				#設置執行錯誤訊息
7206
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
7207
 
7208
				}#if end
7209
 
7210
			#回傳結果
7211
			return $result;
7212
 
7213
			}#if end
7214
 
7215
		#函式說明:
7216
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
7217
		#回傳結果:
7218
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
7219
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
7220
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
7221
		#必填參數:
7222
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
7223
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("dbAddress","dbAccount","selectedDataBaseName","selectedDataTableName","erasedForeignKeyColumnConstraintName");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
7224
		#可省略參數:
7225
		#$conf["variableType"]=array();#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
7226
		#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
7227
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
7228
		unset($conf["variableCheck"]["isexistMuti"]);
7229
 
7230
		#如果檢查不通過
7231
		if($checkResult["passed"]=="false"){
7232
 
7233
			#設置執行失敗的訊息
7234
			$result["status"]="false";
7235
 
7236
			#設置錯誤訊息
7237
			$result["error"]=$checkResult;
7238
 
7239
			#回傳結果
7240
			return $result;
7241
 
7242
			}#if end
7243
 
7244
		#移除foreignKey的語法
7245
		$sql="ALTER TABLE ".$conf["selectedDataBaseName"].".".$conf["selectedDataTableName"]." DROP FOREIGN KEY ".$conf["erasedForeignKeyColumnConstraintName"];
7246
 
7247
		#函式說明:
7248
		#執行mysql查詢的指令
7249
		#回傳結果::
7250
		#$result["status"],"true"為執行成功;"false"為執行失敗。
7251
		#$result["error"],錯誤訊息的陣列
7252
		#查詢號的解果,需要解析。
7253
		#必填參數:
7254
		$conf["db"]["execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
7255
		$conf["db"]["execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
7256
		$conf["db"]["execMysqlQuery"]["dbSql"]=$sql;#要執行sql語法
7257
		#可省略參數: 
7258
 
7259
		#如果有設定密碼
7260
		if(isset($conf["dbPassword"])){
7261
 
7262
			$conf["db"]["execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
7263
 
7264
			}#if end
7265
 
7266
		#如果有設定 $conf["dbPort"]	
7267
		if(isset($conf["dbPort"])){
7268
 
7269
			#設定 $conf["dbPort"]
7270
			$conf["db"]["execMysqlQuery"]["dbPort"]=$conf["dbPort"];
7271
 
7272
			}#if end	
7273
 
7274
		$queryResult=db::execMysqlQuery($conf["db"]["execMysqlQuery"]);
7275
		unset($conf["db"]["execMysqlQuery"]);
7276
 
7277
		#取得執行的sql語法
7278
		$result["sql"]=$queryResult["queryString"];
7279
 
7280
		#如果執行sql語法錯誤
7281
		if($queryResult["status"]=="false"){
7282
 
7283
			#設置執行失敗的識別
7284
			$result["status"]="false";
7285
 
7286
			#設置執行錯誤資訊
7287
			$result["error"]=$queryResult;
7288
 
7289
			#回傳結果
7290
			return $result;
7291
 
7292
			}#if end
7293
 
7294
		#執行到這邊代表執行無誤
7295
 
7296
		#設置執行成功的識別
7297
		$result["status"]="true";
7298
 
7299
		#回傳結果
7300
		return $result;
7301
 
7302
		}#function eraseForeignKey end
7303
 
7304
	/*
7305
	#函式說明:
7306
	#移除資料表單1欄位的索引鍵
7307
	#回傳結果:
7308
	#$result["status"],"true",代表執行成功;"false"代表執行失敗
7309
	#$result["error"],錯誤訊息陣列
7310
	#$result["sql"],執行的sql字串.
7311
	#必填參數:
7312
	$conf["dbAddress"],字串,爲mysql-Server的位置.
7313
	$conf["dbAddress"]=$dbAddress;
7314
	$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號.
7315
	$conf["dbAccount"]=$dbAccount;
7316
	$conf["selectedDataBaseName"],字串,爲目標資料表所屬的資料庫.
7317
	$conf["selectedDataBaseName"]="";
7318
	$conf["selectedDataTableName"],字串,爲目標資料表所屬的資料庫.
7319
	$conf["selectedDataTableName"]="";
7320
	$conf["erasedIndexKeyColumnConstraintName"],字串,要移除外鍵欄位的CONSTRAINT名稱.
7321
	$conf["erasedIndexKeyColumnConstraintName"]="";
7322
	#可省略參數: 
7323
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼.
7324
	#$conf["dbPassword"]=$dbPassword;
7325
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,預設為3306.
7326
	#$conf["dbPort"]="3306";
7327
	#參考資料:
7328
	#無.
7329
	#備註:
7330
	#無.
7331
	*/ 
7332
	public static function eraseIndexKey($conf){
7333
 
7334
		#初始化要回傳的內容
7335
		$result=array();
7336
 
7337
		#取得當前執行的函數名稱
7338
		$result["function"]=__FUNCTION__;
7339
 
7340
		#如果 $conf 不為陣列
7341
		if(gettype($conf)!="array"){
7342
 
7343
			#設置執行失敗
7344
			$result["status"]="false";
7345
 
7346
			#設置執行錯誤訊息
7347
			$result["error"][]="\$conf變數須為陣列形態";
7348
 
7349
			#如果傳入的參數為 null
7350
			if($conf==null){
7351
 
7352
				#設置執行錯誤訊息
7353
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
7354
 
7355
				}#if end
7356
 
7357
			#回傳結果
7358
			return $result;
7359
 
7360
			}#if end
7361
 
7362
		#函式說明:
7363
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
7364
		#回傳結果:
7365
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
7366
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
7367
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
7368
		#必填參數:
7369
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
7370
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("dbAddress","dbAccount","selectedDataBaseName","selectedDataTableName","erasedIndexKeyColumnConstraintName");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
7371
		#可省略參數:
7372
		#$conf["variableType"]=array();#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
7373
		#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
7374
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
7375
		unset($conf["variableCheck"]["isexistMuti"]);
7376
 
7377
		#檢查有誤
7378
		if($checkResult["status"]=="false"){
7379
 
7380
			#設置執行失敗的訊息
7381
			$result["status"]="false";
7382
 
7383
			#設置錯誤訊息
7384
			$result["error"]=$checkResult;
7385
 
7386
			#回傳結果
7387
			return $result;
7388
 
7389
			}#if end
7390
 
7391
		#如果檢查不通過
7392
		if($checkResult["passed"]=="false"){
7393
 
7394
			#設置執行失敗的訊息
7395
			$result["status"]="false";
7396
 
7397
			#設置錯誤訊息
7398
			$result["error"]=$checkResult;
7399
 
7400
			#回傳結果
7401
			return $result;
7402
 
7403
			}#if end
7404
 
7405
		#移除Key的語法
7406
		$sql="ALTER TABLE ".$conf["selectedDataBaseName"].".".$conf["selectedDataTableName"]." DROP INDEX `".$conf["erasedIndexKeyColumnConstraintName"]."`";
7407
 
7408
		#函式說明:
7409
		#執行mysql查詢的指令
7410
		#回傳結果::
7411
		#$result["status"],"true"為執行成功;"false"為執行失敗。
7412
		#$result["error"],錯誤訊息的陣列
7413
		#查詢號的解果,需要解析。
7414
		#必填參數:
7415
		$conf["db"]["execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
7416
		$conf["db"]["execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
7417
		$conf["db"]["execMysqlQuery"]["dbSql"]=$sql;#要執行sql語法
7418
		#可省略參數: 
7419
 
7420
		#如果有設定密碼
7421
		if(isset($conf["dbPassword"])){
7422
 
7423
			$conf["db"]["execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
7424
 
7425
			}#if end
7426
 
7427
		#如果有設定 $conf["dbPort"]	
7428
		if(isset($conf["dbPort"])){
7429
 
7430
			#設定 $conf["dbPort"]
7431
			$conf["db"]["execMysqlQuery"]["dbPort"]=$conf["dbPort"];
7432
 
7433
			}#if end	
7434
 
7435
		$queryResult=db::execMysqlQuery($conf["db"]["execMysqlQuery"]);
7436
		unset($conf["db"]["execMysqlQuery"]);
7437
 
7438
		#取得執行的sql語法
7439
		$result["sql"]=$queryResult["queryString"];
7440
 
7441
		#如果執行sql語法錯誤
7442
		if($queryResult["status"]=="false"){
7443
 
7444
			#設置執行失敗的識別
7445
			$result["status"]="false";
7446
 
7447
			#設置執行錯誤資訊
7448
			$result["error"]=$queryResult;
7449
 
7450
			#回傳結果
7451
			return $result;
7452
 
7453
			}#if end
7454
 
7455
		#執行到這邊代表執行無誤
7456
 
7457
		#設置執行失敗的識別
7458
		$result["status"]="true";
7459
 
7460
		#回傳結果
7461
		return $result;
7462
 
7463
		}#function eraseIndexKey end
7464
 
7465
	/*
7466
	#函式說明:
7467
	#移除資料表的欄位
7468
	#回傳結果:
7469
	#$result["status"],若成功則爲"true",失敗則爲,"false"
7470
	#$result["error"],錯誤訊息.
7471
	#$result["function"],當前執行的函數名稱.
7472
	#必填參數:
7473
	#$conf["dbAddress"],字串,爲mysql-Server的位置.
7474
	$conf["dbAddress"]=$dbAddress;
7475
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號.
7476
	$conf["dbAccount"]=$dbAccount;
7477
	#$conf["selectedDataBaseName"],字串,爲目標資料表所屬的資料庫.
7478
	$conf["selectedDataBaseName"]="";
7479
	#$conf["selectedDataTableName"],字串,爲目標資料表所屬的資料庫.
7480
	$conf["selectedDataTableName"]="";
7481
	#$conf["removedColumnName"],字串,要移除的欄位名稱.
7482
	$conf["removedColumnName"]="";
7483
	#可省略參數: 
7484
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼.
7485
	#$conf["dbPassword"]=$dbPassword;
7486
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,預設為3306.
7487
	#$conf["dbPort"]="3306";
7488
	#參考資料:
7489
	#無.
7490
	#備註:
7491
	#無.
7492
	*/
7493
	public static function dropColumn($conf){
7494
 
7495
		#初始化要回傳的內容
7496
		$result=array();
7497
 
7498
		#取得當前執行的函數名稱
7499
		$result["function"]=__FUNCTION__;
7500
 
7501
		#如果 $conf 不為陣列
7502
		if(gettype($conf)!="array"){
7503
 
7504
			#設置執行失敗
7505
			$result["status"]="false";
7506
 
7507
			#設置執行錯誤訊息
7508
			$result["error"][]="\$conf變數須為陣列形態";
7509
 
7510
			#如果傳入的參數為 null
7511
			if($conf==null){
7512
 
7513
				#設置執行錯誤訊息
7514
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
7515
 
7516
				}#if end
7517
 
7518
			#回傳結果
7519
			return $result;
7520
 
7521
			}#if end
7522
 
7523
		#函式說明:
7524
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
7525
		#回傳結果:
7526
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
7527
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
7528
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
7529
		#必填參數:
7530
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
7531
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("dbAddress","dbAccount","selectedDataBaseName","selectedDataTableName","removedColumnName");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
7532
		#可省略參數:
7533
		$conf["variableType"]=array("string","string","string","string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
7534
		#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
7535
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
7536
		unset($conf["variableCheck"]["isexistMuti"]);
7537
 
7538
		#如果檢查失敗
7539
		if($checkResult["status"]=="false"){
7540
 
7541
			#設置執行失敗的訊息
7542
			$result["status"]="false";
7543
 
7544
			#設置錯誤訊息
7545
			$result["error"]=$checkResult;
7546
 
7547
			#回傳結果
7548
			return $result;
7549
 
7550
			}#if end
7551
 
7552
		#如果檢查不通過
7553
		if($checkResult["passed"]=="false"){
7554
 
7555
			#設置執行失敗的訊息
7556
			$result["status"]="false";
7557
 
7558
			#設置錯誤訊息
7559
			$result["error"]=$checkResult;
7560
 
7561
			#回傳結果
7562
			return $result;
7563
 
7564
			}#if end
7565
 
7566
		#函式說明:
7567
		#取得資料表所有欄位的詳細資訊
7568
		#回傳的內容:
7569
		#$result["status"],執行結果,"true"代表執行成功;"false"代表執行失敗
7570
		#$result["error"],錯誤訊息陣列
7571
		#$result["sql"],執行的sql語法
7572
		#$result["oriInput"],原始的資料表欄位資訊
7573
		#$result["everyLine"],逐行的欄位資訊
7574
		#$result["tableName"],當前查詢的資料表名稱
7575
		#$result["engine"],資料表使用的儲存引擎
7576
		#$result["charset"],資料表預設的編碼
7577
		#$result["columnName"][$i],各欄位的名稱陣列,$i爲0開始的數字,也可以使用欄位的名稱。
7578
		#$result["columnVarTypeAndLengthLimit"][$i],各欄位儲存的變數形態與長度限制,$i爲0開始的數字,也可以使用欄位的名稱。
7579
		#$result["columnNotNull"][$i],各欄位是否可以不爲null,"true"爲可以不爲null;"false"爲可以爲"null",$i爲0開始的數字,也可以使用欄位的名稱。
7580
		#$result["columnAutoIncrement"][$i],各欄位是否會自動加1,"true"爲會;"false"爲不會,$i爲0開始的數字,也可以使用欄位的名稱。
7581
		#$result["columnDefault"][$i],各欄位的預設內容,若無則爲"沒有指定",$i爲0開始的數字,也可以使用欄位的名稱。
7582
		#$result["columnOnUpdateAction"][$i],當資料有修改時,該欄位的內容要怎麼因應,$i爲0開始的數字,也可以使用欄位的名稱。
7583
		#$result["columnCharacterSet"][$i],各欄位使用的CharacterSet,$i爲0開始的數字,也可以使用欄位的名稱。
7584
		#$result["columnCollate"][$i],各欄位使用的Collate,$i爲0開始的數字,也可以使用欄位的名稱。
7585
		#$result["key"]["exist"],該資料表是否有索引鍵,"true"代表有;"false"代表沒有。
7586
		#$result["key"][$j],該資料表的索引鍵陣列,$j爲0開始的數字,也可以使用欄位的名稱。
7587
		#$result["keyConstraintName"][$j],該資料表用於識別索引鍵的CONSTRAINT名稱陣列,$j爲0開始的數字,也可以使用欄位的名稱。
7588
		#$result["primaryKey"],該資料表的主鍵
7589
		#$result["foreignKey"]["exist"],該資料表是否有foreign key,"true"代表有;"fasle"代表沒有。
7590
		#$result["foreignKey"]["constraintName"][$k],用來識別外鍵的CONSTRAINT名稱陣列,$k爲0開始的數字,也可以使用欄位的名稱。
7591
		#$result["foreignKey"]["columnName"][$k],外鍵的名稱陣列,$k爲0開始的數字,也可以使用欄位的名稱。
7592
		#$result["foreignKey"]["referencesTable"][$k],外鍵參照的欄位,$k爲0開始的數字
7593
		#$result["foreignKey"]["referencesColumn"][$k],外鍵參照的欄位屬於哪個資料表,$k爲0開始的數字
7594
		#$result["columnOnUpdateAction"][$i],當參照的欄位資料更新時,會怎麼同步,$i爲0開始的數字,"沒有指定"為沒有設定
7595
		#$result["columnOnDeleteAction"][$i],當參照的欄位資料移除時,會怎麼同步,$i爲0開始的數字,"沒有指定"為沒有設定
7596
		#必填參數:
7597
		$conf["db"]["getTableColumnDetailInfo"]["dbAddress"]=$conf["dbAddress"];#資料庫的網路位置
7598
		$conf["db"]["getTableColumnDetailInfo"]["dbAccount"]=$conf["dbAccount"];#連線到資料庫要用的帳號
7599
		$conf["db"]["getTableColumnDetailInfo"]["selectedDataBase"]=$conf["selectedDataBaseName"];#連線到資料庫要選擇的資料庫
7600
		$conf["db"]["getTableColumnDetailInfo"]["selectedDataTable"]=$conf["selectedDataTableName"];#連線到資料庫要檢視的資料表
7601
		#可省略參數:
7602
 
7603
		#如果 $conf["dbPassword"] 有設置
7604
		if(isset($conf["dbPassword"])){
7605
 
7606
			$conf["db"]["getTableColumnDetailInfo"]["dbPassword"]=$conf["dbPassword"];#連線到資料庫要用的密碼
7607
 
7608
			}#if end
7609
 
7610
		#如果有設定 $conf["dbPort"]	
7611
		if(isset($conf["dbPort"])){
7612
 
7613
			#設定 $conf["dbPort"]
7614
			$conf["db"]["getTableColumnDetailInfo"]["dbPort"]=$conf["dbPort"];
7615
 
7616
			}#if end	
7617
 
7618
		$tableDetail=db::getTableColumnDetailInfo($conf["db"]["getTableColumnDetailInfo"]);
7619
		unset($conf["db"]["getTableColumnDetailInfo"]);
7620
 
7621
		#如果取得資料表結構詳細資料失敗
7622
		if($tableDetail["status"]=="false"){
7623
 
7624
			#設置執行失敗的訊息
7625
			$result["status"]="false";
7626
 
7627
			#設置錯誤訊息
7628
			$result["error"]=$tableDetail;
7629
 
7630
			#回傳結果
7631
			return $result;
7632
 
7633
			}#if end
7634
 
7635
		#var_dump($tableDetail["foreignKey"]);
7636
 
7637
		#判斷該欄位是否爲 foreign key
7638
		if(isset($tableDetail["foreignKey"]["columnName"][$conf["removedColumnName"]])){
7639
 
7640
			#代表該欄位等於 foreign key 
7641
 
7642
			#先移除foreign key...
7643
			#函式說明:
7644
			#移除資料表單1欄位的外鍵
7645
			#回傳結果:
7646
			#$result["status"],"true",代表執行成功;"false"代表執行失敗
7647
			#$result["error"],錯誤訊息陣列
7648
			#必填參數:
7649
			$conf["db"]["eraseForeignKey"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
7650
			$conf["db"]["eraseForeignKey"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
7651
			$conf["db"]["eraseForeignKey"]["selectedDataBaseName"]=$conf["selectedDataBaseName"];#爲目標資料表所屬的資料庫
7652
			$conf["db"]["eraseForeignKey"]["selectedDataTableName"]=$conf["selectedDataTableName"];#爲目標資料表所屬的資料庫
7653
			$conf["db"]["eraseForeignKey"]["erasedForeignKeyColumnConstraintName"]=$tableDetail["foreignKey"]["constraintName"][$conf["removedColumnName"]];#要移除外鍵欄位的CONSTRAINT名稱
7654
			#可省略參數: 
7655
 
7656
			#如果 $conf["dbPassword"] 有設置
7657
			if(isset($conf["dbPassword"])){
7658
 
7659
				$conf["db"]["eraseForeignKey"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
7660
 
7661
				}#if end
7662
 
7663
			#如果有設定 $conf["dbPort"]	
7664
			if(isset($conf["dbPort"])){
7665
 
7666
				#設定 $conf["dbPort"]
7667
				$conf["db"]["eraseForeignKey"]["dbPort"]=$conf["dbPort"];
7668
 
7669
				}#if end	
7670
 
7671
			$eraseForeignKeyResult=db::eraseForeignKey($conf["db"]["eraseForeignKey"]);
7672
			unset($conf["db"]["eraseForeignKey"]);
7673
 
7674
			#var_dump($eraseForeignKeyResult);
7675
 
7676
			#如果執行失敗
7677
			if($eraseForeignKeyResult["status"]=="false"){
7678
 
7679
				#var_dump($eraseForeignKeyResult);
7680
 
7681
				#設置錯誤識別
7682
				$result["status"]="fasle";
7683
 
7684
				#設置錯誤提示
7685
				$result["error"]=$eraseForeignKeyResult;
7686
 
7687
				#回傳結果
7688
				return $result;
7689
 
7690
				}#if end
7691
 
7692
			}#if end
7693
 
7694
		#如果要移除欄位是index
7695
		if(isset($tableDetail["key"][$conf["removedColumnName"]])){
7696
 
7697
			#移除索引鍵
7698
			#函式說明:
7699
			#移除資料表單1欄位的索引鍵
7700
			#回傳結果:
7701
			#$result["status"],"true",代表執行成功;"false"代表執行失敗
7702
			#$result["error"],錯誤訊息陣列
7703
			#必填參數:
7704
			$conf["db"]["eraseIndexKey"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
7705
			$conf["db"]["eraseIndexKey"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
7706
			$conf["db"]["eraseIndexKey"]["selectedDataBaseName"]=$conf["selectedDataBaseName"];#爲目標資料表所屬的資料庫
7707
			$conf["db"]["eraseIndexKey"]["selectedDataTableName"]=$conf["selectedDataTableName"];#爲目標資料表所屬的資料庫
7708
			$conf["db"]["eraseIndexKey"]["erasedIndexKeyColumnConstraintName"]=$tableDetail["keyConstraintName"][$conf["removedColumnName"]];#要移除索引鍵欄位的CONSTRAINT名稱
7709
			#可省略參數: 
7710
 
7711
			#如果 $conf["dbPassword"] 有設置
7712
			if(isset($conf["dbPassword"])){
7713
 
7714
				$conf["db"]["eraseIndexKey"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
7715
 
7716
				}#if end
7717
 
7718
			#如果有設定 $conf["dbPort"]	
7719
			if(isset($conf["dbPort"])){
7720
 
7721
				#設定 $conf["dbPort"]
7722
				$conf["db"]["eraseIndexKey"]["dbPort"]=$conf["dbPort"];
7723
 
7724
				}#if end
7725
 
7726
			$eraseIndexKeyResult=db::eraseIndexKey($conf["db"]["eraseIndexKey"]);
7727
			unset($conf["db"]["eraseIndexKey"]);
7728
 
7729
			#如果執行失敗
7730
			if($eraseIndexKeyResult["status"]=="false"){
7731
 
7732
				#var_dump($eraseIndexKeyResult);
7733
 
7734
				#設置錯誤識別
7735
				$result["status"]="fasle";
7736
 
7737
				#設置錯誤提示
7738
				$result["error"]=$eraseIndexKeyResult;
7739
 
7740
				#回傳結果
7741
				return $result;
7742
 
7743
				}#if end
7744
 
7745
			}#if end		
7746
 
7747
		#組合sql語言
7748
		$sql="alter table ".$conf["selectedDataBaseName"].".".$conf["selectedDataTableName"]." drop `".$conf["removedColumnName"]."`;";
7749
 
7750
		#函式說明:
7751
		#執行mysql指令
7752
		#回傳結果::
7753
		#$result["status"],"true"為執行成功;"false"為執行失敗。
7754
		#$result["error"],錯誤訊息的陣列
7755
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
7756
		#查詢號的解果,需要解析。
7757
		#必填參數:
7758
		$conf["db"]["execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
7759
		$conf["db"]["execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
7760
		$conf["db"]["execMysqlQuery"]["dbSql"]=$sql;#要執行sql語法
7761
		#可省略參數: 
7762
 
7763
		#如果有設定連線密碼
7764
		if(isset($conf["dbPassword"])){
7765
 
7766
			#就套用密碼
7767
			$conf["db"]["execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
7768
 
7769
			}#if end
7770
 
7771
		#如果有設定 $conf["dbPort"]	
7772
		if(isset($conf["dbPort"])){
7773
 
7774
			#設定 $conf["dbPort"]
7775
			$conf["db"]["execMysqlQuery"]["dbPort"]=$conf["dbPort"];
7776
 
7777
			}#if end
7778
 
7779
		$queryResult=db::execMysqlQuery($conf["db"]["execMysqlQuery"]);
7780
		unset($conf["db"]["execMysqlQuery"]);
7781
 
7782
		#如果執行失敗
7783
		if($queryResult["status"]=="false"){
7784
 
7785
			#設置執行失敗
7786
			$result["status"]="false";
7787
 
7788
			#取得錯誤訊息
7789
			$result["error"]=$queryResult;
7790
 
7791
			#回傳結果
7792
			return $result;
7793
 
7794
			}#if end
7795
 
7796
		#設置執行成功
7797
		$result["status"]="true";
7798
 
7799
		#回傳結果
7800
		return $result;
7801
 
7802
		}#function dropColumn end
7803
 
7804
	/*
7805
	#函式說明:
7806
	#清空資料表儲存的資料
7807
	#回傳結果::
7808
	#$result["status"],執行成功與否,"true"代表執行成功;"fasle"代表執行失敗
7809
	#$result["error"],錯誤訊息
7810
	#$result["function"],當前執行的涵式.
7811
	#必填參數:
7812
	$conf["dbAddress"]="字串,爲mysql-Server的位置
7813
	$conf["dbAddress"]=$dbAddress;
7814
	$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號
7815
	$conf["dbAccount"]=$dbAccount;
7816
	$conf["dbName"]=$dbName;#爲目標資料表所屬的資料庫
7817
	$conf["dtName"]="";#爲要移除的資料表名稱
7818
	#可省略參數:		
7819
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼.
7820
	#$conf["dbPassword"]=$dbPassword;
7821
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,預設為3306.
7822
	#$conf["dbPort"]="3306";
7823
	#參考資料:
7824
	#https://dev.mysql.com/doc/refman/5.0/en/truncate-table.html
7825
	#備註:
7826
	#無.
7827
	*/
7828
	public static function emptyTable($conf){
7829
 
7830
		#初始化要回傳的內容
7831
		$result=array();
7832
 
7833
		#取得當前執行的函數名稱
7834
		$result["function"]=__FUNCTION__;
7835
 
7836
		#如果 $conf 不為陣列
7837
		if(gettype($conf)!="array"){
7838
 
7839
			#設置執行失敗
7840
			$result["status"]="false";
7841
 
7842
			#設置執行錯誤訊息
7843
			$result["error"][]="\$conf變數須為陣列形態";
7844
 
7845
			#如果傳入的參數為 null
7846
			if($conf==null){
7847
 
7848
				#設置執行錯誤訊息
7849
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
7850
 
7851
				}#if end
7852
 
7853
			#回傳結果
7854
			return $result;
7855
 
7856
			}#if end
7857
 
7858
		#函式說明:
7859
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
7860
		#回傳結果:
7861
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
7862
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
7863
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
7864
		#必填參數:
7865
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
7866
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("dbAddress","dbAccount","dbName","dtName");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
7867
		#可省略參數:
7868
		#$conf["variableType"]=array();#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
7869
		#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
7870
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
7871
		unset($conf["variableCheck"]);
7872
 
7873
		#如果檢查不通過
7874
		if($checkResult["status"]=="false"){
7875
 
7876
			#設置錯誤識別
7877
			$result["status"]="fasle";
7878
 
7879
			#設置錯誤訊息
7880
			$result["error"]=$checkResult;
7881
 
7882
			#回傳結果
7883
			return $result;
7884
 
7885
			}#if end
7886
 
7887
		#如果檢查不通過
7888
		if($checkResult["passed"]=="false"){
7889
 
7890
			#設置錯誤識別
7891
			$result["status"]="fasle";
7892
 
7893
			#設置錯誤訊息
7894
			$result["error"]=$checkResult;
7895
 
7896
			#回傳結果
7897
			return $result;
7898
 
7899
			}#if end
7900
 
7901
		#設定要執行的sql語法
7902
		$sql="TRUNCATE TABLE ".$conf["dbName"].".".$conf["dtName"].";";
7903
 
7904
		#函式說明:
7905
		#執行mysql指令
7906
		#回傳結果::
7907
		#$result["status"],"true"為執行成功;"false"為執行失敗。
7908
		#$result["error"],錯誤訊息的陣列
7909
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
7910
		#$result["queryString"],mysql查詢的語言
7911
		#查詢號的解果,需要解析。
7912
		#必填參數:
7913
		$conf["db.execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
7914
		$conf["db.execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
7915
		$conf["db.execMysqlQuery"]["dbSql"]=$sql;#要執行sql語法
7916
		#可省略參數: 
7917
 
7918
		#如果 $conf["dbPassword"] 有設置
7919
		if(isset($conf["dbPassword"])){
7920
 
7921
			$conf["db.execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
7922
 
7923
			}#if end
7924
 
7925
		#如果有設定 $conf["dbPort"]	
7926
		if(isset($conf["dbPort"])){
7927
 
7928
			#設定 $conf["dbPort"]
7929
			$conf["db.execMysqlQuery"]["dbPort"]=$conf["dbPort"];
7930
 
7931
			}#if end				
7932
 
7933
		$queryResult=db::execMysqlQuery($conf["db.execMysqlQuery"]);
7934
		unset($conf["db.execMysqlQuery"]);
7935
 
7936
		#如果 $queryResult["status"] 為 "false"
7937
		if($queryResult["status"]=="false"){
7938
 
7939
			#函式說明:
7940
			#透過一筆筆將資料表刪除後,重設識別欄位的自動增量欄位起始值為1
7941
			#回傳結果:
7942
			#$result["status"],執行是否正常,"true"代表執行正常,"false"代表執行失敗.
7943
			#$result["error"],錯誤訊息.
7944
			#$result["function"],當前執行的函數名稱.
7945
			#$result["sql"],執行的sql語法陣列.
7946
			#必填參數:
7947
			#$conf["db.eraseDataInTableThenResetAutoIncrement"]["dbAddress"],字串,連線到資料庫的位置.
7948
			$conf["db.eraseDataInTableThenResetAutoIncrement"]["dbAddress"]=$conf["dbAddress"];
7949
			#$conf["db.eraseDataInTableThenResetAutoIncrement"]["dbAccount"],字串,連線到資料庫的帳號.
7950
			$conf["db.eraseDataInTableThenResetAutoIncrement"]["dbAccount"]=$conf["dbAccount"];
7951
			#$conf["db.eraseDataInTableThenResetAutoIncrement"]["dbName"],字串,要連線到哪個資料庫.
7952
			$conf["db.eraseDataInTableThenResetAutoIncrement"]["dbName"]=$conf["dbName"];
7953
			#$conf["db.eraseDataInTableThenResetAutoIncrement"]["dtName"],字串,要重設重設識別欄位的自動增量為0的資料表名稱.
7954
			$conf["db.eraseDataInTableThenResetAutoIncrement"]["dtName"]=$conf["dtName"];
7955
			#可省略參數:
7956
 
7957
			#如果 $conf["dbPassword"] 有設置
7958
			if(isset($conf["dbPassword"])){
7959
 
7960
				#$conf["db.eraseDataInTableThenResetAutoIncrement"]["dbPassword"],字串,連線到資料庫的密碼.
7961
				$conf["db.eraseDataInTableThenResetAutoIncrement"]["dbPassword"]=$conf["dbPassword"];
7962
 
7963
				}#if end
7964
 
7965
			#如果有設定 $conf["dbPort"]	
7966
			if(isset($conf["dbPort"])){
7967
 
7968
				#設定 $conf["dbPort"]
7969
				$conf["db.eraseDataInTableThenResetAutoIncrement"]["dbPort"]=$conf["dbPort"];
7970
 
7971
				}#if end	
7972
 
7973
			#參考資料:
7974
			#http://dev.mysql.com/doc/refman/5.0/en/alter-table.html
7975
			#參考語法:
7976
			#ALTER TABLE dbName.dtName AUTO_INCREMENT = 1;
7977
			$eraseDataInTableThenResetAutoIncrementResult=db::eraseDataInTableThenResetAutoIncrement($conf["db.eraseDataInTableThenResetAutoIncrement"]);
7978
			unset($conf["db.eraseDataInTableThenResetAutoIncrement"]);
7979
 
7980
			#如果 透過一筆筆將資料表刪除後,重設識別欄位的自動增量欄位起始值為1 失敗
7981
			if($eraseDataInTableThenResetAutoIncrementResult["status"]=="false"){
7982
 
7983
				#設置錯誤識別
7984
				$result["status"]="false";
7985
 
7986
				#設置錯誤訊息
7987
				$result["error"]=$eraseDataInTableThenResetAutoIncrementResult;
7988
 
7989
				#回傳結果
7990
				return $result;
7991
 
7992
				}#if end
7993
 
7994
			}#if end	
7995
 
7996
		#值行到這邊代表執行成功
7997
		$result["status"]="true";
7998
 
7999
		#回傳結果
8000
		return $result;
8001
 
8002
		}#function emptyTable end
8003
 
8004
	/*
8005
	#函式說明:
8006
	#更改資料庫的名稱 
8007
	#回傳結果::
8008
	#$result["status"],"true"代表執行成功
8009
	#$result["function"],當前執行的函數名稱.
8010
	#$result["error"],錯誤訊息陣列.
8011
	#必填參數:
8012
	#$conf["editedDatabaseName"],爲要更改的資料庫名稱.
8013
	$conf["editedDatabaseName"]=$editedDbName;
8014
	#$conf["newDatabaseName"],新的資料庫名稱
8015
	$conf["newDatabaseName"]="";
8016
	#$conf["dbAccount"],爲用於連入資料庫server時要使用的帳號
8017
	$conf["dbAccount"]=$dbAccount;
8018
	#$conf["dbAddress"],爲資料庫server的位置
8019
	$conf["dbAddress"]=$dbAddress;
8020
	#$conf["fileArgu"],字串,__FILE__的內容.
8021
	$conf["fileArgu"]=__FILE__;
8022
	#可省略參數:
8023
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼.
8024
	#$conf["dbPassword"]=$dbPassword;
8025
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,預設為3306.
8026
	#$conf["dbPort"]="3306";
8027
	#參考資料:
8028
	#http://stackoverflow.com/questions/1708651/how-can-i-change-case-of-database-name-in-mysql
8029
	#備註:
8030
	#無.
8031
	*/
8032
	public static function editDatabaseName($conf){
8033
 
8034
		#初始化要回傳的內容
8035
		$result=array();
8036
 
8037
		#取得當前執行的函數名稱
8038
		$result["function"]=__FUNCTION__;
8039
 
8040
		#如果 $conf 不為陣列
8041
		if(gettype($conf)!="array"){
8042
 
8043
			#設置執行失敗
8044
			$result["status"]="false";
8045
 
8046
			#設置執行錯誤訊息
8047
			$result["error"][]="\$conf變數須為陣列形態";
8048
 
8049
			#如果傳入的參數為 null
8050
			if($conf==null){
8051
 
8052
				#設置執行錯誤訊息
8053
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
8054
 
8055
				}#if end
8056
 
8057
			#回傳結果
8058
			return $result;
8059
 
8060
			}#if end
8061
 
8062
		#函式說明:
8063
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
8064
		#回傳結果:
8065
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
8066
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
8067
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
8068
		#必填參數:
8069
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
8070
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("fileArgu","editedDatabaseName","newDatabaseName","dbAccount","dbAddress");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
8071
		#可省略參數:
8072
		#$conf["variableType"]=array();#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
8073
		#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
8074
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
8075
		unset($conf["variableCheck"]["isexistMuti"]);
8076
 
8077
		#如果檢查失敗
8078
		if($checkResult["status"]=="false"){
8079
 
8080
			#設置錯誤識別
8081
			$result["status"]="false";
8082
 
8083
			#設置錯誤訊息
8084
			$result["error"]=$checkResult;
8085
 
8086
			#回傳錯誤訊息
8087
			return $result;
8088
 
8089
			}#if end
8090
 
8091
		#如果檢查不通過
8092
		if($checkResult["passed"]=="false"){
8093
 
8094
			#設置錯誤識別
8095
			$result["status"]="false";
8096
 
8097
			#設置錯誤訊息
8098
			$result["error"]=$checkResult;
8099
 
8100
			#回傳錯誤訊息
8101
			return $result;
8102
 
8103
			}#if end
8104
 
8105
		#檢查要修改名稱的資料庫是否爲系統資料庫
8106
		#函式說明:
8107
		#檢查一個數值是否與陣列裏面的元素相同
8108
		#回傳結果::
8109
		#$result["status"],"true"表示執行正確,"false"表示執行錯誤.
8110
		#$result["founded"],"true"表示有找到相同的,"false"表示沒有找到相同的.
8111
		#$result["error"],錯誤訊息
8112
		#$result["function"],當前執行的函數名稱
8113
		#$result["equalVarName"],相等的變數名稱或key.
8114
		#$result["equalVarValue"],相等的變數數值內容.
8115
		#必填參數:
8116
		$conf["search"]["getEqualVar"]["conditionElement"]=$conf["editedDatabaseName"];#條件元素,要等於的元素內容。
8117
		$conf["search"]["getEqualVar"]["compareElements"]=array("information_schema","mysql","performance_schema");#要比對的陣列變數內容。
8118
		$searchResult=search::getEqualVar($conf["search"]["getEqualVar"]);
8119
		unset($conf["search"]["getEqualVar"]);
8120
 
8121
		#如果檢查失敗
8122
		if($searchResult["status"]=="false"){
8123
 
8124
			#設置錯誤識別
8125
			$result["status"]="false";
8126
 
8127
			#設置錯誤訊息
8128
			$result["error"]=$searchResult;
8129
 
8130
			#回傳結果
8131
			return $result;
8132
 
8133
			}#if end
8134
 
8135
		#如果要移除的資料庫爲系統資料庫
8136
		if($searchResult["founded"]=="true"){
8137
 
8138
			#設置錯誤識別
8139
			$result["status"]="false";
8140
 
8141
			#設置錯誤訊息
8142
			$result["error"][]="您不能更改系統資料庫";
8143
 
8144
			#回傳結果
8145
			return $result;
8146
 
8147
			}#if end
8148
 
8149
		#如果 $conf["dbPassword"] 不存在
8150
		if(!isset($conf["dbPassword"])){
8151
 
8152
			#設爲空值
8153
			$conf["dbPassword"]="";
8154
 
8155
			}#if end
8156
 
8157
		#反之有設定
8158
		else{
8159
 
8160
			#設定連線用的密碼
8161
			$formatedPassword="--password=".$conf["dbPassword"];
8162
 
8163
			}#else end
8164
 
8165
		#檢查新名字的資料庫是否存在
8166
		#函式說明:
8167
		#檢查該資料庫是否存在,結果會回傳一個陣列。
8168
		#回傳結果:
8169
		#$result["status"],執行正常則回傳"true",執行失敗則回傳"false".
8170
		#$result["error"],錯誤訊息
8171
		#$result["exist"],有為"true",無為"false".
8172
		#必填的參數
8173
		$conf["db"]["checkDataBaseExists"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
8174
		$conf["db"]["checkDataBaseExists"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
8175
		$conf["db"]["checkDataBaseExists"]["checkDataBaseName"]=$conf["newDatabaseName"];#爲要檢查是否存在的資料庫名稱
8176
		#可省略參數
8177
 
8178
		#如果 $conf["dbPassword"] 存在
8179
		if(isset($conf["dbPassword"])){
8180
 
8181
			#設置密碼
8182
			$conf["db"]["checkDataBaseExists"]["dbPassword"]=$conf["dbPassword"];
8183
 
8184
			}#if end
8185
 
8186
		#如果 $conf["dbPort"] 存在
8187
		if(isset($conf["dbPort"])){
8188
 
8189
			#設置密碼
8190
			$conf["db"]["checkDataBaseExists"]["dbPort"]=$conf["dbPort"];
8191
 
8192
			}#if end		
8193
 
8194
		$checkResult=db::checkDataBaseExists($conf["db"]["checkDataBaseExists"]);
8195
		unset($conf["db"]["checkDataBaseExists"]);
8196
 
8197
		#如果 $checkResult["status"] 等於 "false"
8198
		if($checkResult["status"]==="false"){
8199
 
8200
			#設置錯誤識別
8201
			$result["status"]="false";
8202
 
8203
			#設置錯誤訊息
8204
			$result["error"]=$checkResult;
8205
 
8206
			#回傳結果
8207
			return $result;
8208
 
8209
			}#if end
8210
 
8211
		#如果跟現有的資料庫名稱一樣
8212
		if($checkResult["exist"]==="true"){
8213
 
8214
			#設置錯誤訊息
8215
			$result["error"]=$checkResult;
8216
 
8217
			#設置錯誤識別
8218
			$result["status"]="false";
8219
 
8220
			#回傳結果
8221
			return $result;
8222
 
8223
			}#if end
8224
 
8225
		#如果沒有跟現有的資料庫名稱一樣	
8226
		if($checkResult["exist"]==="false"){
8227
 
8228
			#建立新的資料庫
8229
			#函式說明:
8230
			#建立資料庫,會回傳一個陣列。
8231
			#回傳結果:
8232
			#$result["status"],若成功則爲"true",失敗則爲"false".
8233
			#$result["error"],錯誤訊息 
8234
			#必填參數:
8235
			$conf["db"]["createDatabase"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
8236
			$conf["db"]["createDatabase"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
8237
			$conf["db"]["createDatabase"]["newDatabaseName"]=$conf["newDatabaseName"];#爲要新增的資料庫名稱
8238
			#可省略參數:
8239
 
8240
			#如果 $conf["dbPassword"] 存在
8241
			if(isset($conf["dbPassword"])){
8242
 
8243
				#設置密碼
8244
				$conf["db"]["createDatabase"]["dbPassword"]=$conf["dbPassword"];
8245
 
8246
				}#if end
8247
 
8248
			#如果 $conf["dbPort"] 存在
8249
			if(isset($conf["dbPort"])){
8250
 
8251
				#設置密碼
8252
				$conf["db"]["createDatabase"]["dbPort"]=$conf["dbPort"];
8253
 
8254
				}#if end	
8255
 
8256
			$createNewDbResult=db::createDatabase($conf["db"]["createDatabase"]);
8257
			unset($conf["db"]["createDatabase"]);
8258
 
8259
			#如果新資料庫建立失敗
8260
			if($createNewDbResult["status"]=="false"){
8261
 
8262
				#設置錯誤識別
8263
				$result["status"]="false";
8264
 
8265
				#設置錯誤訊息
8266
				$result["error"]=$createNewDbResult;
8267
 
8268
				#回傳結果
8269
				return $result;
8270
 
8271
				}#if end
8272
 
8273
			#將舊的資料庫內容完整複製到新的資料庫
8274
			#函式說明:
8275
			#呼叫shell執行系統命令,並取得回傳的內容.
8276
			#回傳結果:
8277
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
8278
			#$result["error"],錯誤訊息陣列.
8279
			#$result["function"],當前執行的函數名稱.
8280
			#$result["argu"],使用的參數.
8281
			#$result["cmd"],執行的指令內容.
8282
			#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
8283
			#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
8284
			#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
8285
			#$result["running"],是否還在執行.
8286
			#$result["pid"],pid.
8287
			#$result["statusCode"],執行結束後的代碼.
8288
			#$result["escape"],陣列,儲存出新排序過且已經escape過的指令(key為"cmd")與參數(key為"argu").
8289
			#必填參數:
8290
			#$conf["command"],字串,要執行的指令.
8291
			$conf["external::callShell"]["command"]="mysqldump";
8292
			#$conf["fileArgu"],字串,變數__FILE__的內容.
8293
			$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];
8294
			#可省略參數:
8295
			#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
8296
			$conf["external::callShell"]["argu"]=array("-u".$conf["dbAccount"],$formatedPassword,$conf["editedDatabaseName"],"|","mysql","-u".$conf["dbAccount"],$formatedPassword,$conf["newDatabaseName"]);
8297
			#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
8298
			#$conf["arguIsAddr"]=array();
8299
			#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
8300
			#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
8301
			#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
8302
			#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
8303
			#$conf["enablePrintDescription"]="true";
8304
			#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
8305
			#$conf["printDescription"]="";
8306
			#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".如果參數為"< 、<< 、> 、>> 、| 、2>&1"之一則不會過濾.
8307
			#$conf["escapeshellarg"]="false";
8308
			#$conf["thereIsShellVar"],陣列字串,指令搭配的參數"argu",若含有「\'」,則取代為「"」.每個argu參數都要有對應的元素."true"代表要置換.
8309
			#$conf["thereIsShellVar"]=array();
8310
			#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
8311
			#$conf["username"]="";
8312
			#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
8313
			#$conf["password"]="";
8314
			#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
8315
			#$conf["useScript"]="";
8316
			#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
8317
			#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
8318
			#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
8319
			#$conf["inBackGround"]="";
8320
			#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
8321
			#$conf["getErr"]="false";
8322
			#$conf["doNotRun"],字串,"true"代表不執行指令,預設為"false"會執行指令.
8323
			#$conf["doNotRun"]="false";
8324
			#參考資料:
8325
			#exec=>http://php.net/manual/en/function.exec.php
8326
			#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
8327
			#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
8328
			#備註:
8329
			#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
8330
			#若使用的 command、argu 參數,含有 ~ 則會被視為字串,若有需要其於 shell 中代表的家目錄位置,可用 fileAccess::tildeToPath 來進行轉換.
8331
			$callShell=external::callShell($conf["external::callShell"]);
8332
			unset($conf["external::callShell"]);
8333
 
8334
			#若執行shell失敗
8335
			if($callShell["status"]=="false"){
8336
 
8337
				#設置錯誤識別
8338
				$result["status"]="false";
8339
 
8340
				#設置錯誤訊息
8341
				$result["error"]=$callShell;
8342
 
8343
				#回傳結果
8344
				return $result;					
8345
 
8346
				}#if end
8347
 
8348
			#將舊的資料庫丟棄
8349
			#函式說明:
8350
			#移除資料庫,會回傳一個陣列。
8351
			#回傳結果:
8352
			#$result["status"],若成功則爲0,失敗則爲1。
8353
			#$result["error"],錯誤訊息
8354
			#必填參數:
8355
			$conf["db"]["dropDatabase"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
8356
			$conf["db"]["dropDatabase"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
8357
			$conf["db"]["dropDatabase"]["dropedDatabaseName"]=$conf["editedDatabaseName"];#爲要移除的資料庫名稱
8358
			#可省略參數:		
8359
 
8360
			#如果 $conf["dbPassword"] 存在
8361
			if(isset($conf["dbPassword"])){
8362
 
8363
				#設置密碼
8364
				$conf["db"]["dropDatabase"]["dbPassword"]=$conf["dbPassword"];
8365
 
8366
				}#if end
8367
 
8368
			#如果 $conf["dbPort"] 存在
8369
			if(isset($conf["dbPort"])){
8370
 
8371
				#設置密碼
8372
				$conf["db"]["dropDatabase"]["dbPort"]=$conf["dbPort"];
8373
 
8374
				}#if end	
8375
 
8376
			$dropDbResult=db::dropDatabase($conf["db"]["dropDatabase"]);
8377
			unset($conf["db"]["dropDatabase"]);
8378
 
8379
			#如果舊資料庫丟棄失敗
8380
			if($dropDbResult["status"]=="false"){
8381
 
8382
				#設置錯誤識別
8383
				$result["status"]="false";
8384
 
8385
				#設置錯誤訊息
8386
				$result["error"][]="舊名稱資料庫丟棄失敗";
8387
 
8388
				#回傳結果
8389
				return $result;
8390
 
8391
				}#if end				
8392
 
8393
			}#if end
8394
 
8395
		#執行到這邊代表執行正確
8396
		$result["status"]="true";
8397
 
8398
		#回傳結果
8399
		return $result;
8400
 
8401
		}#function editDatabaseName
8402
 
8403
	/*
8404
	#函式說明:
8405
	#更改資料表的名稱. 
8406
	#回傳結果:
8407
	#$result["status"],"true"代表執行成功;若失敗會回傳錯誤訊息.
8408
	#$resuly["function"],當前執行的函數名稱.
8409
	#$result["error"],錯誤訊息.
8410
	#$result["sql"],執行的sql字串.
8411
	#必填參數:
8412
	#$conf["editedDataBaseName"],爲要更改的資料表所屬的資料庫名稱.
8413
	$conf["editedDataBaseName"]="";
8414
	#$conf["editedDataTableName"],爲要更改的資料表原始名稱.
8415
	$conf["editedDataTableName"]="";
8416
	#$conf["newDataTableName"],新的資料庫名稱.
8417
	$conf["newDataTableName"]="";
8418
	#$conf["dbAccount"],爲用於連入資料庫server時要使用的帳號.
8419
	$conf["dbAccount"]=$dbAccount;
8420
	#conf["dbAddress"],爲資料庫server的位置.
8421
	$conf["dbAddress"]=$dbAddress;
8422
	#可省略參數:
8423
	#$conf["dbPassword"],爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
8424
	#$conf["dbPassword"]=$dbPassword;
8425
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,預設為3306.
8426
	#$conf["dbPort"]="3306";
8427
	#參考資料:
8428
	#無.
8429
	#備註:
8430
	#無.
8431
	*/
8432
	public static function editDataTableName($conf){
8433
 
8434
		#初始化要回傳的內容
8435
		$result=array();
8436
 
8437
		#取得當前執行的函數名稱
8438
		$result["function"]=__FUNCTION__;
8439
 
8440
		#如果 $conf 不為陣列
8441
		if(gettype($conf)!="array"){
8442
 
8443
			#設置執行失敗
8444
			$result["status"]="false";
8445
 
8446
			#設置執行錯誤訊息
8447
			$result["error"][]="\$conf變數須為陣列形態";
8448
 
8449
			#如果傳入的參數為 null
8450
			if($conf==null){
8451
 
8452
				#設置執行錯誤訊息
8453
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
8454
 
8455
				}#if end
8456
 
8457
			#回傳結果
8458
			return $result;
8459
 
8460
			}#if end
8461
 
8462
		#函式說明:
8463
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
8464
		#回傳結果:
8465
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
8466
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
8467
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
8468
		#必填參數:
8469
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
8470
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("editedDataBaseName","editedDataTableName","newDataTableName","dbAccount","dbAddress");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
8471
		#可省略參數:
8472
		$conf["variableType"]=array("string","string","string","string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
8473
		#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
8474
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
8475
		unset($conf["variableCheck"]["isexistMuti"]);
8476
 
8477
		#如果 $checkResult["passed"]等於"false".
8478
		if($checkResult["passed"]=="false"){
8479
 
8480
			#代表參數有錯
8481
 
8482
			#設置錯誤識別
8483
			$result["status"]="false";
8484
 
8485
			#設置錯誤訊息
8486
			$result["error"]=$checkResult;
8487
 
8488
			#回傳結果
8489
			return $result;
8490
 
8491
			}#if end
8492
 
8493
		#設定要執行的sql語法
8494
		$sql="rename table ".$conf["editedDataBaseName"].".".$conf["editedDataTableName"]." to ".$conf["editedDataBaseName"].".".$conf["newDataTableName"].";";
8495
 
8496
		#函式說明:
8497
		#執行mysql指令
8498
		#回傳結果::
8499
		#$result["status"],"true"為執行成功;"false"為執行失敗。
8500
		#$result["error"],錯誤訊息的陣列
8501
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
8502
		#$result["queryString"],mysql查詢的語言
8503
		#查詢號的解果,需要解析。
8504
		#必填參數:
8505
		$conf["db"]["execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
8506
		$conf["db"]["execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
8507
		$conf["db"]["execMysqlQuery"]["dbSql"]=$sql;#要執行sql語法
8508
		#可省略參數: 
8509
 
8510
		#如果 $conf["dbPassword"] 有設定
8511
		if(isset($conf["dbPassword"])){
8512
 
8513
			$conf["db"]["execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
8514
 
8515
			}#if end
8516
 
8517
		#如果 $conf["dbPort"] 有設定
8518
		if(isset($conf["dbPort"])){
8519
 
8520
			$conf["db"]["execMysqlQuery"]["dbPort"]=$conf["dbPort"];#爲連線到mysql-Server時要使用的port.
8521
 
8522
			}#if end			
8523
 
8524
		$db["execMysqlQuery"]=db::execMysqlQuery($conf["db"]["execMysqlQuery"]);
8525
		unset($conf["db"]["execMysqlQuery"]);
8526
 
8527
		#如果 $db["execMysqlQuery"]["status"] 等於 "false".
8528
		if($db["execMysqlQuery"]["status"]=="false"){
8529
 
8530
			#設置執行錯誤的識別
8531
			$result["status"]="false";
8532
 
8533
			#設置錯誤訊息
8534
			$result["error"]=$db["execMysqlQuery"]["error"];
8535
 
8536
			#回傳結果
8537
			return $result;
8538
 
8539
			}#if end
8540
 
8541
		#取得執行的sql語法
8542
		$result["sql"]=$db["execMysqlQuery"]["queryString"];
8543
 
8544
		#執行到這邊代表執行成功
8545
		$result["status"]="true";
8546
 
8547
		#回傳結果
8548
		return $result;
8549
 
8550
		}#function editDataTableName end
8551
 
8552
	/*
8553
	#函式說明:
8554
	#移除資料庫,會回傳一個陣列。
8555
	#回傳結果:
8556
	#$result["status"],若成功則爲"true",失敗則爲,"false"
8557
	#$result["error"],錯誤訊息.
8558
	#$result["function"],當前執行的函數名稱.
8559
	#必填參數:
8560
	$conf["dbAddress"]=$dbAddress;#爲mysql-Server的位置
8561
	$conf["dbAccount"]=$dbAccount;#爲用於連入mysql-Server時要使用的帳號
8562
	$conf["dropedDatabaseName"]=$dbName;#爲要移除的資料庫名稱
8563
	#可省略參數:		
8564
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼.
8565
	#$conf["dbPassword"]=$dbPassword;
8566
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,預設為3306.
8567
	#$conf["dbPort"]="3306";
8568
	#參考資料:
8569
	#無.
8570
	#備註:
8571
	#無.
8572
	*/
8573
	public static function dropDatabase($conf){
8574
 
8575
		#初始化要回傳的內容
8576
		$result=array();
8577
 
8578
		#取得當前執行的函數名稱
8579
		$result["function"]=__FUNCTION__;
8580
 
8581
		#如果 $conf 不為陣列
8582
		if(gettype($conf)!="array"){
8583
 
8584
			#設置執行失敗
8585
			$result["status"]="false";
8586
 
8587
			#設置執行錯誤訊息
8588
			$result["error"][]="\$conf變數須為陣列形態";
8589
 
8590
			#如果傳入的參數為 null
8591
			if($conf==null){
8592
 
8593
				#設置執行錯誤訊息
8594
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
8595
 
8596
				}#if end
8597
 
8598
			#回傳結果
8599
			return $result;
8600
 
8601
			}#if end
8602
 
8603
		#函式說明:
8604
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
8605
		#回傳結果:
8606
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
8607
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
8608
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
8609
		#必填參數:
8610
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
8611
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("dbAddress","dbAccount","dropedDatabaseName");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
8612
		#可省略參數:
8613
		$conf["variableCheck"]["isexistMuti"]["variableType"]=array("string","string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
8614
		#$conf["variableCheck"]["isexistMuti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
8615
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
8616
		unset($conf["variableCheck"]["isexistMuti"]);
8617
 
8618
		#如果 $checkResult["passed"] 等於 "fasle"
8619
		if($checkResult["passed"]=="false"){
8620
 
8621
			#設置錯誤識別
8622
			$result["status"]="false";
8623
 
8624
			#設置錯誤訊息
8625
			$result["error"]=$checkResult;
8626
 
8627
			#回傳結果
8628
			return $result;
8629
 
8630
			}#if end
8631
 
8632
		#檢查要移除的資料庫爲系統資料庫
8633
		#函式說明:
8634
		#檢查一個數值是否與陣列裏面的元素相同
8635
		#回傳結果::
8636
		#$result["status"],"true"表示有找到相同的,"false"表示沒有找到相同的。
8637
		#$result["equalVarName"],相等的變數內容。
8638
		#$result["equalVarPosition"],相同的元素內容其位置爲該陣列元素的第幾個位置。
8639
		#必填參數:
8640
		$conf["search"]["getEqualVar"]["conditionElement"]=$conf["dropedDatabaseName"];#條件元素,要等於的元素內容。
8641
		$conf["search"]["getEqualVar"]["compareElements"]=array("information_schema","mysql","performance_schema");#要比對的陣列變數內容。
8642
		$searchResult=search::getEqualVar($conf["search"]["getEqualVar"]);
8643
		unset($conf["search"]["getEqualVar"]);
8644
 
8645
		#如果檢查失敗
8646
		if($searchResult["status"]=="false"){
8647
 
8648
			#設置失敗代碼
8649
			$result["status"]="false";
8650
 
8651
			#設置錯誤訊息
8652
			$result["error"]=$searchResult;
8653
 
8654
			#回傳結果
8655
			return $result;
8656
 
8657
			}#if end
8658
 
8659
		#如果要移除的資料庫爲系統資料庫
8660
		if($searchResult["founded"]=="true"){
8661
 
8662
			#設置失敗代碼
8663
			$result["status"]="false";
8664
 
8665
			#設置錯誤訊息
8666
			$result["error"]="您不能丟棄系統資料庫";
8667
 
8668
			#回傳結果
8669
			return $result;
8670
 
8671
			}#if end
8672
 
8673
		#丟棄資料庫的sql語法
8674
		$sql="DROP DATABASE ".$conf["dropedDatabaseName"];
8675
 
8676
		#執行sql語法
8677
		#函式說明:
8678
		#執行mysql指令
8679
		#回傳結果::
8680
		#$result["status"],"true"為執行成功;"false"為執行失敗。
8681
		#$result["error"],錯誤訊息的陣列
8682
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
8683
		#$result["queryString"],mysql查詢的語言
8684
		#查詢號的解果,需要解析。
8685
		#必填參數:
8686
		$conf["db"]["execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
8687
		$conf["db"]["execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
8688
		$conf["db"]["execMysqlQuery"]["dbSql"]=$sql;#要執行sql語法
8689
		#可省略參數: 
8690
 
8691
		#如果 $conf["dbPassword"] 有設定
8692
		if(isset($conf["dbPassword"])){
8693
 
8694
			$conf["db"]["execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
8695
 
8696
			}#if end
8697
 
8698
 
8699
		#如果 $conf["dbPort"] 有設定
8700
		if(isset($conf["dbPort"])){
8701
 
8702
			$conf["db"]["execMysqlQuery"]["dbPort"]=$conf["dbPort"];#爲連線到mysql-Server時要使用的port,可省略,若省略則代表不使用密碼
8703
 
8704
			}#if end
8705
 
8706
		$db["execMysqlQuery"]=db::execMysqlQuery($conf["db"]["execMysqlQuery"]);
8707
		unset($conf["db"]["execMysqlQuery"]);
8708
 
8709
		#如果 $db["execMysqlQuery"]["status"] 等於 "false"
8710
		if($db["execMysqlQuery"]["status"]=="false"){
8711
 
8712
			#設置錯誤識別
8713
			$result["status"]="false";
8714
 
8715
			#設置錯誤訊息
8716
			$result["error"]=$db["execMysqlQuery"];
8717
 
8718
			#回傳結果
8719
			return $result;
8720
 
8721
			}#if end
8722
 
8723
		#執行到這邊代表執行正常
8724
		$result["status"]="true";
8725
 
8726
		#回傳結果
8727
		return $result;
8728
 
8729
		}#function dropDatabase end
8730
 
8731
	/*
8732
	#函式說明:
8733
	#備份資料庫
8734
	#回傳結果::
8735
	#$result["status"],"true"代表執行正常,"false"代表執行有誤.
8736
	#$result["error"],錯誤訊息陣列.
8737
	#$result["sqlAddress"],sql檔案的位置.
8738
	#$result["function"],當前執行的函數名稱
8739
	#必填參數:
8740
	#$conf["backedDatabaseName"],字串.
8741
	$conf["backedDatabaseName"]=$dbName;#爲要備份的資料庫名稱.
8742
	#$conf["dbAddress"],字串,資料庫的位置.
8743
	$conf["dbAddress"]=$dbAddress;
8744
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號.
8745
	$conf["dbAccount"]=$dbAccount;
8746
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
8747
	$conf["fileArgu"]=__FILE__;
8748
	#可省略參數:
8749
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
8750
	#$conf["dbPassword"]=$dbPassword;
8751
	#$conf["storePlace"],字串,要將輸出檔案儲存到哪邊,預設爲當前目錄.
8752
	#$conf["storePlace"]="";
8753
	#$conf["exportFileName"],字串,要輸出的檔案名稱,預設爲其export
8754
	#$conf["exportFileName"]="export";
8755
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,預設不使用.
8756
	#$conf["dbPort"]="3306";
8757
	#參考資料:
8758
	#無.
8759
	#備註:
8760
	#無.
8761
	*/
8762
	public static function backupDatabase($conf){
8763
 
8764
		#原始語法
8765
		# mysqldump --column-statistics=0 -u account --password=Password -Pport --default-character-set=utf8 --events --routines --single-transaction --skip-lock-tables --quick databaseName > "all.sql"
8766
 
8767
		#初始化要回傳的變數
8768
		$result=array();
8769
 
8770
		#紀錄當前執行的函數名稱
8771
		$result["function"]=__FUNCTION__;
8772
 
8773
		#如果 $conf 不為陣列
8774
		if(gettype($conf)!="array"){
8775
 
8776
			#設置執行失敗
8777
			$result["status"]="false";
8778
 
8779
			#設置執行錯誤訊息
8780
			$result["error"][]="\$conf變數須為陣列形態";
8781
 
8782
			#如果傳入的參數為 null
8783
			if($conf==null){
8784
 
8785
				#設置執行錯誤訊息
8786
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
8787
 
8788
				}#if end
8789
 
8790
			#回傳結果
8791
			return $result;
8792
 
8793
			}#if end
8794
 
8795
		#函式說明:
8796
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
8797
		#回傳結果:
8798
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
8799
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
8800
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
8801
		#必填參數:
8802
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
8803
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("fileArgu","backedDatabaseName","dbAccount","dbAddress");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
8804
		#可省略參數:
8805
		$conf["variableCheck"]["isexistMuti"]["variableType"]=array("string","string","string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
8806
		#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
8807
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
8808
		unset($conf["variableCheck"]["isexistMuti"]);
8809
 
8810
		#如果檢查失敗
8811
		if($checkResult["status"]=="false"){
8812
 
8813
			#設置錯誤識別
8814
			$result["status"]="false";
8815
 
8816
			#設置錯誤訊息
8817
			$result["error"]=$checkResult;
8818
 
8819
			#回傳錯誤訊息
8820
			return $result;
8821
 
8822
			}#if end
8823
 
8824
		#如果檢查不通過
8825
		if($checkResult["passed"]=="false"){
8826
 
8827
			#設置錯誤識別
8828
			$result["status"]="false";
8829
 
8830
			#設置錯誤訊息
8831
			$result["error"]=$checkResult;
8832
 
8833
			#回傳錯誤訊息
8834
			return $result;
8835
 
8836
			}#if end
8837
 
8838
		#檢查要備份的資料庫是否爲系統資料庫
8839
		#函式說明:
8840
		#檢查一個數值是否與陣列裏面的元素相同
8841
		#回傳結果::
8842
		#$result["status"],"true"表示有找到相同的,"false"表示沒有找到相同的。
8843
		#$result["error"],錯誤訊息
8844
		#$result["equalVarName"],相等的變數內容。
8845
		#$result["equalVarPosition"],相同的元素內容其位置爲該陣列元素的第幾個位置。
8846
		#必填參數:
8847
		$conf["search"]["getEqualVar"]["conditionElement"]=$conf["backedDatabaseName"];#條件元素,要等於的元素內容。
8848
		$conf["search"]["getEqualVar"]["compareElements"]=array("information_schema","mysql","performance_schema");#要比對的陣列變數內容。
8849
		$searchResult=search::getEqualVar($conf["search"]["getEqualVar"]);
8850
		unset($conf["search"]["getEqualVar"]);
8851
 
8852
		#如果檢查失敗
8853
		if($searchResult["status"]=="false"){
8854
 
8855
			#設置錯誤識別
8856
			$result["status"]="false";
8857
 
8858
			#設置錯誤訊息
8859
			$result["error"]=$searchResult;
8860
 
8861
			#回傳結果
8862
			return $result;
8863
 
8864
			}#if end
8865
 
8866
		#如果要備份的資料庫爲系統資料庫
8867
		if($searchResult["founded"]=="true"){
8868
 
8869
			#設置錯誤識別
8870
			$result["status"]="false";
8871
 
8872
			#設置錯誤訊息
8873
			$result["error"]="您不能備份系統資料庫";
8874
 
8875
			#回傳結果
8876
			return $result;
8877
 
8878
			}#if end
8879
 
8880
		#初始化連線的密碼
8881
		$dbPassword="";
8882
 
8883
		#如果 $conf["dbPassword"] 有設置
8884
		if(isset($conf["dbPassword"])){
8885
 
8886
			#令存密碼
8887
			$dbPassword=$conf["dbPassword"];
8888
 
8889
			#設置其連線密碼
8890
			$conf["dbPassword"]="-p".$conf["dbPassword"];
8891
 
8892
			}#if end
8893
 
8894
		#反之
8895
		else{
8896
 
8897
			#設爲空值
8898
			$conf["dbPassword"]="";
8899
 
8900
			}#else end
8901
 
8902
		#如果 $conf["storePlace"] 沒有設置
8903
		if(!isset($conf["storePlace"])){
8904
 
8905
			#將其設爲空值
8906
			$conf["storePlace"]="";
8907
 
8908
			}#if end
8909
 
8910
		#反之有設定且結尾不為 "/"
8911
		else if($conf["storePlace"][strlen($conf["storePlace"])-1]!=="/"){
8912
 
8913
			#在其路徑後方加上 /
8914
			$conf["storePlace"]=$conf["storePlace"]."/";
8915
 
8916
			}#if end
8917
 
8918
		#如果 $conf["exportFileName"] 沒有設置
8919
		if(!isset($conf["exportFileName"])){
8920
 
8921
			#設置預設名稱
8922
			$conf["exportFileName"]="export.sql";
8923
 
8924
			}#if end
8925
 
8926
		#反之有設定
8927
		else{
8928
 
8929
			#名稱結尾加上 .sql
8930
			$conf["exportFileName"]=$conf["exportFileName"].".sql";
8931
 
8932
			}#else end
8933
 
8934
		#檢查資料庫是否存在
8935
		#函式說明:
8936
		#檢查該資料庫是否存在,結果會回傳一個陣列。
8937
		#回傳結果:
8938
		#$result["status"],設置執行錯誤.
8939
		#$result["error"],錯誤訊息.
8940
		#$result["exist"],有為"true",無為"false".
8941
		#$result["function"],當前執行的函數名稱.
8942
		#必填的參數
8943
		$conf["db::checkDataBaseExists"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
8944
		$conf["db::checkDataBaseExists"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
8945
		$conf["db::checkDataBaseExists"]["checkDataBaseName"]=$conf["backedDatabaseName"];#爲要檢查是否存在的資料庫名稱
8946
		#可省略參數
8947
 
8948
		#如果密碼不為""
8949
		if($dbPassword!=""){
8950
 
8951
			$conf["db::checkDataBaseExists"]["dbPassword"]=$dbPassword;#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
8952
 
8953
			}#if end
8954
 
8955
		#如果有設置 $conf["dnPort"]
8956
		if(isset($conf["dbPort"])){
8957
 
8958
			$conf["db::checkDataBaseExists"]["dbPort"]=$conf["dbPort"];
8959
 
8960
			}#if end
8961
 
8962
		$checkDataBaseExists=db::checkDataBaseExists($conf["db::checkDataBaseExists"]);
8963
		unset($conf["db::checkDataBaseExists"]);
8964
 
8965
		#如果檢查資料庫是否存在失敗
8966
		if($checkDataBaseExists["status"]=="false"){
8967
 
8968
			#設置錯誤識別
8969
			$result["status"]="false";
8970
 
8971
			#設置錯誤訊息
8972
			$result["error"]=$checkDataBaseExists;
8973
 
8974
			#回傳結果
8975
			return $result;
8976
 
8977
			}#if end
8978
 
8979
		#如果資料庫不存在
8980
		if($checkDataBaseExists["exist"]=="false"){
8981
 
8982
			#設置錯誤識別
8983
			$result["status"]="false";
8984
 
8985
			#設置錯誤訊息
8986
			$result["error"]=$checkDataBaseExists;
8987
 
8988
			#回傳結果
8989
			return $result;
8990
 
8991
			}#if end
8992
 
8993
		#若有設置port
8994
		if(isset($conf["dbPort"])){
8995
 
8996
			#指定port
8997
			$port="-P".$conf["dbPort"];
8998
 
8999
			}#if end
9000
 
9001
		#反之
9002
		else{
9003
			#設置為空
9004
			$port="";
9005
 
9006
			}#else end
9007
 
9008
		#透過以下指令判斷是否支援 --column-statistics 參數
9009
		#mysqldump --help | grep "\--column-statistics" | wc -l
9010
		#函式說明:
9011
		#呼叫shell執行系統命令,並取得回傳的內容.
9012
		#回傳結果:
9013
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
9014
		#$result["error"],錯誤訊息陣列.
9015
		#$result["function"],當前執行的函數名稱.
9016
		#$result["argu"],使用的參數.
9017
		#$result["cmd"],執行的指令內容.
9018
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
9019
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
9020
		#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
9021
		#$result["running"],是否還在執行.
9022
		#$result["pid"],pid.
9023
		#$result["statusCode"],執行結束後的代碼.
9024
		#必填參數:
9025
		#$conf["command"],字串,要執行的指令與.
9026
		$conf["external::callShell"]["command"]="mysqldump";
9027
		#$conf["fileArgu"],字串,變數__FILE__的內容.
9028
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];
9029
		#可省略參數:
9030
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
9031
		$conf["external::callShell"]["argu"]=array("--help","|","grep","\--column-statistics","|","wc","-l");
9032
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
9033
		#$conf["arguIsAddr"]=array();
9034
		#$conf["plainArgu"],字串陣列,哪幾個參數不要加上"".
9035
		#$conf["external::callShell"]["plainArgu"]=array("true","true","true","false","true","true","true");
9036
		#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
9037
		#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
9038
		#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
9039
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
9040
		#$conf["enablePrintDescription"]="true";
9041
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
9042
		#$conf["printDescription"]="";
9043
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".
9044
		$conf["external::callShell"]["escapeshellarg"]="true";
9045
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
9046
		#$conf["username"]="";
9047
		#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
9048
		#$conf["password"]="";
9049
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
9050
		#$conf["useScript"]="";
9051
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
9052
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
9053
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
9054
		#$conf["inBackGround"]="";
9055
		#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
9056
		#$conf["getErr"]="false";
9057
		#備註:
9058
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
9059
		#參考資料:
9060
		#exec=>http://php.net/manual/en/function.exec.php
9061
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
9062
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
9063
		$callShell=external::callShell($conf["external::callShell"]);
9064
		unset($conf["external::callShell"]);
9065
 
9066
		#如果執行shell失敗
9067
		if($callShell["status"]==="false"){
9068
 
9069
			#設置錯誤識別
9070
			$result["status"]="false";
9071
 
9072
			#設置錯誤訊息
9073
			$result["error"]=$callShell;
9074
 
9075
			#回傳結果
9076
			return $result;
9077
 
9078
			}#if end
9079
 
9080
		#初始化參數
9081
		$conf["external::callShell"]["argu"]=array();
9082
 
9083
		#如果支援 --column-statistics 參數
9084
		if($callShell["output"][0]==="1"){
9085
 
9086
			#增加參數
9087
			$conf["external::callShell"]["argu"][]="--column-statistics=0";
9088
 
9089
			}#if end
9090
 
9091
		#輸出資料庫sql檔案		
9092
		#函式說明:
9093
		#呼叫shell執行系統命令,並取得回傳的內容.
9094
		#回傳結果:
9095
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
9096
		#$result["error"],錯誤訊息陣列.
9097
		#$result["function"],當前執行的函數名稱.
9098
		#$result["argu"],使用的參數.
9099
		#$result["cmd"],執行的指令內容.
9100
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
9101
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
9102
		#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
9103
		#$result["running"],是否還在執行.
9104
		#$result["pid"],pid.
9105
		#$result["statusCode"],執行結束後的代碼.
9106
		#必填參數:
9107
		#$conf["command"],字串,要執行的指令與.
9108
		$conf["external::callShell"]["command"]="mysqldump";
9109
		#$conf["fileArgu"],字串,變數__FILE__的內容.
9110
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];
9111
		#可省略參數:
9112
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
9113
		$conf["external::callShell"]["argu"][]="-u";
9114
		$conf["external::callShell"]["argu"][]=$conf["dbAccount"];
9115
		$conf["external::callShell"]["argu"][]=$conf["dbPassword"];
9116
		$conf["external::callShell"]["argu"][]="-h";
9117
		$conf["external::callShell"]["argu"][]=$conf["dbAddress"];
9118
 
9119
		#如果有指定 port
9120
		if($port!==""){
9121
 
9122
			#設置port
9123
			$conf["external::callShell"]["argu"][]=$port;
9124
 
9125
			}#if end
9126
 
9127
		$conf["external::callShell"]["argu"][]="--default-character-set=utf8";
9128
		$conf["external::callShell"]["argu"][]="--events";
9129
		$conf["external::callShell"]["argu"][]="--routines";
9130
		$conf["external::callShell"]["argu"][]="--single-transaction";
9131
		$conf["external::callShell"]["argu"][]="--skip-lock-tables";
9132
		$conf["external::callShell"]["argu"][]="--quick";
9133
		$conf["external::callShell"]["argu"][]=$conf["backedDatabaseName"];
9134
		$conf["external::callShell"]["argu"][]=">";
9135
		$conf["external::callShell"]["argu"][]=$conf["storePlace"].$conf["exportFileName"];
9136
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
9137
		#$conf["arguIsAddr"]=array();
9138
		#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
9139
		#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
9140
		#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
9141
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
9142
		#$conf["enablePrintDescription"]="true";
9143
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
9144
		#$conf["printDescription"]="";
9145
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".
9146
		$conf["external::callShell"]["escapeshellarg"]="true";
9147
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
9148
		#$conf["username"]="";
9149
		#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
9150
		#$conf["password"]="";
9151
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
9152
		#$conf["useScript"]="";
9153
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
9154
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
9155
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
9156
		#$conf["inBackGround"]="";
9157
		#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
9158
		#$conf["getErr"]="false";
9159
		#備註:
9160
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
9161
		#參考資料:
9162
		#exec=>http://php.net/manual/en/function.exec.php
9163
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
9164
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
9165
		$callShell=external::callShell($conf["external::callShell"]);
9166
		unset($conf["external::callShell"]);
9167
 
9168
		#如果執行shell失敗
9169
		if($callShell["status"]==="false"){
9170
 
9171
			#設置錯誤識別
9172
			$result["status"]="false";
9173
 
9174
			#設置錯誤訊息
9175
			$result["error"]=$callShell;
9176
 
9177
			#回傳結果
9178
			return $result;
9179
 
9180
			}#if end
9181
 
9182
		#設置產生的sql檔案位置
9183
		$result["sqlAddress"]=$conf["storePlace"].$conf["exportFileName"];
9184
 
9185
		#設置執行成功
9186
		$result["status"]="true";
9187
 
9188
		#回傳結果
9189
		return $result;
9190
 
9191
		}#function backupDatabase end
9192
 
9193
	/*
9194
	#函式說明:
9195
	#移除表,會回傳一個陣列。
9196
	#回傳結果:
9197
	#$result["status"],若成功則爲"true",失敗則爲,"false"
9198
	#$result["error"],錯誤訊息.
9199
	#$result["function"],當前執行的函數名稱.
9200
	#必填參數:
9201
	$conf["dbAddress"],字串,爲mysql-Server的位置
9202
	$conf["dbAddress"]=$dbAddress;
9203
	$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號
9204
	$conf["dbAccount"]=$dbAccount;
9205
	$conf["selectedDatabaseName"],字串,爲要移除的資料表位於哪個資料庫
9206
	$conf["selectedDatabaseName"]=$dbName;
9207
	$conf["dropedDataTableName"],字串,爲要移除的資料表名稱
9208
	$conf["dropedDataTableName"]=$tableName;#爲要移除的資料表名稱
9209
	#可省略參數:		
9210
	#$conf["dbPassword"],字串.爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
9211
	#$conf["dbPassword"]=$dbPassword;
9212
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,預設為3306.
9213
	#$conf["dbPort"]="3306";
9214
	#參考資料:
9215
	#無.
9216
	#備註:
9217
	#無.
9218
	*/
9219
	public static function dropDataTable($conf){
9220
 
9221
		#初始化要回傳的內容
9222
		$result=array();
9223
 
9224
		#取得當前執行的函數名稱
9225
		$result["function"]=__FUNCTION__;
9226
 
9227
		#如果 $conf 不為陣列
9228
		if(gettype($conf)!="array"){
9229
 
9230
			#設置執行失敗
9231
			$result["status"]="false";
9232
 
9233
			#設置執行錯誤訊息
9234
			$result["error"][]="\$conf變數須為陣列形態";
9235
 
9236
			#如果傳入的參數為 null
9237
			if($conf==null){
9238
 
9239
				#設置執行錯誤訊息
9240
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
9241
 
9242
				}#if end
9243
 
9244
			#回傳結果
9245
			return $result;
9246
 
9247
			}#if end
9248
 
9249
		#函式說明:
9250
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
9251
		#回傳結果:
9252
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
9253
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
9254
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
9255
		#必填參數:
9256
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
9257
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("dbAddress","dbAccount","selectedDatabaseName","dropedDataTableName");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
9258
		#可省略參數:
9259
		$conf["variableType"]=array("string","string","string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
9260
		#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
9261
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
9262
		unset($conf["variableCheck"]["isexistMuti"]);
9263
 
9264
		#如果檢查不正常
9265
		if($checkResult["status"]=="false"){
9266
 
9267
			#設置執行錯誤
9268
			$result["status"]="fasle";
9269
 
9270
			#設置錯誤訊息
9271
			$result["error"]=$checkResult;
9272
 
9273
			#回傳結果:
9274
			return $result;
9275
 
9276
			}#if end
9277
 
9278
		#如果檢查不通過
9279
		if($checkResult["passed"]=="false"){
9280
 
9281
			#設置執行錯誤
9282
			$result["status"]="fasle";
9283
 
9284
			#設置錯誤訊息
9285
			$result["error"]=$checkResult;
9286
 
9287
			#回傳結果:
9288
			return $result;
9289
 
9290
			}#if end
9291
 
9292
		#建立移除資料表的sql語言
9293
		$sql="drop table ".$conf["selectedDatabaseName"].".".$conf["dropedDataTableName"].";";
9294
 
9295
		#函式說明:
9296
		#執行mysql查詢的指令
9297
		#回傳結果::
9298
		#$result["status"],"true"為執行成功;"false"為執行失敗。
9299
		#$result["error"],錯誤訊息的陣列
9300
		#查詢號的解果,需要解析。
9301
		#必填參數:
9302
		$conf["db"]["execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
9303
		$conf["db"]["execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
9304
		$conf["db"]["execMysqlQuery"]["dbSql"]=$sql;#要執行sql語法
9305
		#可省略參數: 
9306
 
9307
		#如果有設定密碼
9308
		if(isset($conf["dbPassword"])){
9309
 
9310
			$conf["db"]["execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
9311
 
9312
			}#if end
9313
 
9314
		#如果有設定 $conf["dbPort"]
9315
		if(isset($conf["dbPort"])){
9316
 
9317
			#設置 $conf["dbPort"]
9318
			$conf["db"]["execMysqlQuery"]["dbPort"]=$conf["dbPort"];
9319
 
9320
			}#if end
9321
 
9322
		$queryResult=db::execMysqlQuery($conf["db"]["execMysqlQuery"]);
9323
		unset($conf["db"]["execMysqlQuery"]);
9324
 
9325
		#如果移除資料表失敗
9326
		if($queryResult["status"]=="false"){
9327
 
9328
			#設置錯誤識別
9329
			$result["status"]="false";
9330
 
9331
			#設置錯誤訊息
9332
			$result["error"]=$queryResult["error"];
9333
 
9334
			#回傳結果
9335
			return $result;
9336
 
9337
			}#if end
9338
 
9339
		#設置執行成功的訊息
9340
		$result["status"]="true";
9341
 
9342
		#回傳結果
9343
		return $result;
9344
 
9345
		}#funcotion dropDataTable end
9346
 
9347
	/*
9348
	#函式說明:
9349
	#查詢所有的資料庫列表,會回傳查詢的結果
9350
	#回傳結果:
9351
	#$result["status"],執行是否正常,"true"為正常,"fasle"為不正常
9352
	#$result["error"],爲錯誤訊息
9353
	#$result["function"],當前執行的函數名稱
9354
	#$result["dbName"] 爲查詢的資料庫名稱陣列,第一筆資料庫名稱爲$result["dbName"][0],第二筆資料庫名稱爲$result["dbName"][1],其餘以此類推。
9355
	#$result["dbCounts"] 爲資料庫的總筆數	
9356
	#必填參數:
9357
	$conf["dbAddress"],字串,爲mysql-Server的位置.
9358
	$conf["dbAddress"]=$dbAddress;
9359
	$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號
9360
	$conf["dbAccount"]=$dbAccount;
9361
	#可省略參數:
9362
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
9363
	#$conf["dbPassword"]=$dbPassword;
9364
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,預設為3306.
9365
	#$conf["dbPort"]="3306";
9366
	#參考資料:
9367
	#無.
9368
	#備註:
9369
	#無.
9370
	*/
9371
	public static function getDataBaseList($conf){
9372
 
9373
		#初始化要回傳的內容
9374
		$result=array();
9375
 
9376
		#取得當前執行的函數名稱
9377
		$result["function"]=__FUNCTION__;
9378
 
9379
		#如果 $conf 不為陣列
9380
		if(gettype($conf)!="array"){
9381
 
9382
			#設置執行失敗
9383
			$result["status"]="false";
9384
 
9385
			#設置執行錯誤訊息
9386
			$result["error"][]="\$conf變數須為陣列形態";
9387
 
9388
			#如果傳入的參數為 null
9389
			if($conf==null){
9390
 
9391
				#設置執行錯誤訊息
9392
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
9393
 
9394
				}#if end
9395
 
9396
			#回傳結果
9397
			return $result;
9398
 
9399
			}#if end
9400
 
9401
		#檢查參數
9402
		#函式說明:
9403
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
9404
		#回傳結果:
9405
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
9406
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
9407
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
9408
		#必填參數:
9409
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
9410
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("dbAddress","dbAccount");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
9411
		#可省略參數:
9412
		#$conf["variableType"]=array();#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
9413
		#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
9414
		#備註:
9415
		#功能與checkExistAndType函式相同
9416
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
9417
		unset($conf["variableCheck"]["isexistMuti"]);
9418
 
9419
		#如果 $checkResult["passed"]等於"fasle"
9420
		if($checkResult["passed"]=="fasle"){
9421
 
9422
			#設置錯誤識別
9423
			$result["status"]="fasle";
9424
 
9425
			#設置錯誤訊息
9426
			$result["error"]=$checkResult;
9427
 
9428
			#回傳結果
9429
			return $result;
9430
 
9431
			}#if end 
9432
 
9433
		#連線到mysql-server
9434
		#函式說明:
9435
		#連線到mysql-server,會回傳一個陣列
9436
		#回傳結果:
9437
		#$result["status"],若連線成功則爲"true",連線失敗則爲"false"。
9438
		#$result["connectInformation"],爲回傳的mysql連線資訊。
9439
		#$result["error"],爲錯誤訊息陣列
9440
		#必填參數:
9441
		$conf["db"]["mysqlConnect"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置。
9442
		$conf["db"]["mysqlConnect"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號。
9443
		#可省略參數:
9444
 
9445
		#如果有設置 $conf["dbPassword"]
9446
		if(isset($conf["dbPassword"])){
9447
 
9448
			$conf["db"]["mysqlConnect"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼。
9449
 
9450
			}#if end
9451
 
9452
		#如果有設置 $conf["dbPort"]
9453
		if(isset($conf["dbPort"])){
9454
 
9455
			$conf["db"]["mysqlConnect"]["dbPort"]=$conf["dbPort"];#連線時用的port.
9456
 
9457
			}#if end
9458
 
9459
		$con=db::mysqlConnect($conf["db"]["mysqlConnect"]);
9460
		unset($conf["db"]["mysqlConnect"]);
9461
 
9462
		#如果 $con["status"] 等於 "fasle"
9463
		if($con["status"]=="fasle"){
9464
 
9465
			#設置錯誤識別
9466
			$result["status"]="false";
9467
 
9468
			#設置錯誤訊息
9469
			$result["error"]=$con;
9470
 
9471
			#回傳結果
9472
			return $result;
9473
 
9474
			}#if end
9475
 
9476
		#執行列出資料庫列表的SQL語法
9477
		#函式說明:
9478
		#執行mysql指令
9479
		#回傳結果::
9480
		#$result["status"],"true"為執行成功;"false"為執行失敗。
9481
		#$result["error"],錯誤訊息的陣列
9482
		#$result["function"],當前執行的涵式
9483
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
9484
		#$result["queryString"],mysql查詢的語言
9485
		#查詢號的解果,需要解析。
9486
		#必填參數:
9487
		$conf["db::execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
9488
		$conf["db::execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
9489
		$conf["db::execMysqlQuery"]["dbSql"]="show databases;";#要執行sql語法
9490
		#可省略參數: 
9491
 
9492
		#如果存在 $conf["dbPassword"]
9493
		if(isset($conf["dbPassword"])){
9494
 
9495
			$conf["db::execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
9496
 
9497
			}#if end
9498
 
9499
		#如果存在 $conf["dbPort"]
9500
		if(isset($conf["dbPort"])){
9501
 
9502
			$conf["db::execMysqlQuery"]["dbPort"]=$conf["dbPort"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
9503
 
9504
			}#if end
9505
 
9506
		$execMysqlQuery=db::execMysqlQuery($conf["db::execMysqlQuery"]);
9507
		unset($conf["db::execMysqlQuery"]);
9508
 
9509
		#如果執行SQL語法失敗
9510
		if($execMysqlQuery["status"]=="false"){
9511
 
9512
			#設置錯誤識別
9513
			$result["status"]="false";
9514
 
9515
			#設置錯誤訊息
9516
			$result["error"]=$execMysqlQuery;
9517
 
9518
			#回傳結果
9519
			return $result;
9520
 
9521
			}#if end
9522
 
9523
		#設定 $i 的初始值
9524
		$times=0;
9525
 
9526
		#逐筆解析內容
9527
		while($row=mysqli_fetch_assoc($execMysqlQuery["queryResource"])) {
9528
 
9529
			#將結果存進 $fetchResult[$times]	    	
9530
			$fetchResult[$times]= $row['Database'];
9531
 
9532
			#$times + 1 (計數用)
9533
			$times++;
9534
 
9535
			}#while end
9536
 
9537
		#取得每筆資料內容(資料庫的名稱)
9538
		$result["dbName"]=$fetchResult;
9539
 
9540
		#取得總共的資料筆數
9541
		$result["dbCounts"]=$times;
9542
 
9543
		#執行到這邊代表執行成功
9544
		$result["status"]="true";
9545
 
9546
		#回傳查詢的結果 $result
9547
		return $result;
9548
 
9549
		}#function getDataBaseList end
9550
 
9551
	/*
9552
	#函式說明:
9553
	#查詢特定資料庫裡的資料表列表,會回傳查詢的結果
9554
	#回傳結果:
9555
	#$result["status"],執行是否成功,"true"代表執行成功;"false"代表執行失敗。
9556
	#$result["error"],執行錯誤的訊息.
9557
	#$result["function"],當前執行的函式名稱.
9558
	#$result["connectInformation"],爲回傳的mysql連線資訊。
9559
	#$result["tableName"] 爲查詢的資料庫名稱陣列,
9560
		#第一筆資料庫名稱爲$result["tableName"][0],
9561
		#第二筆資料庫名稱爲$result["tableName"][1],
9562
		#其餘以此類推。
9563
	#$result["dataCounts"] 爲資料表的總筆數
9564
	#必填參數:
9565
	$conf["dbAddress"],字串,爲mysql-Server的位置
9566
	$conf["dbAddress"]=$dbAddress;
9567
	$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號
9568
	$conf["dbAccount"]=$dbAccount;
9569
	$conf["selectedDataBaseName"],字串,爲指定的資料庫名稱
9570
	$conf["selectedDataBaseName"]=$dbName;
9571
	#可省略參數:
9572
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
9573
	#$conf["dbPassword"]=$dbPassword;
9574
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,預設為3306.
9575
	#$conf["dbPort"]="3306";
9576
	#參考資料:
9577
	#無.
9578
	#備註:
9579
	#原始語法,show tables FROM databaseName,代表檢視databaseName裡面的資料表清單。
9580
	*/
9581
	public static function getDataTableList($conf){
9582
 
9583
		#初始化要回傳的內容
9584
		$result=array();
9585
 
9586
		#取得當前執行的函數名稱
9587
		$result["function"]=__FUNCTION__;
9588
 
9589
		#如果 $conf 不為陣列
9590
		if(gettype($conf)!="array"){
9591
 
9592
			#設置執行失敗
9593
			$result["status"]="false";
9594
 
9595
			#設置執行錯誤訊息
9596
			$result["error"][]="\$conf變數須為陣列形態";
9597
 
9598
			#如果傳入的參數為 null
9599
			if($conf==null){
9600
 
9601
				#設置執行錯誤訊息
9602
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
9603
 
9604
				}#if end
9605
 
9606
			#回傳結果
9607
			return $result;
9608
 
9609
			}#if end
9610
 
9611
		#函式說明:
9612
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
9613
		#回傳結果:
9614
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
9615
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
9616
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
9617
		#必填參數:
9618
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
9619
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("dbAddress","dbAccount","selectedDataBaseName");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
9620
		#可省略參數:
9621
		#$conf["variableType"]=array();#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
9622
		#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
9623
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
9624
		unset($conf["variableCheck"]);
9625
 
9626
		#如果檢查失敗
9627
		if($checkResult["status"]=="false"){
9628
 
9629
			#設置錯誤訊息識別
9630
			$result["status"]="fasle";
9631
 
9632
			#設置錯誤訊息
9633
			$result["error"]=$checkResult;
9634
 
9635
			#回傳錯誤結果
9636
			return $result;
9637
 
9638
			}#if end
9639
 
9640
		#如果檢查不通過
9641
		if($checkResult["passed"]=="false"){
9642
 
9643
			#設置錯誤訊息識別
9644
			$result["status"]="fasle";
9645
 
9646
			#設置錯誤訊息
9647
			$result["error"]=$checkResult;
9648
 
9649
			#回傳錯誤結果
9650
			return $result;
9651
 
9652
			}#if end
9653
 
9654
		#要執行的 sql 語句
9655
		$sql="show tables FROM ".$conf["selectedDataBaseName"].";";
9656
 
9657
		#函式說明:
9658
		#執行mysql指令
9659
		#回傳結果::
9660
		#$result["status"],"true"為執行成功;"false"為執行失敗。
9661
		#$result["error"],錯誤訊息的陣列
9662
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
9663
		#$result["queryString"],mysql查詢的語言
9664
		#查詢號的解果,需要解析。
9665
		#必填參數:
9666
		$conf["db.execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
9667
		$conf["db.execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
9668
		$conf["db.execMysqlQuery"]["dbSql"]=$sql;#要執行sql語法
9669
		#可省略參數: 
9670
 
9671
		#如果 $conf["dbPassword"] 有設定
9672
		if(isset($conf["dbPassword"])){
9673
 
9674
			#$conf["db.execMysqlQuery"]["dbPassword"]=$dbPassword;#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
9675
			$conf["db.execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼。
9676
 
9677
			}#if end
9678
 
9679
		#如果 $conf["dbPort"] 有設定
9680
		if(isset($conf["dbPort"])){
9681
 
9682
			#設置 dbPort
9683
			$conf["db.execMysqlQuery"]["dbPort"]=$conf["dbPort"];
9684
 
9685
			}#if end
9686
 
9687
		$queryResult=db::execMysqlQuery($conf["db.execMysqlQuery"]);
9688
		unset($conf["db.execMysqlQuery"]);
9689
 
9690
		#如果執行sql語法失敗
9691
		if($queryResult["status"]=="false"){
9692
 
9693
			#設置執行不正常
9694
			$result["status"]="false";
9695
 
9696
			#設置錯誤訊息
9697
			$result["error"]=$queryResult;
9698
 
9699
			#回傳結果
9700
			return $result;
9701
 
9702
			}#if end
9703
 
9704
		#將查詢的結果放進$queryResult裏面
9705
		$queryResult=$queryResult["queryResource"];
9706
 
9707
		#debug
9708
		#var_dump($queryResult);
9709
 
9710
		#設定 $times 的初始值
9711
		$times=0;
9712
 
9713
		#初始化解析的內容儲存的地方
9714
		$fetchResult=array();
9715
 
9716
		#逐筆解析內容
9717
		while ($row = mysqli_fetch_assoc($queryResult)) {
9718
 
9719
			#將結果存進 $result[$i]		    	
9720
			$fetchResult[$times]= $row["Tables_in_".$conf["selectedDataBaseName"]];
9721
 
9722
			#$times + 1 (計數用)
9723
			$times++;
9724
 
9725
			#debug
9726
			#var_dump($row);
9727
 
9728
			}#while end
9729
 
9730
		#取得每筆資料內容(資料表的名稱)
9731
		$result["tableName"]=$fetchResult;
9732
 
9733
		#取得總共的資料筆數
9734
		$result["dataCounts"]=$times;
9735
 
9736
		#設置執行成功的識別
9737
		$result["status"]="true";
9738
 
9739
		#回傳查詢的結果 $result
9740
		return $result;
9741
 
9742
		}#function getDataTableList end
9743
 
9744
	/*
9745
	#函式說明:
9746
	#取得資料表所有欄位的詳細資訊
9747
	#回傳的內容:
9748
	#$result["status"],執行結果,"true"代表執行成功;"false"代表執行失敗
9749
	#$result["error"],錯誤訊息陣列
9750
	#$result["function"],當前執行的函數名稱.
9751
	#$result["sql"],執行的sql語法
9752
	#$result["oriInput"],原始的資料表欄位資訊
9753
	#$result["everyLine"],逐行的欄位資訊
9754
	#$result["tableName"],當前查詢的資料表名稱
9755
	#$result["engine"],資料表使用的儲存引擎
9756
	#$result["charset"],資料表預設的編碼
9757
	#$result["columnName"][$i],各欄位的名稱陣列,$i爲1開始的數字,也可以使用欄位的名稱。
9758
	#$result["columnVarTypeAndLengthLimit"][$i],各欄位儲存的變數形態與長度限制,$i爲1開始的數字,也可以使用欄位的名稱。
9759
	#$result["columnVarType"][$i],各欄位變數儲存的型態,$i爲1開始的數字,也可以使用欄位的名稱.
9760
	#$result["columnVarLengthLimit"][$i],個欄位變數的長度限制,若不存在其限制,則為"",$i爲1開始的數字,也可以使用欄位的名稱.
9761
	#$result["columnNotNull"][$i],各欄位是否不可爲null,"true"爲不可以爲null;"false"爲可爲"null",$i爲1開始的數字,也可以使用欄位的名稱。
9762
	#$result["columnAutoIncrement"][$i],各欄位是否會自動加1,"true"爲會;"false"爲不會,$i爲1開始的數字,也可以使用欄位的名稱。
9763
	#$result["columnDefault"][$i],各欄位的預設內容,若無則爲"沒有指定",$i爲1開始的數字,也可以使用欄位的名稱。
9764
	#$result["columnOnUpdateAction"][$i],當資料有修改時,該欄位的內容要怎麼因應,$i爲1開始的數字,也可以使用欄位的名稱。
9765
	#$result["columnCharacterSet"][$i],各欄位使用的CharacterSet,$i爲1開始的數字,也可以使用欄位的名稱。
9766
	#$result["columnCollate"][$i],各欄位使用的Collate,$i爲1開始的數字,也可以使用欄位的名稱。
9767
	#$result["key"]["exist"],該資料表是否有索引鍵,"true"代表有;"false"代表沒有。
9768
	#$result["key"][$j],該資料表的索引鍵陣列,$j爲0開始的數字,也可以使用欄位的名稱。
9769
	#$result["keyConstraintName"][$j],該資料表用於識別索引鍵的CONSTRAINT名稱陣列,$j爲1開始的數字,也可以使用欄位的名稱。
9770
	#$result["primaryKey"],該資料表的主鍵
9771
	#$result["foreignKey"]["exist"],該資料表是否有foreign key,"true"代表有;"fasle"代表沒有。
9772
	#$result["foreignKey"]["constraintName"][$k],用來識別外鍵的CONSTRAINT名稱陣列,$k爲1開始的數字,也可以使用欄位的名稱。
9773
	#$result["foreignKey"]["columnName"][$k],外鍵的名稱陣列,$k爲1開始的數字,也可以使用欄位的名稱。
9774
	#$result["foreignKey"]["referencesTable"][$k],外鍵參照的欄位,$k爲1開始的數字,,也可用欄位的名稱來找value.
9775
	#$result["foreignKey"]["referencesColumn"][$k],外鍵參照的欄位屬於哪個資料表,$k爲1開始的數字,也可用欄位的名稱來找value.
9776
	#$result["foreignKey"]["onUpdateAction"][$i],當參照的欄位資料更新時,會怎麼同步,$i爲1開始的數字,也可用欄位的名稱來找value.
9777
	#$result["foreignKey"]["onDeleteAction"][$i],當參照的欄位資料移除時,會怎麼同步,$i爲1開始的數字,也可用欄位的名稱來找value.
9778
	#必填參數:
9779
	#$conf["dbAddress"],字串,資料庫的網路位置.
9780
	$conf["dbAddress"]=$dbAddress;
9781
	#$conf["dbAccount"],字串,連線到資料庫要用的帳號.
9782
	$conf["dbAccount"]=$dbAccount;
9783
	#$conf["selectedDataBase"],字串,連線到資料庫要選擇的資料庫.
9784
	$conf["selectedDataBase"]=$dbName;
9785
	#$conf["selectedDataTable"],字串,連線到資料庫要檢視的資料表.
9786
	$conf["selectedDataTable"]="";
9787
	#可省略參數:
9788
	#$conf["dbPassword"],字串,連線到資料庫要用的密碼
9789
	#$conf["dbPassword"]=$dbPassword;
9790
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,預設為3306.
9791
	#$conf["dbPort"]="3306";
9792
	#參考資料:
9793
	#無.
9794
	#備註:
9795
	#查詢的功能有點弱,目前用getTableColumnDetailInfo替代
9796
	*/
9797
	public static function getDataTableColumn($conf){
9798
 
9799
		return db::getTableColumnDetailInfo($conf);
9800
 
9801
		}#function getDataTableColumn end
9802
 
9803
	/*
9804
	#函式說明:
9805
	#取得資料表內特定欄位的資訊
9806
	#回傳的內容:
9807
	#$result["status"],"true"代表執行成功;"false"代表執行失敗.
9808
	#$result["error"],錯誤訊息.
9809
	#$result["function"],當前執行的函數名稱.
9810
	#$result["columnInfo"]["name"],欄位的名稱.
9811
	#$result["columnInfo"]["type"],欄位的儲存型態.
9812
	#$result["columnInfo"]["length"],欄位的長度限制.
9813
	#$result["columnInfo"]["null"],欄位是否可以為null.
9814
	#$result["columnInfo"]["key"],索引鍵的名稱.
9815
	#$result["columnInfo"]["keyType"],欄位的鍵屬性.
9816
	#$result["columnInfo"]["foreignKeyConstraintName"],外建的名稱
9817
	#$result["columnInfo"]["referencesTable"],外鍵參考的資料表.
9818
	#$result["columnInfo"]["referencesColumn"],外鍵參考的資料表欄位.
9819
	#$result["columnInfo"]["onUpdateAction"],當參考的欄位更新時,要怎麼因應.
9820
	#$result["columnInfo"]["onDeleteAction"],當參考的欄位資料消失時,要怎麼因應.
9821
	#$result["columnInfo"]["default"],欄位的預設內容.
9822
	#$result["columnInfo"]["columnCharacterSet"],欄位的字元集.
9823
	#$result["columnInfo"]["columnCollate"],欄位的校對編碼.
9824
	#必填參數:
9825
	$conf["dbAddress"],字串,爲mysql-Server的位置
9826
	$conf["dbAddress"]=$dbAddress;
9827
	$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號
9828
	$conf["dbAccount"]=$dbAccount;
9829
	$conf["dbName"]=$dbName;#爲指定的資料庫名稱
9830
	$conf["dtName"]="";#為要檢視的資料表名稱
9831
	$conf["columnName"],字串,為要檢視的資料欄位名稱
9832
	$conf["columnName"]="";#為要檢視的資料欄位名稱
9833
	#可省略參數:
9834
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
9835
	#$conf["dbPassword"]=$dbPassword;
9836
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,預設為3306.
9837
	#$conf["dbPort"]="3306";
9838
	#參考資料:
9839
	#無.
9840
	#備註:
9841
	#無.
9842
	*/
9843
	public static function getDataTableSpecificColumn(&$conf){
9844
 
9845
		#初始化要回傳的內容
9846
		$result=array();
9847
 
9848
		#取得當前執行的函數名稱
9849
		$result["function"]=__FUNCTION__;
9850
 
9851
		#如果 $conf 不為陣列
9852
		if(gettype($conf)!="array"){
9853
 
9854
			#設置執行失敗
9855
			$result["status"]="false";
9856
 
9857
			#設置執行錯誤訊息
9858
			$result["error"][]="\$conf變數須為陣列形態";
9859
 
9860
			#如果傳入的參數為 null
9861
			if($conf==null){
9862
 
9863
				#設置執行錯誤訊息
9864
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
9865
 
9866
				}#if end
9867
 
9868
			#回傳結果
9869
			return $result;
9870
 
9871
			}#if end
9872
 
9873
		#檢查參數
9874
		#函式說明:
9875
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
9876
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
9877
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
9878
		#$result["function"],當前執行的函式名稱.
9879
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
9880
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
9881
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
9882
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
9883
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
9884
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
9885
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
9886
		#必填參數:
9887
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
9888
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
9889
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
9890
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("dbAddress","dbAccount","dbName","dtName","columnName");
9891
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
9892
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string","string","string");
9893
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
9894
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
9895
		#可省略參數:
9896
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
9897
		#$conf["canBeEmptyString"]="false";
9898
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
9899
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("dbPassword","dbPort");
9900
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
9901
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
9902
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
9903
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null);
9904
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
9905
		#$conf["arrayCountEqualCheck"][]=array();
9906
		#參考資料:
9907
		#array_keys=>http://php.net/manual/en/function.array-keys.php
9908
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
9909
		unset($conf["variableCheck::checkArguments"]);	
9910
 
9911
		#如果檢查失敗 
9912
		if($checkResult["status"]=="false"){
9913
 
9914
			#設置執行失敗
9915
			$result["status"]="false";
9916
 
9917
			#設置執行失敗訊息
9918
			$result["error"]=$checkResult;
9919
 
9920
			#回傳結果
9921
			return $result;
9922
 
9923
			}#if end
9924
 
9925
		#如果檢查沒有通過
9926
		if($checkResult["passed"]=="false"){
9927
 
9928
			#設置執行失敗
9929
			$result["status"]="false";
9930
 
9931
			#設置執行失敗訊息
9932
			$result["error"]=$checkResult;
9933
 
9934
			#回傳結果
9935
			return $result;
9936
 
9937
			}#if end
9938
 
9939
		#取得所有的欄位資訊
9940
		#函式說明:
9941
		#取得資料表所有欄位的詳細資訊
9942
		#回傳的內容:
9943
		#$result["status"],執行結果,"true"代表執行成功;"false"代表執行失敗
9944
		#$result["error"],錯誤訊息陣列
9945
		#$result["function"],當前執行的函數名稱.
9946
		#$result["sql"],執行的sql語法
9947
		#$result["oriInput"],原始的資料表欄位資訊
9948
		#$result["everyLine"],逐行的欄位資訊
9949
		#$result["tableName"],當前查詢的資料表名稱
9950
		#$result["engine"],資料表使用的儲存引擎
9951
		#$result["charset"],資料表預設的編碼
9952
		#$result["columnName"][$i],各欄位的名稱陣列,$i爲1開始的數字,也可以使用欄位的名稱。
9953
		#$result["columnVarTypeAndLengthLimit"][$i],各欄位儲存的變數形態與長度限制,$i爲1開始的數字,也可以使用欄位的名稱。
9954
		#$result["columnVarType"][$i],各欄位變數儲存的型態,$i爲1開始的數字,也可以使用欄位的名稱.
9955
		#$result["columnVarLengthLimit"][$i],個欄位變數的長度限制,若不存在其限制,則為"",$i爲1開始的數字,也可以使用欄位的名稱.
9956
		#$result["columnNotNull"][$i],各欄位是否不可爲null,"true"爲不可以爲null;"false"爲可爲"null",$i爲1開始的數字,也可以使用欄位的名稱。
9957
		#$result["columnAutoIncrement"][$i],各欄位是否會自動加1,"true"爲會;"false"爲不會,$i爲1開始的數字,也可以使用欄位的名稱。
9958
		#$result["columnDefault"][$i],各欄位的預設內容,若無則爲"沒有指定",$i爲1開始的數字,也可以使用欄位的名稱。
9959
		#$result["columnOnUpdateAction"][$i],當資料有修改時,該欄位的內容要怎麼因應,$i爲1開始的數字,也可以使用欄位的名稱。
9960
		#$result["columnCharacterSet"][$i],各欄位使用的CharacterSet,$i爲1開始的數字,也可以使用欄位的名稱。
9961
		#$result["columnCollate"][$i],各欄位使用的Collate,$i爲1開始的數字,也可以使用欄位的名稱。
9962
		#$result["key"]["exist"],該資料表是否有索引鍵,"true"代表有;"false"代表沒有。
9963
		#$result["key"][$j],該資料表的索引鍵陣列,$j爲0開始的數字,也可以使用欄位的名稱。
9964
		#$result["keyConstraintName"][$j],該資料表用於識別索引鍵的CONSTRAINT名稱陣列,$j爲1開始的數字,也可以使用欄位的名稱。
9965
		#$result["primaryKey"],該資料表的主鍵
9966
		#$result["foreignKey"]["exist"],該資料表是否有foreign key,"true"代表有;"fasle"代表沒有。
9967
		#$result["foreignKey"]["constraintName"][$k],用來識別外鍵的CONSTRAINT名稱陣列,$k爲1開始的數字,也可以使用欄位的名稱。
9968
		#$result["foreignKey"]["columnName"][$k],外鍵的名稱陣列,$k爲1開始的數字,也可以使用欄位的名稱。
9969
		#$result["foreignKey"]["referencesTable"][$k],外鍵參照的欄位,$k爲1開始的數字,,也可用欄位的名稱來找value.
9970
		#$result["foreignKey"]["referencesColumn"][$k],外鍵參照的欄位屬於哪個資料表,$k爲1開始的數字,也可用欄位的名稱來找value.
9971
		#$result["foreignKey"]["onUpdateAction"][$i],當參照的欄位資料更新時,會怎麼同步,$i爲1開始的數字,也可用欄位的名稱來找value.
9972
		#$result["foreignKey"]["onDeleteAction"][$i],當參照的欄位資料移除時,會怎麼同步,$i爲1開始的數字,也可用欄位的名稱來找value.
9973
		#必填參數:
9974
		$conf["db::getTableColumnDetailInfo"]["dbAddress"]=$conf["dbAddress"];#資料庫的網路位置
9975
		$conf["db::getTableColumnDetailInfo"]["dbAccount"]=$conf["dbAccount"];#連線到資料庫要用的帳號
9976
		$conf["db::getTableColumnDetailInfo"]["selectedDataBase"]=$conf["dbName"];#連線到資料庫要選擇的資料庫
9977
		$conf["db::getTableColumnDetailInfo"]["selectedDataTable"]=$conf["dtName"];#連線到資料庫要檢視的資料表
9978
		#可省略參數:
9979
 
9980
		#如果有設定連線密碼
9981
		if(isset($conf["dbPassword"])){
9982
 
9983
			$conf["db::getTableColumnDetailInfo"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
9984
 
9985
			}#if end
9986
 
9987
		#如果有設定連線port
9988
		if(isset($conf["dbPort"])){
9989
 
9990
			$conf["db::getTableColumnDetailInfo"]["dbPort"]=$conf["dbPort"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
9991
 
9992
			}#if end
9993
 
9994
		$queryResult=db::getTableColumnDetailInfo($conf["db::getTableColumnDetailInfo"]);
9995
		unset($conf["db::getTableColumnDetailInfo"]);
9996
 
9997
		#如果查詢失敗
9998
		if($queryResult["status"]=="false"){
9999
 
10000
			#設置錯誤
10001
			$result["status"]="false";
10002
 
10003
			#設置錯誤訊息
10004
			$result["error"]=$queryResult;
10005
 
10006
			#回傳結果
10007
			return $result;
10008
 
10009
			}#if end
10010
 
10011
		#var_dump($queryResult);
10012
 
10013
		#檢查是否有我們要的欄位存在
10014
		#函式說明:
10015
		#檢查一個數值是否與陣列裏面的元素相同
10016
		#回傳結果::
10017
		#$result["status"],"true"表示執行正確,"false"表示執行錯誤.
10018
		#$result["founded"],"true"表示有找到相同的,"false"表示沒有找到相同的.
10019
		#$result["error"],錯誤訊息
10020
		#$result["function"],當前執行的函數名稱
10021
		#$result["equalVarName"],相等的變數名稱或key.
10022
		#$result["equalVarValue"],相等的變數數值內容.
10023
		#必填參數:
10024
		$conf["search"]["getEqualVar"]["conditionElement"]=$conf["columnName"];#條件元素,要等於的元素內容。
10025
		$conf["search"]["getEqualVar"]["compareElements"]=$queryResult["columnName"];#要比對的陣列變數內容。
10026
		$searchResult=search::getEqualVar($conf["search"]["getEqualVar"]);
10027
		unset($conf["search"]["getEqualVar"]);
10028
 
10029
		#如果尋找失敗
10030
		if($searchResult["status"]=="false"){
10031
 
10032
			#設置錯誤
10033
			$result["status"]="false";
10034
 
10035
			#設置錯誤訊息
10036
			$result["error"]=$searchResult;
10037
 
10038
			#回傳結果
10039
			return $result;
10040
 
10041
			}#if end
10042
 
10043
		#如果沒有找到符合的欄位明稱
10044
		if($searchResult["founded"]=="false"){
10045
 
10046
			#設置錯誤
10047
			$result["status"]="false";
10048
 
10049
			#設置錯誤訊息
10050
			$result["error"]="沒有找到指定的欄位!";
10051
 
10052
			#回傳結果
10053
			return $result;
10054
 
10055
			}#if end
10056
 
10057
		#取得欄位資訊的key
10058
		$equalVarKey=$searchResult["equalVarName"];
10059
 
10060
		#取得欄位的名稱
10061
		$result["columnInfo"]["name"]=$queryResult["columnName"][$equalVarKey];
10062
 
10063
		#取欄位的儲存型態與長度限制
10064
		$result["columnInfo"]["type"]=$queryResult["columnVarType"][$equalVarKey];
10065
 
10066
		#檢查欄位儲存型態是否含有「(」與「)」
10067
		#函式說明:
10068
		#檢查一個字串裡面是否有多個關鍵字
10069
		#回傳結果::
10070
		#$result["status"],"true"代表執行成功,"false"代表執行失敗。
10071
		#$result["error"],錯誤訊息
10072
		#$result["founded"],是否找到所有的關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
10073
		#必填參數:
10074
		$conf["search"]["findManyKeyWords"]["keyWords"]=array("(",")");#想要搜尋的關鍵字
10075
		$conf["search"]["findManyKeyWords"]["string"]=$result["columnInfo"]["type"];#要被搜尋的字串內容
10076
		#可省略參數:
10077
		#$conf["search"]["findManyKeyWords"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
10078
		$searchResult=search::findManyKeyWords($conf["search"]["findManyKeyWords"]);
10079
		unset($conf["search"]["findManyKeyWords"]);
10080
 
10081
		#如果 檢查欄位儲存型態是否含有「(」與「)」 失敗
10082
		if($searchResult["status"]=="false"){
10083
 
10084
			#設置錯誤
10085
			$result["status"]="false";
10086
 
10087
			#設置錯誤訊息
10088
			$result["error"]=$searchResult;
10089
 
10090
			#回傳結果
10091
			return $result;
10092
 
10093
			}#if end
10094
 
10095
		#如果欄位儲存型態含有「(」與「)」,則將其從「(」開始分割
10096
		if($searchResult["founded"]=="true"){
10097
 
10098
			#函式說明:
10099
			#將固定格式的字串分開,並回傳分開的結果。
10100
			#回傳的參數:
10101
			#$result["oriStr"],要分割的原始字串內容
10102
			#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
10103
			#$result["dataCounts"],爲總共分成幾段
10104
			#必填參數:
10105
			$conf["stringProcess"]["spiltString"]["stringIn"]=$result["columnInfo"]["type"];#要處理的字串。
10106
			$conf["stringProcess"]["spiltString"]["spiltSymbol"]="(";#爲以哪個符號作爲分割
10107
			$spiltedStr=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
10108
			unset($conf["stringProcess"]["spiltString"]);
10109
 
10110
			#如果分割字串失敗
10111
			if($spiltedStr["status"]=="false"){
10112
 
10113
				#設置錯誤
10114
				$result["status"]="false";
10115
 
10116
				#設置錯誤訊息
10117
				$result["error"]=$spiltedStr;
10118
 
10119
				#回傳結果
10120
				return $result;
10121
 
10122
				}#if end
10123
 
10124
			#取得欄位型態
10125
			$result["columnInfo"]["type"]=$spiltedStr["dataArray"][0];
10126
 
10127
			}#if end 
10128
 
10129
		#取得欄位長度限制
10130
		$result["columnInfo"]["length"]=$queryResult["columnVarLengthLimit"][$conf["columnName"]];
10131
 
10132
		#取得欄位是否可以為null
10133
		$result["columnInfo"]["null"]=$queryResult["columnNotNull"][$conf["columnName"]];
10134
 
10135
		#如果該欄位有key的名稱
10136
		if(isset($queryResult["key"][$conf["columnName"]])){
10137
 
10138
			#該欄位為index key
10139
			$result["columnInfo"]["keyType"]="index key";
10140
 
10141
			#取得欄位的鍵名稱
10142
			$result["columnInfo"]["key"]=$queryResult["keyConstraintName"];
10143
 
10144
			}#if end
10145
 
10146
		#如果該欄位是foreignKey
10147
		if(isset($queryResult["foreignKey"]["constraintName"][$conf["columnName"]])){
10148
 
10149
			#該欄位為foreign key
10150
			$result["columnInfo"]["keyType"]="foreign key";
10151
 
10152
			#取得外鍵的名稱
10153
			$result["columnInfo"]["foreignKeyConstraintName"]=$queryResult["foreignKey"]["constraintName"][$conf["columnName"]];
10154
 
10155
			#取得外鍵參考的資料表
10156
			$result["columnInfo"]["referencesTable"]=$queryResult["foreignKey"]["referencesTable"][$conf["columnName"]];
10157
 
10158
			#取得外按鍵參考的欄位
10159
			$result["columnInfo"]["referencesColumn"]=$queryResult["foreignKey"]["referencesColumn"][$conf["columnName"]];
10160
 
10161
			#當參考的欄位更新時,要怎麼因應
10162
			$result["columnInfo"]["onUpdateAction"]=$queryResult["foreignKey"]["onUpdateAction"][$conf["columnName"]];
10163
 
10164
			#當參考的欄位資料消失時,要怎麼因應
10165
			$result["columnInfo"]["onDeleteAction"]=$queryResult["foreignKey"]["onDeleteAction"][$conf["columnName"]];
10166
 
10167
			}#if enb
10168
 
10169
		#取得欄位的預設內容
10170
		$result["columnInfo"]["default"]=$queryResult["columnDefault"][$conf["columnName"]];
10171
 
10172
		#取得欄位的字元集
10173
		$result["columnInfo"]["columnCharacterSet"]=$queryResult["columnCharacterSet"][$conf["columnName"]];
10174
 
10175
		#取得欄位的校對編碼設定
10176
		$result["columnInfo"]["columnCollate"]=$queryResult["columnCollate"][$conf["columnName"]];
10177
 
10178
		#設置執行成功
10179
		$result["status"]="true";
10180
 
10181
		#回傳結果
10182
		return $result;
10183
 
10184
		}#function getDataTableSpecificColumn end
10185
 
10186
	/*
10187
	#函式說明:
10188
	#檢查資料庫裏的資料表有無指定條件的資料
10189
	#回傳結果::
10190
	#$result["status"],執行是否成功,成功為"true",失敗為"false"。
10191
	#$result["error"],錯誤訊息	
10192
	#$result["founded"],是否找到資料,"true"代表有符合的資料;"false"代表沒有符合的資料.		
10193
	#$result["sql"],執行的sql字串.
10194
	#$result["function"],當前執行的函數名稱.
10195
	#必填參數:
10196
	$conf["dbAddress"],字串,爲mysql-Server的位置
10197
	$conf["dbAddress"]="";
10198
	$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號
10199
	$conf["dbAccount"]="";
10200
	$conf["selectedDataBaseName"],字串,爲指定的資料庫名稱,欲選擇的資料庫名稱
10201
	$conf["selectedDataBaseName"]="";
10202
	$conf["selectedDataTableName"],字串,欲選擇的資料表名稱
10203
	$conf["selectedDataTableName"]="";
10204
	#可省略參數:
10205
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼.
10206
	#$conf["dbPassword"]=$dbPassword;
10207
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,可省略,若省略則代表使用預設的3306 port.
10208
	#$conf["dbPort"]="";
10209
	#$conf["conditionTargetName"],字串陣列,用來判斷的資料表數值名稱,需爲陣列,可省略
10210
	#$conf["conditionTargetName"]=array("");
10211
	#$conf["conditionTargetValue"],字串陣列,用來判斷的資料表數值名稱若等於該數值,表示條件成立,需爲陣列,可省略
10212
	#$conf["conditionTargetValue"]=array("");
10213
	#參考資料:
10214
	#無.
10215
	#備註:
10216
	#無.
10217
	*/
10218
	public static function checkDataExists($conf){
10219
 
10220
		#初始化要回傳的內容
10221
		$result=array();
10222
 
10223
		#取得當前執行的函數名稱
10224
		$result["function"]=__FUNCTION__;
10225
 
10226
		#如果 $conf 不為陣列
10227
		if(gettype($conf)!="array"){
10228
 
10229
			#設置執行失敗
10230
			$result["status"]="false";
10231
 
10232
			#設置執行錯誤訊息
10233
			$result["error"][]="\$conf變數須為陣列形態";
10234
 
10235
			#如果傳入的參數為 null
10236
			if($conf==null){
10237
 
10238
				#設置執行錯誤訊息
10239
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
10240
 
10241
				}#if end
10242
 
10243
			#回傳結果
10244
			return $result;
10245
 
10246
			}#if end
10247
 
10248
		#函式說明:
10249
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
10250
		#回傳結果:
10251
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
10252
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
10253
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
10254
		#必填參數:
10255
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
10256
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("dbAddress","dbAccount","selectedDataBaseName","selectedDataTableName");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
10257
		#可省略參數:
10258
		$conf["variableType"]=array("string","string","string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
10259
		#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
10260
		#備註:
10261
		#功能與checkExistAndType函式相同
10262
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
10263
		unset($conf["variableCheck"]["isexistMuti"]);
10264
 
10265
		#如果檢查失敗
10266
		if($checkResult["status"]=="false"){
10267
 
10268
			#設置錯誤識別
10269
			$result["status"]="false";
10270
 
10271
			#設置錯誤訊息
10272
			$result["error"]=$checkResult;
10273
 
10274
			#回傳結果
10275
			return $result;
10276
 
10277
			}#if end
10278
 
10279
		#如果檢查沒有通過
10280
		if($checkResult["passed"]=="false"){
10281
 
10282
			#設置錯誤識別
10283
			$result["status"]="false";
10284
 
10285
			#設置錯誤訊息
10286
			$result["error"]=$checkResult;
10287
 
10288
			#回傳結果
10289
			return $result;
10290
 
10291
			}#if end
10292
 
10293
		#如果 $conf["conditionTargetName"] 有設定
10294
		if(isset($conf["conditionTargetName"])){
10295
 
10296
			#如果其形態不爲 array
10297
			if(gettype($conf["conditionTargetName"])!="array"){
10298
 
10299
				#設置錯誤識別
10300
				$result["status"]="false";
10301
 
10302
				#設置錯誤訊息
10303
				$result["error"]="\$conf[\"conditionTargetName\"]須爲陣列值";
10304
 
10305
				#回傳結果
10306
				return $result;
10307
 
10308
				}#if end
10309
 
10310
			}#if end
10311
 
10312
		#如果 $conf["conditionTargetValue"] 有設定
10313
		if(isset($conf["conditionTargetValue"])){
10314
 
10315
			#如果其形態不爲 array
10316
			if(gettype($conf["conditionTargetValue"])!="array"){
10317
 
10318
				#設置錯誤識別
10319
				$result["status"]="false";
10320
 
10321
				#設置錯誤訊息
10322
				$result["error"]="\$conf[\"conditionTargetValue\"]須爲陣列值";
10323
 
10324
				#回傳結果
10325
				return $result;
10326
 
10327
				}#if end
10328
 
10329
			}#if end
10330
 
10331
		#函式說明:
10332
		#一次取得資料庫、表的資料
10333
		#回傳結果:
10334
		#$result["status"],執行結果"true"為成功;"false"為執行失敗。
10335
		#$result["error"],錯誤訊息陣列。
10336
		#$result["dataContent"],爲資料的內容。
10337
		#$result["dataContent"][$conf["WhereColumnName"][$i]][$dataSetNum]
10338
			#$dataSetNum 爲第$dataSetNum+1筆資料
10339
			#$conf["WhereColumnName"][$i] 爲第 $i+1 個欄位的名稱
10340
		#$result["dataCount"],爲取得的資料筆數。
10341
		#必填參數:
10342
		$conf["db"]["fastGetDbData"]["dbAddress"]=$conf["dbAddress"];#爲dbServer的位置。
10343
		$conf["db"]["fastGetDbData"]["dbAccount"]=$conf["dbAccount"];#爲登入dbServer的帳號。
10344
		$conf["db"]["fastGetDbData"]["dbName"]=$conf["selectedDataBaseName"];#爲要存取的資料庫名稱
10345
		$conf["db"]["fastGetDbData"]["tableName"]=$conf["selectedDataTableName"];#爲要存取的資料表名稱
10346
		$conf["db"]["fastGetDbData"]["columnYouWant"]=$conf["conditionTargetName"];#你想要的欄位!
10347
		#可省略參數:
10348
 
10349
		#如果 $conf["dbPassword"] 有設置
10350
		if(isset($conf["dbPassword"])){
10351
 
10352
			$conf["db"]["fastGetDbData"]["dbPassword"]=$conf["dbPassword"];#爲要存取dbServer的密碼
10353
 
10354
			}#if end
10355
 
10356
		#如果 $conf["dbPort"] 有設置
10357
		if(isset($conf["dbPort"])){
10358
 
10359
			$conf["db"]["fastGetDbData"]["dbPort"]=$conf["dbPort"];#爲要存取dbServer的port
10360
 
10361
			}#if end
10362
 
10363
		$conf["db"]["fastGetDbData"]["WhereColumnName"]=$conf["conditionTargetName"];#用於判斷語句的欄位項目陣列。
10364
		$conf["db"]["fastGetDbData"]["WhereColumnValue"]=$conf["conditionTargetValue"];#用於判斷語句的欄位數值陣列,若與LIKE搭配,則可以在關鍵自字串的左右名加上「%」符號,這樣就可以搜尋具有該字串的內容。
10365
		#$conf["db"]["fastGetDbData"]["WhereColumnCombine"]=array("");#用於判斷語句當中需要()起來的判斷式,須爲陣列值,"s"代表「(」,"e"代表「)」 ,若無則須設爲""。
10366
		#$conf["db"]["fastGetDbData"]["WhereColumnOperator"]=array("");#用於判斷語句的比較符號陣列,可以用的符號有「"="、">"、"<"、"LIKE"、"NOT LIKE"」,預設都爲「=」。
10367
		#$conf["db"]["fastGetDbData"]["WhereColumnAndOr"]=array("");#用於判斷語句條件之間成立的條件是AND還是OR,須爲陣列值。其數量應爲要判斷的欄位數量減一。
10368
		#$conf["db"]["fastGetDbData"]["orderItem"]="";#爲排序的項目依據,若要用隨機抽樣,可以用"rand()",可省略。
10369
		#$conf["db"]["fastGetDbData"]["ascORdesc"]="";#爲要低增還是遞減排序,asc爲遞增;desc爲遞減。
10370
		#$conf["db"]["fastGetDbData"]["numberStart"]="0";#為從第幾筆開始讀取,預設為0,代筆第一筆。
10371
		#$conf["db"]["fastGetDbData"]["numLimit"]="30";#為要取幾筆資料,可以省略,省略則表示不限制數目。
10372
		#$conf["db"]["fastGetDbData"]["groupBy"]=array("");#爲要以哪幾個欄爲作爲分羣的依據(欄位相同的數值僅會取出一筆)。
10373
		$dataResult=db::fastGetDbData($conf["db"]["fastGetDbData"]);
10374
		unset($conf["db"]["fastGetDbData"]);
10375
 
10376
		#如果查詢資料失敗
10377
		if($dataResult["status"]=="false"){
10378
 
10379
			#設置錯誤識別
10380
			$result["status"]="false";
10381
 
10382
			#設置錯誤訊息
10383
			$result["error"]=$dataResult;
10384
 
10385
			#回傳結果
10386
			return $result;
10387
 
10388
			}#if end
10389
 
10390
		#取得執行的sql字串
10391
		$result["sql"]=$dataResult["sql"];
10392
 
10393
		#如果 $dataResult["status"] 等於"false"
10394
		if($dataResult["status"]=="false"){
10395
 
10396
			#設置錯誤識別
10397
			$result["status"]="false";
10398
 
10399
			#設置錯誤訊息
10400
			$result["error"]=$dataResult;
10401
 
10402
			#回傳結果
10403
			return $result;
10404
 
10405
			}#if end
10406
 
10407
		#如果$dataResult["dataCount"]沒設定,就表示沒找到相符的資料
10408
		if(!isset($dataResult["dataCount"])){
10409
 
10410
			#設置錯誤識別
10411
			$result["status"]="true";
10412
 
10413
			#設置沒有找到符合資料
10414
			$result["founded"]="false";
10415
 
10416
			#回傳結果
10417
			return $result;
10418
 
10419
			}#if end
10420
 
10421
		#如果符合的資料等於0
10422
		if($dataResult["dataCount"]==0){
10423
 
10424
			#設置錯誤識別
10425
			$result["status"]="true";
10426
 
10427
			#設置沒有找到符合資料
10428
			$result["founded"]="false";
10429
 
10430
			#回傳結果
10431
			return $result;
10432
 
10433
			}#if end
10434
 
10435
		#執行到這邊代表執行成功
10436
		$result["status"]="true";
10437
 
10438
		#設置有找到符合資料
10439
		$result["founded"]="true";
10440
 
10441
		#回傳結果
10442
		return $result;
10443
 
10444
		}#function checkDataExists
10445
 
10446
	/*
10447
	#函式說明:
10448
	#檢查資料表是否存在
10449
	#回傳結果::
10450
	#設置執行錯誤的識別
10451
	#$result["status"],"true"代表執行成功;"false"代表執行失敗.
10452
	#$result["error"],錯誤訊息.
10453
	#$result["founded"],是否有有找到相同的,"true"代表有找到符合的資料;"false"代表沒有符合的資料.
10454
	#$result["function"],當前執行的函數名稱.
10455
	#$result["argu"],使用的參數
10456
	#其餘的結果代表參數不正確
10457
	#必填參數:
10458
	#$conf["dbAddress"],字串,爲mysql-Server的位置
10459
	$conf["dbAddress"]=$dbAddress;
10460
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號
10461
	$conf["dbAccount"]=$dbAccount;
10462
	#$conf["selectedDataBaseName"],字串,爲指定的資料庫名稱
10463
	$conf["selectedDataBaseName"]="";
10464
	#$conf["selectedDataTableName"],字串,為要檢查是否存在的資料表名稱
10465
	$conf["selectedDataTableName"]="";
10466
	#可省略參數
10467
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼 
10468
	#$conf["dbPassword"]=$dbPassword;
10469
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,可省略,若省略則代表使用預設的3306 port.
10470
	#$conf["dbPort"]="";
10471
	#參考資料:
10472
	#無.
10473
	#備註:
10474
	#無.
10475
	*/
10476
	public static function checkDataTableExists($conf){
10477
 
10478
		#初始化要回傳的變數
10479
		$result=array();
10480
 
10481
		#取得當前執行的函數名稱
10482
		$result["function"]=__FUNCTION__;
10483
 
10484
		#如果 $conf 不為陣列
10485
		if(gettype($conf)!="array"){
10486
 
10487
			#設置執行失敗
10488
			$result["status"]="false";
10489
 
10490
			#設置執行錯誤訊息
10491
			$result["error"][]="\$conf變數須為陣列形態";
10492
 
10493
			#如果傳入的參數為 null
10494
			if($conf==null){
10495
 
10496
				#設置執行錯誤訊息
10497
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
10498
 
10499
				}#if end
10500
 
10501
			#回傳結果
10502
			return $result;
10503
 
10504
			}#if end
10505
 
10506
		#取得參數
10507
		$result["argu"]=$conf;
10508
 
10509
		#函式說明:
10510
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
10511
		#回傳結果:
10512
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
10513
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
10514
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
10515
		#必填參數:
10516
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
10517
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("dbAddress","dbAccount","selectedDataBaseName","selectedDataTableName");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
10518
		#可省略參數:
10519
		$conf["variableType"]=array("string","string","string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
10520
		#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
10521
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
10522
		unset($conf["variableCheck"]["isexistMuti"]);
10523
 
10524
		#var_dump($checkResult);
10525
 
10526
		#如果檢查不通過
10527
		if($checkResult["passed"]=="false"){
10528
 
10529
			#設置執行錯誤的識別
10530
			$result["status"]="false";
10531
 
10532
			#設置錯誤訊息
10533
			$result["error"]=$checkResult;
10534
 
10535
			#回傳結果
10536
			return $result;
10537
 
10538
			}#if end
10539
 
10540
		#查詢特定資料庫裡的資料表列表,會回傳查詢的結果
10541
		#$result["status"],若成功則爲0,失敗則爲1。
10542
		#$result["error"],錯誤訊息陣列.
10543
		#$result["tableName"] 爲查詢的資料庫名稱陣列,
10544
			#第一筆資料庫名稱爲$result["tableName"][0],
10545
			#第二筆資料庫名稱爲$result["tableName"][1],
10546
			#其餘以此類推。
10547
		#$result["dataCounts"] 爲資料庫的總筆數
10548
		#必填參數:
10549
		$conf["db"]["getDataTableList"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
10550
		$conf["db"]["getDataTableList"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
10551
		$conf["db"]["getDataTableList"]["selectedDataBaseName"]=$conf["selectedDataBaseName"];#爲指定的資料庫名稱
10552
		#可省略參數:
10553
 
10554
		#如果 $conf["dbPassword"] 有設定
10555
		if(isset($conf["dbPassword"])){
10556
 
10557
			#設定連線時要用的密碼
10558
			$conf["db"]["getDataTableList"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
10559
 
10560
			}#if end
10561
 
10562
		#如果 $conf["dbPort"] 有設定
10563
		if(isset($conf["dbPort"])){
10564
 
10565
			#設定連線時要用的密碼
10566
			$conf["db"]["getDataTableList"]["dbPort"]=$conf["dbPort"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
10567
 
10568
			}#if end		
10569
 
10570
		#原始語法:
10571
		#show tables FROM databaseName,代表檢視databaseName裡面的資料表清單。
10572
		$dataTableList=db::getDataTableList($conf["db"]["getDataTableList"]);
10573
		unset($conf["db"]["getDataTableList"]);
10574
 
10575
		#如果調閱資料表清單出錯
10576
		if($dataTableList["status"]=="false"){
10577
 
10578
			#設置錯誤識別
10579
			$result["status"]="false";
10580
 
10581
			#設置錯誤訊息
10582
			$result["error"]=$dataTableList;
10583
 
10584
			#回傳結果
10585
			return $result;
10586
 
10587
			}#if end
10588
 
10589
		#如果裡面沒有任何1個資料表
10590
		if($dataTableList["dataCounts"]==0){
10591
 
10592
			#設置執行成功的識別
10593
			$result["status"]="true";
10594
 
10595
			#設置有找到相同的
10596
			$result["founded"]="false";
10597
 
10598
			#回傳結果
10599
			return $result;
10600
 
10601
			}#if end
10602
 
10603
		#函式說明:
10604
		#檢查一個數值是否與陣列裏面的元素相同
10605
		#回傳結果::
10606
		#$result["status"],"true"表示執行正確,"false"表示執行錯誤.
10607
		#$result["founded"],"true"表示有找到相同的,"false"表示沒有找到相同的.
10608
		#$result["error"],錯誤訊息
10609
		#$result["function"],當前執行的函數名稱
10610
		#$result["argv"],使用的參數
10611
		#$result["equalVarName"],相等的變數名稱或key.
10612
		#$result["equalVarValue"],相等的變數數值內容.
10613
		#必填參數:
10614
		$conf["search"]["getEqualVar"]["conditionElement"]=$conf["selectedDataTableName"];#條件元素,要等於的元素內容。
10615
		$conf["search"]["getEqualVar"]["compareElements"]=$dataTableList["tableName"];#要比對的陣列變數內容。
10616
		$checkResult=search::getEqualVar($conf["search"]["getEqualVar"]);
10617
		unset($conf["search"]["getEqualVar"]);
10618
 
10619
		#如果有找到相同的元素
10620
		if($checkResult["founded"]==="true"){
10621
 
10622
			#設置執行成功的識別
10623
			$result["status"]="true";
10624
 
10625
			#設置有找到相同的
10626
			$result["founded"]="true";
10627
 
10628
			#回傳結果
10629
			return $result;
10630
 
10631
			}#if end
10632
 
10633
		#如果沒有找到相同的元素
10634
		if($checkResult["founded"]==="false"){
10635
 
10636
			#設置執行成功的識別
10637
			$result["status"]="true";
10638
 
10639
			#設置有找到相同的
10640
			$result["founded"]="false";
10641
 
10642
			#回傳結果
10643
			return $result;
10644
 
10645
			}#if end
10646
 
10647
		#不應該執行到這邊
10648
 
10649
		#設置執行失敗
10650
		$result["status"]="false";
10651
 
10652
		#設置執行錯誤
10653
		$result["error"]="不應該出現的例外狀況";
10654
 
10655
		#回傳結果
10656
		return $result;
10657
 
10658
		}#funcrion checkDataTableExists end
10659
 
10660
	/*
10661
	#函式說明:
10662
	#檢查資料表的欄位是否存在
10663
	#回傳結果::
10664
	#設置執行錯誤的識別
10665
	#$result["function"],當前執行的函數名稱.
10666
	#$result["status"],"true"代表執行成功;"false"代表執行失敗.
10667
	#$result["error"],錯誤訊息.
10668
	#$result["warning"],警告訊息陣列
10669
	#$result["passed"],是否通過檢查,"true"代表通過;"false"代表不通過.
10670
	#其餘的結果代表參數不正確
10671
	#必填參數:
10672
	#$conf["dbAddr"],字串,爲mysql-Server的位置
10673
	$conf["dbAddr"]=$dbAddress; 
10674
	#$conf["dbAcct"],字串,爲用於連入mysql-Server時要使用的帳號
10675
	$conf["dbAcct"]=$dbAccount;
10676
	#$conf["dbName"],字串,爲指定的資料庫名稱
10677
	$conf["dbName"]="";
10678
	#$conf["dtName"],字串,為要檢查是否存在的資料表名稱
10679
	$conf["dtName"]="";
10680
	#$conf["col"],字串陣列,要檢查的欄位名稱.
10681
	$conf["col"]=array();
10682
	#可省略參數
10683
	#$conf["dbPass"],爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼 
10684
	#$conf["dbPass"]=$dbPassword;
10685
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,可省略,若省略則代表使用預設的3306 port.
10686
	#$conf["dbPort"]="";
10687
	#參考資料:
10688
	#無.
10689
	#備註:
10690
	#無.
10691
	*/
10692
	public static function checkTableColExists(&$conf=array()){
10693
 
10694
		#初始化要回傳的結果
10695
		$result=array();
10696
 
10697
		#取得當前執行的函數名稱
10698
		$result["function"]=__FUNCTION__;
10699
 
10700
		#如果沒有參數
10701
		if(func_num_args()==0){
10702
 
10703
			#設置執行失敗
10704
			$result["status"]="false";
10705
 
10706
			#設置執行錯誤訊息
10707
			$result["error"]="函數".$result["function"]."需要參數";
10708
 
10709
			#回傳結果
10710
			return $result;
10711
 
10712
			}#if end
10713
 
10714
		#取得參數
10715
		$result["argu"]=$conf;
10716
 
10717
		#如果 $conf 不為陣列
10718
		if(gettype($conf)!=="array"){
10719
 
10720
			#設置執行失敗
10721
			$result["status"]="false";
10722
 
10723
			#設置執行錯誤訊息
10724
			$result["error"][]="\$conf變數須為陣列形態";
10725
 
10726
			#如果傳入的參數為 null
10727
			if($conf===null){
10728
 
10729
				#設置執行錯誤訊息
10730
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
10731
 
10732
				}#if end
10733
 
10734
			#回傳結果
10735
			return $result;
10736
 
10737
			}#if end
10738
 
10739
		#函式說明:
10740
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
10741
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
10742
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
10743
		#$result["function"],當前執行的函式名稱.
10744
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
10745
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
10746
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
10747
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
10748
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
10749
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
10750
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
10751
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
10752
		#必填參數:
10753
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
10754
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
10755
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
10756
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
10757
		#可以省略的參數:
10758
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
10759
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("dbAddr","dbName","dbAcct","dtName","col");
10760
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
10761
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string","string","array");
10762
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
10763
		#$conf["canBeEmptyString"]="false";
10764
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
10765
		#$conf["canNotBeEmpty"]=array();
10766
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
10767
		#$conf["canBeEmpty"]=array();
10768
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
10769
		#$conf["skipableVariableCanNotBeEmpty"]=array();
10770
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
10771
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("dbPass","dbPort");
10772
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
10773
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
10774
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
10775
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null);
10776
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
10777
		#$conf["disallowAllSkipableVarIsEmpty"]="";
10778
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
10779
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
10780
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
10781
		#$conf["arrayCountEqualCheck"][]=array();
10782
		#參考資料:
10783
		#array_keys=>http://php.net/manual/en/function.array-keys.php
10784
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
10785
		unset($conf["variableCheck::checkArguments"]);
10786
 
10787
		#如果檢查失敗
10788
		if($checkArguments["status"]==="false"){
10789
 
10790
			#設置執行失敗
10791
			$result["status"]="false";
10792
 
10793
			#設置錯誤訊息
10794
			$result["error"]=$checkArguments["error"];
10795
 
10796
			#回傳結果
10797
			return $result;
10798
 
10799
			}#if  end
10800
 
10801
		#如果檢查不通過
10802
		if($checkArguments["passed"]==="false"){
10803
 
10804
			#設置執行失敗
10805
			$result["status"]="false";
10806
 
10807
			#設置錯誤訊息
10808
			$result["error"]=$checkArguments["error"];
10809
 
10810
			#回傳結果
10811
			return $result;
10812
 
10813
			}#if  end
10814
 
10815
		#函式說明:
10816
		#取得資料表所有欄位的詳細資訊
10817
		#回傳的內容:
10818
		#$result["status"],執行結果,"true"代表執行成功;"false"代表執行失敗
10819
		#$result["error"],錯誤訊息陣列
10820
		#$result["function"],當前執行的函數名稱.
10821
		#$result["sql"],執行的sql語法
10822
		#$result["oriInput"],原始的資料表欄位資訊
10823
		#$result["everyLine"],逐行的欄位資訊
10824
		#$result["tableName"],當前查詢的資料表名稱
10825
		#$result["engine"],資料表使用的儲存引擎
10826
		#$result["charset"],資料表預設的編碼
10827
		#$result["columnName"][$i],各欄位的名稱陣列,$i爲1開始的數字,也可以使用欄位的名稱。
10828
		#$result["columnVarTypeAndLengthLimit"][$i],各欄位儲存的變數形態與長度限制,$i爲1開始的數字,也可以使用欄位的名稱。
10829
		#$result["columnVarType"][$i],各欄位變數儲存的型態,$i爲1開始的數字,也可以使用欄位的名稱.
10830
		#$result["columnVarLengthLimit"][$i],個欄位變數的長度限制,若不存在其限制,則為"",$i爲1開始的數字,也可以使用欄位的名稱.
10831
		#$result["columnNotNull"][$i],各欄位是否不可爲null,"true"爲不可以爲null;"false"爲可爲"null",$i爲1開始的數字,也可以使用欄位的名稱。
10832
		#$result["columnAutoIncrement"][$i],各欄位是否會自動加1,"true"爲會;"false"爲不會,$i爲1開始的數字,也可以使用欄位的名稱。
10833
		#$result["columnDefault"][$i],各欄位的預設內容,若無則爲"沒有指定",$i爲1開始的數字,也可以使用欄位的名稱。
10834
		#$result["columnOnUpdateAction"][$i],當資料有修改時,該欄位的內容要怎麼因應,$i爲1開始的數字,也可以使用欄位的名稱。
10835
		#$result["columnCharacterSet"][$i],各欄位使用的CharacterSet,$i爲1開始的數字,也可以使用欄位的名稱。
10836
		#$result["columnCollate"][$i],各欄位使用的Collate,$i爲1開始的數字,也可以使用欄位的名稱。
10837
		#$result["key"]["exist"],該資料表是否有索引鍵,"true"代表有;"false"代表沒有。
10838
		#$result["key"][$j],該資料表的索引鍵陣列,$j爲0開始的數字,也可以使用欄位的名稱。
10839
		#$result["keyConstraintName"][$j],該資料表用於識別索引鍵的CONSTRAINT名稱陣列,$j爲1開始的數字,也可以使用欄位的名稱。
10840
		#$result["primaryKey"],該資料表的主鍵
10841
		#$result["foreignKey"]["exist"],該資料表是否有foreign key,"true"代表有;"fasle"代表沒有。
10842
		#$result["foreignKey"]["constraintName"][$k],用來識別外鍵的CONSTRAINT名稱陣列,$k爲1開始的數字,也可以使用欄位的名稱。
10843
		#$result["foreignKey"]["columnName"][$k],外鍵的名稱陣列,$k爲1開始的數字,也可以使用欄位的名稱。
10844
		#$result["foreignKey"]["referencesTable"][$k],外鍵參照的欄位,$k爲1開始的數字,,也可用欄位的名稱來找value.
10845
		#$result["foreignKey"]["referencesColumn"][$k],外鍵參照的欄位屬於哪個資料表,$k爲1開始的數字,也可用欄位的名稱來找value.
10846
		#$result["foreignKey"]["onUpdateAction"][$i],當參照的欄位資料更新時,會怎麼同步,$i爲1開始的數字,也可用欄位的名稱來找value.
10847
		#$result["foreignKey"]["onDeleteAction"][$i],當參照的欄位資料移除時,會怎麼同步,$i爲1開始的數字,也可用欄位的名稱來找value.
10848
		#必填參數:
10849
		$conf["db::getDataTableColumn"]["dbAddress"]=$conf["dbAddr"];#資料庫的網路位置
10850
		$conf["db::getDataTableColumn"]["dbAccount"]=$conf["dbAcct"];#連線到資料庫要用的帳號
10851
		$conf["db::getDataTableColumn"]["selectedDataBase"]=$conf["dbName"];#連線到資料庫要選擇的資料庫
10852
		$conf["db::getDataTableColumn"]["selectedDataTable"]=$conf["dtName"];#連線到資料庫要檢視的資料表
10853
		#可省略參數:
10854
		if(isset($conf["dbPass"])){
10855
 
10856
			#$conf["dbPassword"]=$dbPassword;#連線到資料庫要用的密碼
10857
			$conf["db::getDataTableColumn"]["dbPassword"]=$conf["dbPass"];
10858
 
10859
			}#if end
10860
 
10861
		#如果有設置 $conf["dbPort"]
10862
		if(isset($conf["dbPort"])){
10863
 
10864
			#$conf["dbPort"]=$dbPort;#連線到資料庫要用的port
10865
			$conf["db::getDataTableColumn"]["dbPort"]=$conf["dbPass"];
10866
 
10867
			}#if end
10868
 
10869
		#備註:
10870
		#查詢的功能有點弱,目前用getTableColumnDetailInfo替代
10871
		$getDataTableColumn=db::getDataTableColumn($conf["db::getDataTableColumn"]);
10872
		unset($conf["db::getDataTableColumn"]);
10873
 
10874
		#如果查詢失敗
10875
		if($getDataTableColumn["status"]==="false"){
10876
 
10877
			#設置執行失敗
10878
			$result["status"]="false";
10879
 
10880
			#設置錯誤訊息
10881
			$result["error"]=$getDataTableColumn["error"];
10882
 
10883
			#回傳結果
10884
			return $result;
10885
 
10886
			}#if end
10887
 
10888
		#初始化通過檢查
10889
		$result["passed"]="true";
10890
 
10891
		#針對每個要檢查的欄位
10892
		foreach($conf["col"] as $colName){
10893
 
10894
			#如果欄位 $colName 不存在
10895
			if(!in_array($colName,$getDataTableColumn["columnName"])){
10896
 
10897
				#設置欄位不存在的警告訊息
10898
				$result["warning"][]="欄位 ".$colName." 不存在";
10899
 
10900
				#設置未通過檢查
10901
				$result["passed"]="false";
10902
 
10903
				}#if end
10904
 
10905
			}#foreach end
10906
 
10907
		#設置執行正常
10908
		$result["status"]="true";
10909
 
10910
		#回傳結果
10911
		return $result;
10912
 
10913
		}#function checkTableColExists end
10914
 
10915
	/*
10916
	#函式說明:
10917
	#檢查該資料庫是否存在,結果會回傳一個陣列。
10918
	#回傳結果:
10919
	#$result["status"],"true"代表執行成功;"false"代表執行失敗.
10920
	#$result["error"],錯誤訊息.
10921
	#$result["exist"],有為"true",無為"false".
10922
	#$result["function"],當前執行的函數名稱.
10923
	#必填參數:
177 liveuser 10924
	#$conf["dbAddress"],字串,爲mysql-Server的位置
3 liveuser 10925
	$conf["dbAddress"]=$dbAddress;
177 liveuser 10926
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號
3 liveuser 10927
	$conf["dbAccount"]=$dbAccount;
177 liveuser 10928
	#$conf["checkDataBaseName"],字串,爲要檢查是否存在的資料庫名稱
3 liveuser 10929
	$conf["checkDataBaseName"]="";
10930
	#可省略參數:
10931
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼.
10932
	#$conf["dbPassword"]="";
10933
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,可省略,若省略則代表使用預設的3306 port.
10934
	#$conf["dbPort"]="";
10935
	#參考資料:
10936
	#無.
10937
	#備註:
10938
	#無.
10939
	*/	
10940
	public static function checkDataBaseExists($conf){
10941
 
10942
		#初始化要回傳的變數
10943
		$result=array();
10944
 
10945
		#紀錄當前執行的函數名稱
10946
		$result["function"]=__FUNCTION__;
10947
 
10948
		#如果 $conf 不為陣列
10949
		if(gettype($conf)!="array"){
10950
 
10951
			#設置執行失敗
10952
			$result["status"]="false";
10953
 
10954
			#設置執行錯誤訊息
10955
			$result["error"][]="\$conf變數須為陣列形態";
10956
 
10957
			#如果傳入的參數為 null
10958
			if($conf==null){
10959
 
10960
				#設置執行錯誤訊息
10961
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
10962
 
10963
				}#if end
10964
 
10965
			#回傳結果
10966
			return $result;
10967
 
10968
			}#if end
10969
 
10970
		#檢查參數
10971
		#函式說明:
10972
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
10973
		#回傳結果:
10974
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
10975
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
10976
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
10977
		#必填參數:
10978
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
10979
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("dbAddress","dbAccount","checkDataBaseName");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
10980
		#可省略參數:
10981
		#$conf["variableType"]=array();#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
10982
		#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
10983
		#備註:
10984
		#功能與checkExistAndType函式相同
10985
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
10986
		unset($conf["variableCheck"]["isexistMuti"]);
10987
 
10988
		#如果 $checkResult["status"] 等於 "false"
10989
		if($checkResult["status"]=="false"){
10990
 
10991
			#設置執行失敗
10992
			$result["status"]="false";
10993
 
10994
			#設置執行錯誤
10995
			$result["error"]=$checkResult;
10996
 
10997
			#回傳結果
10998
			return $result;
10999
 
11000
			}#if end	
11001
 
11002
		#如果 $checkResult["passed"] 等於 "false"
11003
		if($checkResult["passed"]=="false"){
11004
 
11005
			#設置執行失敗
11006
			$result["status"]="false";
11007
 
11008
			#設置執行錯誤
11009
			$result["error"]=$checkResult;
11010
 
11011
			#回傳結果
11012
			return $result;
11013
 
11014
			}#if end
11015
 
11016
		#取得資料庫列表的語法
11017
		#查詢所有的資料庫列表,會回傳查詢的結果
11018
		#$result["status"],執行是否正常,"true"為正常,"fasle"為不正常
11019
		#$result["error"],爲錯誤訊息
11020
		#$result["connectInformation"],爲回傳的mysql連線資訊。
11021
		#$result["dbName"] 爲查詢的資料庫名稱陣列,第一筆資料庫名稱爲$result["dbName"][0],第二筆資料庫名稱爲$result["dbName"][1],其餘以此類推。
11022
		#$result["dbCounts"] 爲資料庫的總筆數	
11023
		#必填參數:
11024
		$conf["db"]["getDataBaseList"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
11025
		$conf["db"]["getDataBaseList"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
11026
		#可省略參數:
11027
 
11028
		#如果 $conf["dbPassword"] 有設定
11029
		if(isset($conf["dbPassword"])){
11030
 
11031
			$conf["db"]["getDataBaseList"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
11032
 
11033
			}#if end
11034
 
11035
		#如果 $conf["dbPort"] 有設定
11036
		if(isset($conf["dbPort"])){
11037
 
11038
			$conf["db"]["getDataBaseList"]["dbPort"]=$conf["dbPort"];#爲連線到mysql-Server時要使用的port,可省略,若省略則代表預設的3306.
11039
 
11040
			}#if end
11041
 
11042
		$queryResult=db::getDataBaseList($conf["db"]["getDataBaseList"]);
11043
		unset($conf["db"]["getDataBaseList"]);
11044
 
11045
		#如果 $queryResult["status"] 等於 "fasle"
11046
		if($queryResult["status"]=="false"){
11047
 
11048
			#設置錯誤識別
11049
			$result["status"]="false";
11050
 
11051
			#設置錯誤訊息
11052
			$result["error"]=$queryResult;
11053
 
11054
			#回傳結果
11055
			return $result;
11056
 
11057
			}#if end
11058
 
11059
		#有幾個資料庫就檢查該名稱有沒有重複
11060
		for($i=0;$i<$queryResult["dbCounts"];$i++){
11061
 
11062
			#檢查名稱是否相同			
11063
			if($queryResult["dbName"][$i]==$conf["checkDataBaseName"]){
11064
 
11065
				#相同名稱代表資料庫重複
11066
				$result["exist"]="true";
11067
 
11068
				#跳出迴圈
11069
				break;
11070
 
11071
				}#判斷式結束
11072
 
11073
			}#迴圈結束
11074
 
11075
		#如果 $result["exist"] 沒有設定
11076
		if(!isset($result["exist"])){
11077
 
11078
			#代表都沒有相同的名稱就代表沒有重複
11079
			$result["exist"]="false";
11080
 
11081
			}#if end
11082
 
11083
		#執行到這邊代表執行正常
11084
		$result["status"]="true";
11085
 
11086
		#回傳結果
11087
		return $result;	
11088
 
177 liveuser 11089
		}#function checkDataBaseExists end
3 liveuser 11090
 
11091
	/*
11092
	#函式說明:
11093
	#尋找特定資料庫裏特定資料表裏面特定欄位有無可用整數編號,可以指定數字的起點與終點,此函式會回傳可用的編號。
11094
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
11095
	#$result["error"],錯誤訊息陣列 
11096
	#$result["function"],當前執行的函數.
11097
	#$result["founded"],爲搜尋可以用的數字是否成功,"true"表示成功,"false"表示失敗.
11098
	#$result["usableNumber"],爲可用的整數。
11099
	#$result["sql"],執行的sql語法.
11100
	#必填參數:
11101
	#$conf["dbAddress"],字串,爲mysql-Server的位置.
11102
	$conf["dbAddress"]=$dbAddress;
11103
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號
11104
	$conf["dbAccount"]=$dbAccount;
11105
	#$conf["selectedDataBaseName"],字串,爲要檢查的資料庫名稱
11106
	$conf["selectedDataBaseName"]=$dbName;
11107
	#$conf["checkDataTableName"],字串,爲要檢查的資料表名稱
11108
	$conf["checkDataTableName"]="";
11109
	#$conf["conditionTargetName"]字串,用來判斷的資料表數值名稱
11110
	$conf["conditionTargetName"]="";
11111
	#$conf["startPoint"],字串,要執行的迴圈起點(資料的起始檢查點),須為整數.
11112
	$conf["startPoint"]="";
11113
	#$conf["endPoint"],字串,要執行的迴圈終點(資料的結束檢查點),須為整數.
11114
	$conf["endPoint"]="";
11115
	#可省略參數:
11116
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼.
11117
	#$conf["dbPassword"]=$dbPassword;
11118
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,可省略,若省略則代表使用預設的3306 port.
11119
	#$conf["dbPort"]="";
11120
	#$conf["otherConditionTargetName"]=array();#查詢欄位項目可用數值的其它條件欄位名稱,爲陣列值。須搭配 $conf["otherConditionTargetValue"] 一起使用
11121
	#$conf["otherConditionTargetName"]=array();
11122
	#$conf["otherConditionTargetValue"]=array();#查詢欄位項目可用數值的其它條件欄位數值,爲陣列值。須搭配 $conf["otherConditionTargetName"] 一起使用
11123
	#$conf["otherConditionTargetValue"]=array();
11124
	#參考資料:
11125
	#無.
11126
	#備註:
11127
	#無.
11128
	*/
11129
	public static function findUsableNumber($conf){
11130
 
11131
		#初始化要回傳的內容
11132
		$result=array();
11133
 
11134
		#取得當前執行的函數名稱
11135
		$result["function"]=__FUNCTION__;
11136
 
11137
		#如果 $conf 不為陣列
11138
		if(gettype($conf)!="array"){
11139
 
11140
			#設置執行失敗
11141
			$result["status"]="false";
11142
 
11143
			#設置執行錯誤訊息
11144
			$result["error"][]="\$conf變數須為陣列形態";
11145
 
11146
			#如果傳入的參數為 null
11147
			if($conf==null){
11148
 
11149
				#設置執行錯誤訊息
11150
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
11151
 
11152
				}#if end
11153
 
11154
			#回傳結果
11155
			return $result;
11156
 
11157
			}#if end
11158
 
11159
		#可用號碼的預設值,用int型態儲存.
11160
		(int)$userableNumber=0;
11161
 
11162
		#函式說明:
11163
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
11164
		#回傳結果:
11165
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
11166
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
11167
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
11168
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
11169
		#必填參數:
11170
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
11171
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("dbAddress","dbAccount","selectedDataBaseName","checkDataTableName","conditionTargetName","startPoint","endPoint");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
11172
		#可省略參數:
11173
		$conf["variableCheck"]["isexistMuti"]["variableType"]=array("string","string","string","string","string","string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
11174
		#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
11175
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
11176
		unset($conf["variableCheck"]["isexistMuti"]);
11177
 
11178
		#如果 $checkResult["status"] 等於 "false"
11179
		if($checkResult["status"]=="false"){
11180
 
11181
			#設置錯誤識別
11182
			$result["status"]="false";
11183
 
11184
			#設置錯誤訊息
11185
			$result["error"]=$checkResult;
11186
 
11187
			#回傳結果
11188
			return $result;
11189
 
11190
			}#if end
11191
 
11192
		#如果 $checkResult["passed"] 等於 "false"
11193
		if($checkResult["passed"]=="false"){
11194
 
11195
			#設置錯誤識別
11196
			$result["status"]="false";
11197
 
11198
			#設置錯誤訊息
11199
			$result["error"]=$checkResult;
11200
 
11201
			#回傳結果
11202
			return $result;
11203
 
11204
			}#if end
11205
 
11206
		#從$startPoint開始到$endPoint結束,供執行 $endPoint-$startPoint 次。
11207
		for($i=$conf["startPoint"];$i<=$conf["endPoint"];$i++){
11208
 
11209
			#更新可用號碼
11210
			$userableNumber=$i;
11211
 
11212
			#查詢目標號碼是否已存在
11213
			#函式說明:
11214
			#一次取得資料庫、表的資料
11215
			#回傳結果:
11216
			#$result["status"],執行結果"true"為成功;"false"為執行失敗。
11217
			#$result["error"],錯誤訊息陣列。
11218
			#$result["dataContent"],爲資料的內容。
11219
			#$result["dataContent"][$conf["WhereColumnName"][$i]][$dataSetNum]
11220
				#$dataSetNum 爲第$dataSetNum+1筆資料
11221
				#$conf["WhereColumnName"][$i] 爲第 $i+1 個欄位的名稱
11222
			#$result["dataCount"],爲取得的資料筆數。
11223
			#$result["sql"],執行的sql字串.
11224
			#必填參數:
11225
			$conf["db"]["fastGetDbData"]["dbAddress"]=$conf["dbAddress"];#爲dbServer的位置。
11226
			$conf["db"]["fastGetDbData"]["dbAccount"]=$conf["dbAccount"];#爲登入dbServer的帳號。
11227
			$conf["db"]["fastGetDbData"]["dbName"]=$conf["selectedDataBaseName"];#爲要存取的資料庫名稱
11228
			$conf["db"]["fastGetDbData"]["tableName"]=$conf["checkDataTableName"];#爲要存取的資料表名稱
11229
			$conf["db"]["fastGetDbData"]["columnYouWant"]=array($conf["conditionTargetName"]);#你想要的欄位!
11230
			#可省略參數:
11231
 
11232
			#如果 $conf["dbPassword"] 有設置
11233
			if(isset($conf["dbPassword"])){
11234
 
11235
				$conf["db"]["fastGetDbData"]["dbPassword"]=$conf["dbPassword"];#爲要存取dbServer的密碼
11236
 
11237
				}#if end
11238
 
11239
			#如果 $conf["dbPort"] 有設置
11240
			if(isset($conf["dbPort"])){
11241
 
11242
				$conf["db"]["fastGetDbData"]["dbPort"]=$conf["dbPort"];#爲要存取dbServer的port
11243
 
11244
				}#if end
11245
 
11246
			#要檢查可用數字的欄位為塞選的欄位
11247
			$conf["db"]["fastGetDbData"]["WhereColumnName"][]=$conf["conditionTargetName"];
11248
 
11249
			#如果 $conf["otherConditionTargetName"] 有設置
11250
			if(isset($conf["otherConditionTargetName"])){
11251
 
11252
				#針對 $conf["otherConditionTargetName"] 的每個元素 
11253
				foreach($conf["otherConditionTargetName"] as $columnName){
11254
 
11255
					$conf["db"]["fastGetDbData"]["WhereColumnName"][]=$columnName;#用於判斷語句的欄位項目陣列.
11256
 
11257
					}#foreach end
11258
 
11259
				}#if end
11260
 
11261
			#要檢查可用數字的欄位數值為塞選的欄位對應數值
11262
			$conf["db"]["fastGetDbData"]["WhereColumnValue"][]=$userableNumber;
11263
 
11264
			#如果 $conf["otherConditionTargetValue"] 有設置
11265
			if(isset($conf["otherConditionTargetValue"])){
11266
 
11267
				#針對每個 $conf["otherConditionTargetValue"] 元素
11268
				foreach($conf["otherConditionTargetValue"] as $columnValue){
11269
 
11270
					$conf["db"]["fastGetDbData"]["WhereColumnValue"][]=$columnValue;#用於判斷語句的欄位數值陣列,若與LIKE搭配,則可以在關鍵自字串的左右名加上「%」符號,這樣就可以搜尋具有該字串的內容.
11271
 
11272
					}#foreach end
11273
 
11274
				}#if end
11275
 
11276
			#$conf["db"]["fastGetDbData"]["WhereColumnCombine"]=array("");#用於判斷語句當中需要()起來的判斷式,須爲陣列值,"s"代表「(」,"e"代表「)」 ,若無則須設爲""。
11277
			#$conf["db"]["fastGetDbData"]["WhereColumnOperator"]=array("");#用於判斷語句的比較符號陣列,可以用的符號有「"="、">"、"<"、"LIKE"、"NOT LIKE"」,預設都爲「=」。
11278
			#$conf["db"]["fastGetDbData"]["WhereColumnAndOr"]=array("");#用於判斷語句條件之間成立的條件是AND還是OR,須爲陣列值。其數量應爲要判斷的欄位數量減一。
11279
			#$conf["db"]["fastGetDbData"]["orderItem"]="";#爲排序的項目依據,若要用隨機抽樣,可以用"rand()",可省略。
11280
			#$conf["db"]["fastGetDbData"]["ascORdesc"]="";#爲要低增還是遞減排序,asc爲遞增;desc爲遞減。
11281
			#$conf["db"]["fastGetDbData"]["numberStart"]="0";#為從第幾筆開始讀取,預設為0,代筆第一筆。
11282
			#$conf["db"]["fastGetDbData"]["numLimit"]="30";#為要取幾筆資料,可以省略,省略則表示不限制數目。
11283
			#$conf["db"]["fastGetDbData"]["groupBy"]=array("");#爲要以哪幾個欄爲作爲分羣的依據(欄位相同的數值僅會取出一筆)。
11284
			$db["fastGetDbData"]=db::fastGetDbData($conf["db"]["fastGetDbData"]);
11285
			unset($conf["db"]["fastGetDbData"]);
11286
 
11287
			#如果取得資料失敗
11288
			if($db["fastGetDbData"]["status"]=="false"){
11289
 
11290
				#設置錯誤識別
11291
				$result["status"]="false";
11292
 
11293
				#設置錯誤訊息
11294
				$result["error"]=$db["fastGetDbData"];
11295
 
11296
				#回傳結果
11297
				return $result;
11298
 
11299
				}#if end
11300
 
11301
			#如果該條件下沒有符合的資料
11302
			if($db["fastGetDbData"]["dataCount"]==0){
11303
 
11304
				#取得可用的編號
11305
				$result["usableNumber"]=$i;
11306
 
11307
				#設置有找到符合的數字
11308
				$result["founded"]="true";
11309
 
11310
				#跳出迴圈
11311
				break;
11312
 
11313
				}#if end
11314
 
11315
			#反之該條件下有符合的資料
11316
			else{
11317
 
11318
				#設置沒有找到符合的數字
11319
				$result["founded"]="false";
11320
 
11321
				}#else end
11322
 
11323
			}#for end
11324
 
11325
		#執行到這邊代表執行正常
11326
		$result["status"]="true";
11327
 
11328
		#回傳結果
11329
		return $result;
11330
 
11331
		}#function findUsableNumber end
11332
 
11333
	/*
11334
	#函式說明:
11335
	#取得特定的資料表資料
11336
	#回傳的參數:
11337
	#$result["status"],執行結果"true"為成功;"false"為執行失敗。
11338
	#$result["error"],錯誤訊息陣列。
11339
	#$result["function"],當前執行的函數名稱
11340
	#$result["sql"],執行的sql語法
11341
	#$result["sqlQueryResult"]#爲資料連線處理完畢之後的結果,需要 sendQueryDataToVariabele 涵式來解析。
11342
	#$result["dataCount"]#符合條件的資料筆數
11343
	#必填參數:
11344
	#$conf["dbAddress"],字串,爲mysql-Server的位置。
11345
	$conf["dbAddress"]=$dbAddress;
11346
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號。
11347
	$conf["dbAccount"]=$dbAccount;
11348
	#$conf["selectedDataBaseName"],字串,要選取的資料庫名稱。
11349
	$conf["selectedDataBaseName"]=$dbName;
11350
	#$conf["selectedDataTableName"],字串,爲欲選擇的資料表名稱。
11351
	$conf["selectedDataTableName"]="";
11352
	#可省略參數:	
11353
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼.
11354
	#$conf["dbPassword"]=$dbPassword;
11355
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,可省略,若省略則代表使用預設的3306 port.
11356
	#$conf["dbPort"]="";
11357
	#$conf["WhereColumnCombine"],字串陣列,用於判斷語句當中需要()起來的判斷式,須爲陣列值,"s"代表「(」,"e"代表「)」 ,若無則須設爲""。
11358
	#$conf["WhereColumnCombine"]=array("");
11359
	#$conf["WhereColumnName"],字串陣列,用於判斷語句的欄位項目陣列。
11360
	#$conf["WhereColumnName"]=array("");
11361
	#$conf["WhereColumnOperator"],字串陣列,用於判斷語句的比較符號陣列,可以用的符號有「"="、">"、"<"、"LIKE"、"NOT LIKE"」,預設都爲「=」。
11362
	#$conf["WhereColumnOperator"]=array("");
11363
	#$conf["WhereColumnValue"],字串陣列,用於判斷語句的欄位數值陣列,若與LIKE搭配,則可以在關鍵自字串的左右名加上「%」符號,這樣就可以搜尋具有該字串的內容。
11364
	#$conf["WhereColumnValue"]=array("");
11365
	#$conf["WhereColumnAndOr"],字串陣列,用於判斷語句條件之間成立的條件是AND還是OR,須爲陣列值。其數量應爲要判斷的欄位數量減一。
11366
	#$conf["WhereColumnAndOr"]=array("");
11367
	#$conf["whereIn"],二維字串陣列,為每個in語句的內容,特定欄位數值等於陣列元素之一。array(array("colName",array("a","b","c")));代表欄位colName的值為a,b,c三者之一.
11368
	#$conf["whereIn"]=array(array("colName",array("a","b","c")));
11369
	#$conf["whereNotIn"],二維字串陣列,為每個not in語句的內容,array(array("colName",array("a","b","c")));代表欄位colName的值不為a,b,c三者之一.
11370
	#$conf["whereNotIn"]=array(array("colName",array("a","b","c")));
11371
	#$conf["orderItem"],字串,爲排序的項目依據,若要用隨機抽樣,可以用"rand()",可省略。
11372
	#$conf["orderItem"]="";
11373
	#$conf["ascORdesc"],字串,爲要低增還是遞減排序,asc爲遞增;desc爲遞減。
11374
	#$conf["ascORdesc"]="";
11375
	#$conf["numberStart"],字串,為從第幾筆開始讀取,預設為0,代筆第一筆。
11376
	#$conf["numberStart"]="0";
11377
	#$conf["number"],字串,為要取幾筆資料,可以省略,省略則表示不限制數目。
11378
	#$conf["number"]="30"
11379
	#$conf["groupBy"],字串陣列,爲要以哪幾個欄爲作爲分羣的依據(欄位相同的數值僅會取出一筆)。
11380
	#$conf["groupBy"]=array("");
11381
	#參考資料:
11382
	#http://stackoverflow.com/questions/5021243/mysql-query-multiple-group-by
11383
	#備註:
11384
	#無.
11385
	*/
11386
	public static function dataTableSelect(&$conf){
11387
 
11388
		#初始化要回傳的變數
11389
		$result=array();
11390
 
11391
		#取得當前執行的函數名稱
11392
		$result["function"]=__FUNCTION__;
11393
 
11394
		#如果 $conf 不為陣列
11395
		if(gettype($conf)!="array"){
11396
 
11397
			#設置執行失敗
11398
			$result["status"]="false";
11399
 
11400
			#設置執行錯誤訊息
11401
			$result["error"][]="\$conf變數須為陣列形態";
11402
 
11403
			#如果傳入的參數為 null
11404
			if($conf==null){
11405
 
11406
				#設置執行錯誤訊息
11407
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
11408
 
11409
				}#if end
11410
 
11411
			#回傳結果
11412
			return $result;
11413
 
11414
			}#if end
11415
 
11416
		#檢查參數
11417
		#函式說明:
11418
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
11419
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
11420
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
11421
		#$result["function"],當前執行的函式名稱.
11422
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
11423
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
11424
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
11425
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
11426
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
11427
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
11428
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
11429
		#必填參數:
11430
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
11431
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
11432
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
11433
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("dbAddress","dbAccount","selectedDataBaseName","selectedDataTableName");
11434
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
11435
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string","string");
11436
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
11437
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
11438
		#可省略參數:
11439
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
11440
		#$conf["canBeEmptyString"]="false";
11441
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
11442
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("dbPassword","dbPort","WhereColumnCombine","WhereColumnName","WhereColumnOperator","WhereColumnValue","WhereColumnAndOr","orderItem","ascORdesc","numberStart","number","groupBy","whereIn","whereNotIn");
11443
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
11444
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","array","array","array","array","array","string","string","string","string","array","array","array");
11445
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
11446
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null,null,null,null,null,null,null,null,"0",null,null,null,null);
11447
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
11448
		$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("WhereColumnName","WhereColumnValue");
11449
		$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("WhereColumnValue","WhereColumnOperator");
11450
		#參考資料:
11451
		#array_keys=>http://php.net/manual/en/function.array-keys.php
11452
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
11453
		unset($conf["variableCheck::checkArguments"]);
177 liveuser 11454
 
3 liveuser 11455
		#如果檢查失敗
11456
		if($checkResult["status"]==="false"){
11457
 
11458
			#設置執行失敗的訊息
11459
			$result["status"]="false";
11460
 
11461
			#設置錯誤訊息
11462
			$result["error"]=$checkResult;
11463
 
11464
			#回傳結果
11465
			return $result;
11466
 
11467
			}#if end
11468
 
11469
		#如果檢查不通過
11470
		if($checkResult["passed"]==="false"){
11471
 
11472
			#設置執行失敗的訊息
11473
			$result["status"]="false";
11474
 
11475
			#設置錯誤訊息
11476
			$result["error"]=$checkResult;
11477
 
11478
			#回傳結果
11479
			return $result;
11480
 
11481
			}#if end
11482
 
11483
		#連線到資料庫
11484
		#函式說明:
11485
		#連線到資料庫,結果會回傳一個陣列
11486
		#$result["status"],若連線成功則爲"true",連線失敗則爲"false".
11487
		#$result["connectInformation"],爲回傳的mysql連線資訊.
177 liveuser 11488
		#$result["error"],錯誤訊息.
11489
		#$result["function"],當前執行的函數名稱.
3 liveuser 11490
		#必填參數:
11491
		$conf["db"]["dbConnect"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
11492
		$conf["db"]["dbConnect"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
11493
		#$conf["dbName"],字串,爲要連的資料庫名稱
11494
		$conf["db"]["dbConnect"]["dbName"]=$conf["selectedDataBaseName"];
11495
		#可省略參數:
11496
 
11497
		#如果 $conf["dbPassword"] 有設定
11498
		if(isset($conf["dbPassword"])){
11499
 
11500
			$conf["db"]["dbConnect"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
11501
 
11502
			}#if end
11503
 
11504
		#如果 $conf["dbPort"] 有設定
11505
		if(isset($conf["dbPort"])){
11506
 
11507
			$conf["db"]["dbConnect"]["dbPort"]=$conf["dbPort"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
11508
 
11509
			}#if end
11510
 
11511
		$con=db::dbConnect($conf["db"]["dbConnect"]);
11512
		unset($conf["db"]);
11513
 
11514
		#如果連線到資料庫失敗
11515
		if($con["status"]==="false"){
11516
 
11517
			#設置執行失敗
11518
			$result["status"]="false";
11519
 
11520
			#設置執行錯誤訊息
11521
			$result["error"]=$con;
11522
 
11523
			#回傳結果
11524
			return $result;
11525
 
11526
			}#if end
11527
 
11528
		#var_dump($con);	
11529
 
11530
		#取得mysqli物件
11531
		$mysqli=$con["connectInformation"];
11532
 
11533
		#如果 $conf["WhereColumnAndOr"] 沒有設定,但是有指定判斷條件的欄位
11534
		if(!isset($conf["WhereColumnAndOr"])  && isset($conf["WhereColumnName"])){
11535
 
11536
			#則$conf["WhereColumnAndOr"]爲有 count($conf["WhereColumnName"])-1 個 "AND" 的字串陣列
11537
			for($i=0;$i<(count($conf["WhereColumnName"])-1);$i++){
11538
 
11539
				$conf["WhereColumnAndOr"][$i]="AND";
11540
 
11541
				}#for end
11542
 
11543
			}#if end
11544
 
11545
		#如果 $conf["WhereColumnCombine"] 沒有設定,但是有指定判斷條件的欄位
11546
		if(!isset($conf["WhereColumnCombine"])  && isset($conf["WhereColumnName"])){
11547
 
11548
			#則 $conf["WhereColumnCombine"] 爲有 count($conf["WhereColumnName"]) 個 "" 的字串陣列
11549
			for($i=0;$i<count($conf["WhereColumnName"]);$i++){
11550
 
11551
				$conf["WhereColumnCombine"][$i]="";
11552
 
11553
				}#for end
11554
 
11555
			}#if end
11556
 
11557
		#如果 $conf["WhereColumnOperator"] 沒有設定,但是有設定判斷條件的欄位
11558
		if(!isset($conf["WhereColumnOperator"]) && isset($conf["WhereColumnName"])){
11559
 
11560
			#則 $conf["WhereColumnOperator"] 爲有 count($conf["WhereColumnName"]) 個 "" 的字串陣列
11561
			for($i=0;$i<count($conf["WhereColumnName"]);$i++){
11562
 
11563
				$conf["WhereColumnOperator"][$i]="=";
11564
 
11565
				}#for end
11566
 
11567
			}#if end
11568
 
11569
		#如果 $conf"ascORdesc"] 沒有設定,則不指定遞增或遞減排序
11570
		if(!isset($conf["ascORdesc"])){
11571
 
11572
			#排序變數爲空字串
11573
			$conf["ascORdesc"]="";
11574
 
11575
			}#if end
11576
 
11577
		#如果 $conf["number"] 沒設定,則不限定要取幾筆資料
11578
		if(!isset($conf["number"])){
11579
 
11580
			#限定筆數爲空字串
11581
			$queryStringLimit = "";
11582
 
11583
			}#if end 
11584
 
11585
		#如果 $conf["number"] 不爲空,則限定要取出幾筆
11586
		else{
11587
 
11588
			#如果 $conf["numberStart"] 有設定
11589
			if(isset($conf["numberStart"])){
11590
 
11591
				$queryStringLimit  = " LIMIT ".$conf["numberStart"]." , ".$conf["number"]." ";
11592
 
11593
				}#if end
11594
 
11595
			#反之 $conf["numberStart"] 沒有設定
11596
			else{
11597
 
11598
				$queryStringLimit  = " LIMIT 0 , ".$conf["number"]." ";
11599
 
11600
				}#else end
11601
 
11602
			}#else end
11603
 
11604
		#如果存在 $conf["orderItem"] 
11605
		if(isset($conf["orderItem"])){
11606
 
11607
			#如果排序的依據是 rand() 或 RAND()
11608
			if($conf["orderItem"] == "rand()" || $conf["orderItem"] == "RAND()"){
11609
 
11610
				# 依 $order 為排序依據,進行 隨機 排序
11611
				$queryStringOrder  = " ORDER BY ".$conf["orderItem"]." ".$conf["ascORdesc"]." "; 			
11612
 
11613
				}#if end
11614
 
11615
			#反之 $order 為排序依據
11616
			else{
11617
 
11618
				#爲 acs 或 desc, 依 $order 為排序依據,進行 asc OR desc 排序
11619
				$queryStringOrder  = " ORDER BY ".$conf["orderItem"]." ".$conf["ascORdesc"]." "; 
11620
 
11621
				}#else end
11622
 
11623
			}#if end
11624
 
11625
		#反之 不存在
11626
		else{
11627
 
11628
			#預設為不指定
11629
			$queryStringOrder="";
11630
 
11631
			}#else end
11632
 
11633
		#如果有設定 $conf["WhereColumnName"] 參數
11634
		if(isset($conf["WhereColumnName"])){
11635
 
11636
			#條件判斷的起始語句
11637
			$conf["whereCondition"]="WHERE ";
11638
 
11639
			#有幾個判斷用的欄位就執行幾次
11640
			for($i=0;$i<count($conf["WhereColumnName"]);$i++){
11641
 
11642
				#如果是左掛號
11643
				if($conf["WhereColumnCombine"][$i]=="("){
11644
 
11645
					$conf["whereCondition"]=$conf["whereCondition"]." ".$conf["WhereColumnCombine"][$i]." ";
11646
 
11647
					}#if end
11648
 
11649
				#如果欄位數值不是字串,也不是NULL
11650
				if(gettype($conf["WhereColumnValue"][$i])!=="string" && $conf["WhereColumnValue"][$i]!==NULL){
11651
 
11652
					#設置執行失敗
11653
					$result["status"]="false";
11654
 
11655
					#設置執行錯誤
11656
					$result["error"][]="WhereColumnValue 參數須為陣列字串";
11657
 
11658
					#回傳結果
11659
					return $result;
11660
 
11661
					}#if end
11662
 
11663
				#結合各個條件語句
11664
				$conf["whereCondition"]=$conf["whereCondition"]." `".$conf["WhereColumnName"][$i]."` ";
11665
				$conf["whereCondition"]=$conf["whereCondition"]." ".$conf["WhereColumnOperator"][$i]." ";
11666
				$conf["whereCondition"]=$conf["whereCondition"]." '".mysqli_real_escape_string($mysqli,$conf["WhereColumnValue"][$i])."' ";
11667
 
11668
				#如果右掛號
11669
				if($conf["WhereColumnCombine"][$i]==")"){
11670
 
11671
					$conf["whereCondition"]=$conf["whereCondition"]." ".$conf["WhereColumnCombine"][$i]." ";
11672
 
11673
					}#if end
11674
 
11675
				#如果不是最後一筆項目,就放置AND or OR
11676
				if($i<count($conf["WhereColumnName"])-1){
11677
 
11678
					$conf["whereCondition"]=$conf["whereCondition"]." ".$conf["WhereColumnAndOr"][$i]." ";
11679
 
11680
					}#if end	
11681
 
11682
				}#for end					
11683
 
11684
			}#if end
11685
 
11686
		#反之,套件變數設爲空字串
11687
		else{
11688
 
11689
			$conf["whereCondition"]="";
11690
 
11691
			}#else end
11692
 
11693
		#初始化 where in 語句
11694
		$whereIn=" ";
11695
 
11696
		#如果 $conf["whereIn"] 存在
11697
		if(isset($conf["whereIn"])){
11698
 
11699
			#如果 $conf["whereCondition"] 等於 空
11700
			if($conf["whereCondition"]!==""){
11701
 
11702
				#先加上串接的 AND
11703
				$whereIn=$whereIn."AND ";
11704
 
11705
				}#if end
11706
 
11707
			#反之為第一個where條件
11708
			else{
11709
 
11710
				#設置where開頭
11711
				$whereIn=$whereIn."where ";
11712
 
11713
				}#else end
11714
 
11715
			#針對每個要用 in 條件判斷的語句
11716
			for($i=0;$i<count($conf["whereIn"]);$i++){
11717
 
11718
				#取得要判斷的欄位
11719
				$col=$conf["whereIn"][$i][0];
11720
 
11721
				#加上 in 的開頭語句
11722
				$whereIn=$whereIn."`".$col."` in(";
11723
 
11724
				#針對每個 in 的值
11725
				for($j=0;$j<count($conf["whereIn"][$i][1]);$j++){
11726
 
11727
					#串接條件
11728
					$whereIn=$whereIn."'".mysqli_real_escape_string($mysqli,$conf["whereIn"][$i][1][$j])."'";
11729
 
11730
					#如果不是最後一個條件
11731
					if($j!==count($conf["whereIn"][$i][1])-1){
11732
 
11733
						#後面還有條件
11734
						$whereIn=$whereIn.",";
11735
 
11736
						}#if end
11737
 
11738
					#反之是最後一個條件
11739
					else{
11740
 
11741
						#後面沒有條件
11742
						$whereIn=$whereIn.")";
11743
 
11744
						}#else end
11745
 
11746
					}#for end
11747
 
11748
				}#for end
11749
 
11750
			#如果沒有in的條件
11751
			if($whereIn===" AND `".$col."` in(" OR $whereIn===" AND " OR $whereIn===" " OR $whereIn===" where "){
11752
 
11753
				#設為 ""
11754
				$whereIn="";
11755
 
11756
				}#if end
11757
 
11758
			}#if end
11759
 
11760
		#串接 where in 語句
11761
		$conf["whereCondition"]=$conf["whereCondition"].$whereIn;
11762
 
11763
		#初始化 where not in 語句
11764
		$whereNotIn=" ";	
11765
 
11766
		#如果 $conf["whereNotIn"] 存在
11767
		if(isset($conf["whereNotIn"])){
11768
 
11769
			#如果 $conf["whereCondition"] 等於 空
11770
			if(str_replace(" ","",$conf["whereCondition"])!==""){
11771
 
11772
				#先加上串接的 AND
11773
				$whereNotIn=$whereNotIn."AND ";
11774
 
11775
				}#if end
11776
 
11777
			#反之為第一個where條件
11778
			else{
11779
 
11780
				#設置where開頭
11781
				$whereNotIn=$whereNotIn."where ";
11782
 
11783
				}#else end
11784
 
11785
			#針對每個要用 in 條件判斷的語句
11786
			for($i=0;$i<count($conf["whereNotIn"]);$i++){
11787
 
11788
				#取得要判斷的欄位
11789
				$col=$conf["whereNotIn"][$i][0];
11790
 
11791
				#加上 in 的開頭語句
11792
				$whereNotIn=$whereNotIn."`".$col."` not in(";
11793
 
11794
				#針對每個 in 的值
11795
				for($j=0;$j<count($conf["whereNotIn"][$i][1]);$j++){
11796
 
11797
					#串接條件
11798
					$whereNotIn=$whereNotIn."'".mysqli_real_escape_string($mysqli,$conf["whereNotIn"][$i][1][$j])."'";
11799
 
11800
					#如果不是最後一個條件
11801
					if($j!==count($conf["whereNotIn"][$i][1])-1){
11802
 
11803
						#後面還有條件
11804
						$whereNotIn=$whereNotIn.",";
11805
 
11806
						}#if end
11807
 
11808
					#反之是最後一個條件
11809
					else{
11810
 
11811
						#後面沒有條件
11812
						$whereNotIn=$whereNotIn.")";
11813
 
11814
						}#else end
11815
 
11816
					}#for end
11817
 
11818
				}#for end
11819
 
11820
			#如果沒有in的條件
11821
			if($whereNotIn===" AND `".$col."` not in(" OR $whereNotIn===" AND " OR $whereNotIn===" " OR $whereNotIn===" where "){
11822
 
11823
				#設為 ""
11824
				$whereNotIn="";
11825
 
11826
				}#if end
11827
 
11828
			}#if end
11829
 
11830
		#串接 where not in 語句
11831
		$conf["whereCondition"]=$conf["whereCondition"].$whereNotIn;
11832
 
11833
		#如果 $conf["groupBy"] 有指定
11834
		if(isset($conf["groupBy"])){
11835
 
11836
			#初始化分類語句的字串
11837
			$groupByQueryStr="GROUP BY ";
11838
 
11839
			#設定要以哪些欄位爲分組的依據
11840
			for($i=0;$i<count($conf["groupBy"]);$i++){
11841
 
11842
				#如果不是最後一筆
11843
				if($i!=count($conf["groupBy"])-1){
11844
 
11845
					#語法裡面含有 , 代表還有其他欄位
11846
					$groupByQueryStr=$groupByQueryStr." `".$conf["groupBy"][$i]."` , ";
11847
 
11848
					}#if end
11849
 
11850
				#反之是最後一筆資料
11851
				else{
11852
 
11853
					#語法結尾沒有 , 代表沒有其他欄位
11854
					$groupByQueryStr=$groupByQueryStr." `".$conf["groupBy"][$i]."` ";
11855
 
11856
					}#else end
11857
 
11858
				}#for end
11859
 
11860
			#取得分組的語法
11861
			$conf["groupBy"]=$groupByQueryStr;
11862
 
11863
			}#if end
11864
 
11865
		#如果 $conf["groupBy"] 沒有設定
11866
		else{
11867
 
11868
			#則將其設爲空值
11869
			$conf["groupBy"]="";
11870
 
11871
			}#else end
11872
 
11873
		#要執行的sql語法
11874
		$result["sql"]=$queryStringFinal="SELECT * FROM `".$conf["selectedDataBaseName"]."`.`".$conf["selectedDataTableName"]."` ".$conf["whereCondition"]." ".$conf["groupBy"]." ".$queryStringOrder.$queryStringLimit;
11875
 
11876
		#執行 SQL 語法
11877
		#函式說明:
11878
		#執行mysql指令
11879
		#回傳結果::
11880
		#$result["status"],"true"為執行成功;"false"為執行失敗。
11881
		#$result["error"],錯誤訊息的陣列
11882
		#$result["function"],當前執行的涵式
11883
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
11884
		#$result["queryString"],mysql查詢的語言
11885
		#查詢號的解果,需要解析。
11886
		#必填參數:
11887
		$conf["db::execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
11888
		$conf["db::execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
11889
		$conf["db::execMysqlQuery"]["dbSql"]=$queryStringFinal;#要執行sql語法
11890
		#可省略參數:
11891
 
11892
		#如果 $conf["dbPassword"] 有設定
11893
		if(isset($conf["dbPassword"])){
11894
 
11895
			$conf["db::execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
11896
 
11897
			}#if end
11898
 
11899
		#如果 $conf["dbPort"] 有設定
11900
		if(isset($conf["dbPort"])){
11901
 
11902
			$conf["db::execMysqlQuery"]["dbPort"]=$conf["dbPort"];#爲連線到mysql-Server時要使用的port,可省略,若省略則代表預設的3306.
11903
 
11904
			}#if end
11905
		#$conf["dbLink"],物件,mysqli物件,由mysqli_connect()回傳的物件內容,若為數值則改用賬號密碼等資訊進行連線,反之則沿用連線物件.
11906
		$conf["db::execMysqlQuery"]["dbLink"]=$mysqli;			
11907
		$execMysqlQuery=db::execMysqlQuery($conf["db::execMysqlQuery"]);
11908
		unset($conf["db::execMysqlQuery"]);
11909
 
11910
		#如果執行錯誤
11911
		if($execMysqlQuery["status"]=="false"){
11912
 
11913
			#設置執行錯誤的識別
11914
			$result["status"]="false";
11915
 
11916
			#設置錯誤訊息
11917
			$result["error"]=$execMysqlQuery;
11918
 
11919
			#回傳錯誤訊息
11920
			return $result;
11921
 
11922
			}#if end
11923
 
11924
		#取得查詢後的結果
11925
		$result["sqlQueryResult"]=$execMysqlQuery["queryResource"];
11926
 
11927
		#取得符合條件的資料筆數
11928
		$result["dataCount"]=mysqli_num_rows($execMysqlQuery["queryResource"]);
11929
 
11930
		#執行到這邊代表執行成功
11931
		$result["status"]="true";
11932
 
11933
		#回傳查詢的結果;	
11934
		return $result;	
11935
 
11936
		}#end dataTableSelect
11937
 
11938
	/*
11939
	#函式說明:
11940
	#解析 dataTableSelect($conf) 後的結果,亦即將執行sql語法後所得到的結果解析放進變數裏面
11941
	#回傳結果:
11942
	#$result["status"],執行結果"true"為成功;"false"為失敗
11943
	#$result["error"],錯誤訊息
11944
	#$result["function"],儲存當前函數名稱
11945
	#$result["dataColumnName"],為資料欄位的名稱陣列.
177 liveuser 11946
	#$result["dataColumnName"][$i]代表第一個欄位名稱.
11947
	#$result["dataContent"],爲資料的內容陣列,第1維度的key為$conf["tableValueName"][$i],亦即第 $i+1 個欄位的名稱,若該欄位不存在,則其value為空字串;第2維度的key為第$i+1筆資料的索引.
11948
	#$result["dataCount"],爲取得的資料筆數.
3 liveuser 11949
	#必填參數:
177 liveuser 11950
	#$conf["sqlQueryResult"],object,爲執行sql語法所獲得的查詢結果。
3 liveuser 11951
	$conf["sqlQueryResult"]="";
177 liveuser 11952
	#$conf["tableValueName"],字串陣列,爲該資料表列項目的每一項名稱,須爲陣列值,若為「array("*")」則代表所有欄位.
3 liveuser 11953
	$conf["tableValueName"]=array();
11954
	#可省略參數:
177 liveuser 11955
	#$conf["dbAddress"],字串,爲mysql-Server的位置,目前沒有用途.
11956
	#$conf["dbAddress"]=$dbAddress;
11957
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號,目前沒有用途.
11958
	#$conf["dbAccount"]=$dbAccount;
11959
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼,目前沒有用途.
3 liveuser 11960
	#$conf["dbPassword"]=$dbPassword;
177 liveuser 11961
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,可省略,若省略則代表使用預設的3306 port,目前沒有用途.
3 liveuser 11962
	#$conf["dbPort"]="";
11963
	#$conf["valueName"],字串陣列,爲該資料表列項目的每一項所要對應的變數名稱,預設為欄位的名稱($conf["tableValueName"]).
11964
	#$conf["valueName"]=$conf["tableValueName"];
11965
	#參考資料:
11966
	#http://www.w3school.com.cn/php/func_mysql_fetch_array.asp => 解析取得的資料表欄位時,能夠選擇回傳含有欄位名稱與數字代表的key.
11967
	#備註:
11968
	#無.
11969
	*/
11970
	public static function sendQueryDataToVariabele(&$conf){
11971
 
11972
		#初始化要回傳的內容
11973
		$result=array();
11974
 
11975
		#取得當前執行的函數名稱
11976
		$result["function"]=__FUNCTION__;
11977
 
11978
		#如果 $conf 不為陣列
11979
		if(gettype($conf)!="array"){
11980
 
11981
			#設置執行失敗
11982
			$result["status"]="false";
11983
 
11984
			#設置執行錯誤訊息
11985
			$result["error"][]="\$conf變數須為陣列形態";
11986
 
11987
			#如果傳入的參數為 null
11988
			if($conf==null){
11989
 
11990
				#設置執行錯誤訊息
11991
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
11992
 
11993
				}#if end
11994
 
11995
			#回傳結果
11996
			return $result;
11997
 
11998
			}#if end
11999
 
12000
		#檢查參數
12001
		#函式說明:
12002
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
12003
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
12004
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
12005
		#$result["function"],當前執行的函式名稱.
12006
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
12007
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
12008
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
12009
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
12010
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
12011
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
12012
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
12013
		#必填參數:
12014
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
12015
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
12016
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
177 liveuser 12017
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("sqlQueryResult","tableValueName");
3 liveuser 12018
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
177 liveuser 12019
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("object","array");
3 liveuser 12020
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
12021
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
12022
		#可省略參數:
12023
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
12024
		#$conf["canBeEmptyString"]="false";
12025
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
177 liveuser 12026
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("dbPassword","dbPort","valueName","dbAddress","dbAccount");
3 liveuser 12027
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
177 liveuser 12028
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","array","string","string");
3 liveuser 12029
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
177 liveuser 12030
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null,"\$conf[\"tableValueName\"]",null,null);
3 liveuser 12031
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
12032
		$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("valueName","tableValueName");
12033
		#參考資料:
12034
		#array_keys=>http://php.net/manual/en/function.array-keys.php
12035
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
12036
		unset($conf["variableCheck::checkArguments"]);
177 liveuser 12037
 
3 liveuser 12038
		#如果檢查失敗
12039
		if($checkResult["status"]=="false"){
12040
 
12041
			#設置執行失敗的訊息
12042
			$result["status"]="false";
12043
 
12044
			#設置錯誤訊息
12045
			$result["error"]=$checkResult;
12046
 
12047
			#回傳結果
12048
			return $result;
12049
 
12050
			}#if end
12051
 
12052
		#如果檢查不通過
12053
		if($checkResult["passed"]=="false"){
12054
 
12055
			#設置執行失敗的訊息
12056
			$result["status"]="false";
12057
 
12058
			#設置錯誤訊息
12059
			$result["error"]=$checkResult;
12060
 
12061
			#回傳結果
12062
			return $result;
12063
 
12064
			}#if end
12065
 
12066
		#給予初始值表示從0筆開始統計
12067
		$dataSetNum=0;
12068
 
12069
		#取得資料表的欄位數量
12070
		$columnCounts=count($conf["tableValueName"]);
12071
 
12072
		#初始化識別是否要匯出全部欄位的變數
12073
		$exportAll="false";
12074
 
12075
		#初始化儲存取得的欄位名稱陣列
12076
		$result["dataColumnName"]=array();
12077
 
12078
		#如果剛好只有一個元素
12079
		if($columnCounts==1){
12080
 
12081
			#如果第一個元素為 "*"
12082
			if($conf["tableValueName"][0]=="*"){
12083
 
12084
				#則代表要全部欄位均匯出.
12085
				$exportAll="true";
12086
 
12087
				#初始化計數的變數
12088
				$dataSetNum=0;
12089
 
12090
				#將讀取到的資料一次只讀取一列
12091
				while($row = mysqli_fetch_array($conf["sqlQueryResult"])){
12092
 
12093
					#筆數加1
12094
					$dataSetNum++;
12095
 
12096
					#針對每個欄位
12097
					foreach($row as $columnName => $columnValue){
12098
 
12099
						#取得欄位的內容並用欄位名稱作為key
12100
						$result["dataContent"][$columnName][]=$columnValue;
12101
 
12102
						#如果 $dataSetNum 等於 1
12103
						#亦即第一筆資料
12104
						if($dataSetNum==1 && gettype($columnName)!="integer"){
12105
 
12106
							#取得每個欄位名稱
12107
							$result["dataColumnName"][]=$columnName;
12108
 
12109
							}#if end
12110
 
12111
						}#foreach end
12112
 
12113
					}#while end
12114
 
12115
				#將資料筆數放進 $result["dataCount"] 裏面
12116
				$result["dataCount"]=$dataSetNum;
12117
 
12118
				}#if end
12119
 
12120
			}#if end
12121
 
12122
		#如果 $exportAll 等於 "fasle" 則代表要根據需求匯出指定的欄位.
12123
		if($exportAll=="false"){
12124
 
12125
			#如果 $conf["valueName"] 沒有設置
12126
			if(!isset($conf["valueName"])){
12127
 
12128
				#預設為 $conf["tableValueName"]
12129
				$conf["valueName"]=$conf["tableValueName"];
12130
 
12131
				}#if end
12132
 
12133
			#取得每個欄位名稱
12134
			$result["dataColumnName"]=$conf["tableValueName"];
12135
 
12136
			#將讀取到的資料一次只讀取一列
12137
			while($row = mysqli_fetch_array($conf["sqlQueryResult"])){
12138
 
12139
				#$i筆項列資料,則運行$i次。
177 liveuser 12140
				for($i=0;$i<$columnCounts;$i++){
3 liveuser 12141
 
12142
					#如果欄位不存在
12143
					if(!isset($row[$conf["tableValueName"][$i]])){
12144
 
12145
						#將解析的資料內容用空字串替代放進$result["dataContent"]變數裏面
12146
						$result["dataContent"][$conf["valueName"][$i]][$dataSetNum] = "";
12147
 
12148
						}#if end
12149
 
12150
					#將解析的資料內容結果放進$result["dataContent"]變數裏面
12151
					$result["dataContent"][$conf["valueName"][$i]][$dataSetNum] = $row[$conf["tableValueName"][$i]];	
12152
 
12153
					}#for end
12154
 
12155
				#資料筆數編號加1
12156
				$dataSetNum++;	
12157
 
12158
				}#while end
12159
 
12160
			#將資料筆數放進 $result["dataCount"] 裏面
12161
			$result["dataCount"]=$dataSetNum;
12162
 
12163
			}#if end
12164
 
12165
		#執行道這邊代表執行成功
12166
		$result["status"]="true";
12167
 
12168
		#將取得的結果回傳
12169
		return $result;
12170
 
12171
		}#function sendQueryDataToVariabele end
12172
 
12173
	/*
12174
	#函式說明:
12175
	#一次取得資料庫、表的資料
12176
	#回傳結果:
12177
	#$result["status"],執行結果"true"為成功;"false"為執行失敗。
12178
	#$result["error"],錯誤訊息陣列。
12179
	#$result["function"],當前執行的漢書名稱.
12180
	#$result["argu"],使用的參數.
12181
	#$result["dataColumnName"],抓取的資料欄位名稱陣列.
12182
		#$result["dataColumnName"][$i]代表第$i+1個欄位名稱
12183
	#$result["dataContent"],爲資料的內容。
12184
	#$result["dataContent"][$conf["WhereColumnName"][$i]][$dataSetNum]
12185
		#$dataSetNum 爲第$dataSetNum+1筆資料
12186
		#$conf["WhereColumnName"][$i] 爲第 $i+1 個欄位的名稱
12187
	#$result["dataCount"],爲取得的資料筆數。
12188
	#$result["sql"],執行的sql字串.
12189
	#必填參數:
12190
	#$conf["dbAddress"],字串,爲dbServer的位置。
12191
	$conf["dbAddress"]=$dbAddress;
12192
	#$conf["dbAccount"],字串,爲登入dbServer的帳號。
12193
	$conf["dbAccount"]=$dbAccount;
12194
	#$conf["dbName"],字串,爲要存取的資料庫名稱
12195
	$conf["dbName"]=$dbName;
12196
	#$conf["tableName"],字串,爲要存取的資料表名稱
12197
	$conf["tableName"]="";
12198
	#$conf["columnYouWant"],字串陣列,你想要的欄位!,若設為「array("*")」則代表全部欄位.
12199
	$conf["columnYouWant"]=array();
12200
	#可省略參數:
12201
	#$conf["dbPassword"],字串,爲要存取dbServer的密碼.
12202
	#$conf["dbPassword"]=$dbPassword;
12203
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,可省略,若省略則代表使用預設的3306 port.
12204
	#$conf["dbPort"]="";
12205
	#$conf["WhereColumnName"],字串陣列,用於判斷語句的欄位項目陣列。
12206
	#$conf["WhereColumnName"]=array("");
12207
	#$conf["WhereColumnValue"],字串陣列,用於判斷語句的欄位數值陣列,若與LIKE搭配,則可以在關鍵自字串的左右名加上「%」符號,這樣就可以搜尋具有該字串的內容。
12208
	#$conf["WhereColumnValue"]=array("");
12209
	#$conf["WhereColumnCombine"],字串陣列,用於判斷語句當中需要()起來的判斷式,須爲陣列值,"s"代表「(」,"e"代表「)」 ,若無則須設爲""。
12210
	#$conf["WhereColumnCombine"]=array("");
12211
	#$conf["WhereColumnOperator"],字串陣列,用於判斷語句的比較符號陣列,可以用的符號有「"="、"!="、">"、"<"、"LIKE"、"NOT LIKE"」,預設都爲「=」。
12212
	#$conf["WhereColumnOperator"]=array("");
12213
	#$conf["WhereColumnAndOr"],字串陣列,用於判斷語句條件之間成立的條件是AND還是OR,須爲陣列值。其數量應爲要判斷的欄位數量減一。
12214
	#$conf["WhereColumnAndOr"]=array("");
12215
	#$conf["whereIn"],二維字串陣列,為每個in語句的內容,特定欄位數值等於陣列元素之一。array(array("colName",array("a","b","c")));代表欄位colName的值為a,b,c三者之一.
12216
	#$conf["whereIn"]=array(array("colName",array("a","b","c")));
12217
	#$conf["whereNotIn"],二維字串陣列,為每個not in語句的內容,array(array("colName",array("a","b","c")));代表欄位colName的值不為a,b,c三者之一.
12218
	#$conf["whereNotIn"]=array(array("colName",array("a","b","c")));
12219
	#$conf["orderItem"],字串,爲排序的項目依據,若要用隨機抽樣,可以用"rand()",可省略。
12220
	#$conf["orderItem"]="";
12221
	#$conf["ascORdesc"],字串,爲要低增還是遞減排序,asc爲遞增;desc爲遞減。
12222
	#$conf["ascORdesc"]="";
12223
	#$conf["numberStart"],字串,為從第幾筆開始讀取,預設為0,代筆第一筆。
12224
	#$conf["numberStart"]="0";
12225
	#$conf["numLimit"],字串,為要取幾筆資料,可以省略,省略則表示不限制數目。
12226
	#$conf["numLimit"]="30";
12227
	#$conf["groupBy"],字串陣列,爲要以哪幾個欄爲作爲分羣的依據(欄位相同的數值僅會取出一筆)。
12228
	#$conf["groupBy"]=array("");
12229
	#參考資料:
12230
	#無.
12231
	#備註:
12232
	#無.
12233
	*/
12234
	public static function fastGetDbData(&$conf){
12235
 
12236
		#初始化要回傳的內容
12237
		$result=array();
12238
 
12239
		#取得當前執行的函數名稱
12240
		$result["function"]=__FUNCTION__;
12241
 
12242
		#如果 $conf 不為陣列
12243
		if(gettype($conf)!="array"){
12244
 
12245
			#設置執行失敗
12246
			$result["status"]="false";
12247
 
12248
			#設置執行錯誤訊息
12249
			$result["error"][]="\$conf變數須為陣列形態";
12250
 
12251
			#如果傳入的參數為 null
12252
			if($conf==null){
12253
 
12254
				#設置執行錯誤訊息
12255
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
12256
 
12257
				}#if end
12258
 
12259
			#回傳結果
12260
			return $result;
12261
 
12262
			}#if end
12263
 
12264
		#取得使用的
12265
		$result["argu"]=$conf;
12266
 
12267
		#檢查參數
12268
		#函式說明:
12269
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
12270
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
12271
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
12272
		#$result["function"],當前執行的函式名稱.
12273
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
12274
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
12275
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
12276
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
12277
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
12278
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
12279
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
12280
		#必填參數:
12281
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
12282
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
12283
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
12284
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("dbAddress","dbAccount","dbName","tableName","columnYouWant");
12285
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
12286
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string","string","array");
12287
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
12288
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
12289
		#可省略參數:
12290
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
12291
		#$conf["canBeEmptyString"]="false";
12292
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
12293
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("dbPassword","dbPort","WhereColumnName","WhereColumnValue","WhereColumnCombine","WhereColumnOperator","WhereColumnAndOr","orderItem","ascORdesc","numberStart","numLimit","groupBy","whereIn","whereNotIn");
12294
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
12295
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","array","array","array","array","array","string","string","string","string","array","array","array");
12296
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
12297
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null,null,null,null,null,null,null,null,"0",null,null,null,null);
12298
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
12299
		$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("WhereColumnName","WhereColumnValue");
12300
		$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("WhereColumnValue","WhereColumnOperator");
12301
		#參考資料:
12302
		#array_keys=>http://php.net/manual/en/function.array-keys.php
12303
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
12304
		unset($conf["variableCheck::checkArguments"]);
177 liveuser 12305
 
3 liveuser 12306
		#如果檢查失敗
12307
		if($checkResult["status"]=="false"){
12308
 
12309
			#設置執行失敗的訊息
12310
			$result["status"]="false";
12311
 
12312
			#設置錯誤訊息
12313
			$result["error"]=$checkResult;
12314
 
12315
			#回傳結果
12316
			return $result;
12317
 
12318
			}#if end
12319
 
12320
		#如果檢查不通過
12321
		if($checkResult["passed"]=="false"){
12322
 
12323
			#設置執行失敗的訊息
12324
			$result["status"]="false";
12325
 
12326
			#設置錯誤訊息
12327
			$result["error"]=$checkResult;
12328
 
12329
			#回傳結果
12330
			return $result;
12331
 
12332
			}#if end
12333
 
12334
		#初始化要檢查的欄位
12335
		$colToCheck=array();
12336
 
12337
		#如果有指定要的欄位
12338
		if($conf["columnYouWant"]!==array("*")){
12339
 
12340
			#針對每個欄位
12341
			foreach($conf["columnYouWant"] as $col){
12342
 
12343
				#取得欄位名稱
12344
				$colToCheck[]=$col;
12345
 
177 liveuser 12346
				}#foreach end
3 liveuser 12347
 
12348
			}#if end
12349
 
12350
		#如果有設置
12351
		if(isset($conf["WhereColumnName"])){
12352
 
12353
			#針對每個欄位
12354
			foreach($conf["WhereColumnName"] as $col){
12355
 
12356
				#取得欄位名稱
12357
				$colToCheck[]=$col;
12358
 
177 liveuser 12359
				}#foreach end
3 liveuser 12360
 
12361
			}#if end
12362
 
12363
		#如果有設置 $conf["whereIn"]
12364
		if(isset($conf["whereIn"])){
177 liveuser 12365
 
3 liveuser 12366
			#針對每個 where in 條件
12367
			for($i=0;$i<count($conf["whereIn"]);$i++){
12368
 
12369
				#取得欄位名稱
12370
				$colToCheck[]=$conf["whereIn"][$i][0];
12371
 
12372
				}#for end
12373
 
12374
			}#if end
12375
 
12376
		#如果要檢查的欄位不是空陣列
12377
		if($colToCheck!==array()){
12378
 
12379
			#檢查需要判斷資料表欄位是否存在
12380
			#函式說明:
12381
			#檢查資料表的欄位是否存在
12382
			#回傳結果::
12383
			#設置執行錯誤的識別
12384
			#$result["function"],當前執行的函數名稱.
12385
			#$result["status"],"true"代表執行成功;"false"代表執行失敗.
12386
			#$result["error"],錯誤訊息.
12387
			#$result["warning"],警告訊息陣列
12388
			#$result["passed"],是否通過檢查,"true"代表通過;"false"代表不通過.
12389
			#其餘的結果代表參數不正確
12390
			#必填參數:
12391
			#$conf["dbAddr"],字串,爲mysql-Server的位置
12392
			$conf["db::checkTableColExists"]["dbAddr"]=$conf["dbAddress"]; 
12393
			#$conf["dbAcct"],字串,爲用於連入mysql-Server時要使用的帳號
12394
			$conf["db::checkTableColExists"]["dbAcct"]=$conf["dbAccount"];
12395
			#$conf["dbName"],字串,爲指定的資料庫名稱
12396
			$conf["db::checkTableColExists"]["dbName"]=$conf["dbName"];
12397
			#$conf["dtName"],字串,為要檢查是否存在的資料表名稱
12398
			$conf["db::checkTableColExists"]["dtName"]=$conf["tableName"];
12399
			#$conf["col"],字串陣列,要檢查的欄位名稱.
12400
			$conf["db::checkTableColExists"]["col"]=array_unique($colToCheck);
12401
			#可省略參數
12402
 
12403
			#如果有設置 $conf["dbPassword"]
12404
			if(isset($conf["dbPassword"])){
12405
 
12406
				#$conf["dbPass"],爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼 
12407
				$conf["db::checkTableColExists"]["dbPass"]=$conf["dbPassword"];
12408
 
12409
				}#if end
12410
 
12411
			#如果有設置 $conf["dbPort"]
12412
			if(isset($conf["dbPort"])){
12413
 
12414
				#$conf["dbPort"],爲連線到mysql-Server時要使用的port,可省略,若省略則代表預設的port 3306 
12415
				$conf["db::checkTableColExists"]["dbPort"]=$conf["dbPort"];
12416
 
12417
				}#if end
12418
 
12419
			$checkTableColExists=db::checkTableColExists($conf["db::checkTableColExists"]);
12420
			unset($conf["db::checkTableColExists"]);
12421
 
12422
			#如果檢查失敗
12423
			if($checkTableColExists["status"]==="false"){
12424
 
12425
				#設置執行失敗
12426
				$result["status"]="false";
12427
 
12428
				#設置執行錯誤訊息
12429
				$result["error"]=$checkTableColExists;
12430
 
12431
				#回傳結果
12432
				return $result;
12433
 
12434
				}#if end
12435
 
12436
			#如果檢查不通過
12437
			if($checkTableColExists["passed"]==="false"){
12438
 
12439
				#設置執行失敗
12440
				$result["status"]="false";
12441
 
12442
				#設置執行錯誤訊息
12443
				$result["error"]=$checkTableColExists;
12444
 
12445
				#回傳結果
12446
				return $result;
12447
 
12448
				}#if end
12449
 
12450
			}#if end
12451
 
12452
		#函式說明:
12453
		#dataTableSelectCustom的改良版
12454
		#回傳的參數:
12455
		#$result["status"],執行結果"true"為成功;"false"為執行失敗。
12456
		#$result["error"],錯誤訊息陣列。
12457
		#$result["sql"],執行的sql語法。
12458
		#$result["sqlQueryResult"]#爲資料連線處理完畢之後的結果,需要 sendQueryDataToVariabele 涵式來解析。
12459
		#$result["connectInformation"]#連結到資料庫的資訊。
12460
		#$result["dataCount"]#符合條件的資料筆數
12461
		#必填參數:
12462
		$conf["db"]["dataTableSelectCustomV2"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置。
12463
		$conf["db"]["dataTableSelectCustomV2"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號。
12464
		$conf["db"]["dataTableSelectCustomV2"]["selectedDataBaseName"]=$conf["dbName"];#要選取的資料庫名稱	。
12465
		$conf["db"]["dataTableSelectCustomV2"]["selectedDataTableName"]=$conf["tableName"];#爲欲選擇的資料表名稱。
12466
		#可省略參數:
12467
 
12468
		#如果存在 $conf["dbPassword"]
12469
		if(isset($conf["dbPassword"])){
12470
 
12471
			#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼。
12472
			$conf["db"]["dataTableSelectCustomV2"]["dbPassword"]=$conf["dbPassword"];
12473
 
12474
			}#if end
12475
 
12476
		#如果存在 $conf["dbPort"]
12477
		if(isset($conf["dbPort"])){
12478
 
12479
			#爲連線到mysql-Server時要使用的port,可省略,若省略則代表使用預設的3306 port
12480
			$conf["db"]["dataTableSelectCustomV2"]["dbPort"]=$conf["dbPort"];
12481
 
12482
			}#if end
12483
 
12484
		#如果存在 $conf["WhereColumnCombine"]
12485
		if(isset($conf["WhereColumnCombine"])){
12486
 
12487
			#用於判斷語句當中需要()起來的判斷式,須爲陣列值,"s"代表「(」,"e"代表「)」 ,若無則須設爲""。
12488
			$conf["db"]["dataTableSelectCustomV2"]["WhereColumnCombine"]=$conf["WhereColumnCombine"];
12489
 
12490
			}#if end
12491
 
12492
		#如果 $conf["WhereColumnName"] 存在
12493
		if(isset($conf["WhereColumnName"])){
12494
 
12495
			$conf["db"]["dataTableSelectCustomV2"]["WhereColumnName"]=$conf["WhereColumnName"];#用於判斷語句的欄位項目陣列。
12496
 
12497
			}#if end	
12498
 
12499
		#如果存在 $conf["WhereColumnOperator"]
12500
		if(isset($conf["WhereColumnOperator"])){
12501
 
12502
			#用於判斷語句的比較符號陣列,可以用的符號有「"="、">"、"<"、"LIKE"、"NOT LIKE"」,預設都爲「=」。
12503
			$conf["db"]["dataTableSelectCustomV2"]["WhereColumnOperator"]=$conf["WhereColumnOperator"];
12504
 
12505
			}#if end
12506
 
12507
		#如果 $conf["WhereColumnValue"] 有設置
12508
		if(isset($conf["WhereColumnValue"])){
12509
 
12510
			$conf["db"]["dataTableSelectCustomV2"]["WhereColumnValue"]=$conf["WhereColumnValue"];#用於判斷語句的欄位數值陣列,若與LIKE搭配,則可以在關鍵自字串的左右名加上「%」符號,這樣就可以搜尋具有該字串的內容。
12511
 
12512
			}#if end
12513
 
12514
		#如果 $conf["WhereColumnAndOr"] 存在
12515
		if(isset($conf["WhereColumnAndOr"])){
12516
 
12517
			#用於判斷語句條件之間成立的條件是AND還是OR,須爲陣列值。其數量應爲要判斷的欄位數量減一。
12518
			$conf["db"]["dataTableSelectCustomV2"]["WhereColumnAndOr"]=$conf["WhereColumnAndOr"];
12519
 
12520
			}#if end
12521
 
12522
		#如果 $conf["orderItem"] 存在
12523
		if(isset($conf["orderItem"])){
12524
 
12525
			#爲排序的項目依據,若要用隨機抽樣,可以用"rand()",可省略。
12526
			$conf["db"]["dataTableSelectCustomV2"]["orderItem"]=$conf["orderItem"];
12527
 
12528
			}#if end
12529
 
12530
		#如果 $conf["ascORdesc"] 存在
12531
		if(isset($conf["ascORdesc"])){
12532
 
12533
			#爲要低增還是遞減排序,asc爲遞增;desc爲遞減。
12534
			$conf["db"]["dataTableSelectCustomV2"]["ascORdesc"]=$conf["ascORdesc"];
12535
 
12536
			}#if end
12537
 
12538
		#如果 $conf["numberStart"] 存在
12539
		if(isset($conf["numberStart"])){
12540
 
12541
			$conf["db"]["dataTableSelectCustomV2"]["numberStart"]=$conf["numberStart"];
12542
 
12543
			}#if end
12544
 
12545
		#如果 $conf["numLimit"] 存在
12546
		if(isset($conf["numLimit"])){
12547
 
12548
			#為要取幾筆資料,可以省略,省略則表示不限制數目。
12549
			$conf["db"]["dataTableSelectCustomV2"]["number"]=$conf["numLimit"];
12550
 
12551
			}#if end
12552
 
12553
		#如果 $conf["groupBy"] 存在
12554
		if(isset($conf["groupBy"])){
12555
 
12556
			#爲要以那個欄爲作爲分羣的依據(該欄位相同的數值僅會取出一筆)。
12557
			$conf["db"]["dataTableSelectCustomV2"]["groupBy"]=$conf["groupBy"];
12558
 
12559
			}#if end
12560
 
12561
		#如果 $conf["whereIn"] 存在
12562
		if(isset($conf["whereIn"])){
12563
 
12564
			#where in 條件		
12565
			$conf["db"]["dataTableSelectCustomV2"]["whereIn"]=$conf["whereIn"];
12566
 
12567
			}#if end
12568
 
12569
		#如果 $conf["whereNotIn"] 存在
12570
		if(isset($conf["whereNotIn"])){
177 liveuser 12571
 
12572
			#where not in 條件
3 liveuser 12573
			$conf["db"]["dataTableSelectCustomV2"]["whereNotIn"]=$conf["whereNotIn"];
12574
 
12575
			}#if end
12576
 
12577
		$dataTableSelectCustomV2=db::dataTableSelect($conf["db"]["dataTableSelectCustomV2"]);
12578
		unset($conf["db"]);
177 liveuser 12579
 
3 liveuser 12580
		#如果sql查詢失敗
12581
		#如果 $dataTableSelectCustomV2["status"] 等於 "false"
12582
		if($dataTableSelectCustomV2["status"]=="false"){
12583
 
12584
			#則設置執行錯誤的識別
12585
			$result["status"]="false";
12586
 
12587
			#設置錯誤訊息
12588
			$result["error"]=$dataTableSelectCustomV2;
12589
 
12590
			#回傳結果
12591
			return $result;
12592
 
12593
			}#if end
12594
 
12595
		#取得執行的sql字串
12596
		$result["sql"]=$dataTableSelectCustomV2["sql"];
12597
 
12598
		#解析 dataTableSelect($conf) 後的結果,亦即將執行sql語法後所得到的結果解析放進變數裏面
12599
		#回傳結果:
12600
		#$result["status"],執行結果"true"為成功;"false"為執行失敗。
12601
		#$result["error"],錯誤訊息陣列。
12602
		#$result["dataColumnName"],為資料欄位的名稱陣列.
12603
		#$result["dataColumnName"][$i]代表第一個欄位名稱.
12604
		#$result["dataContent"],爲資料的內容。
12605
		#$result["dataContent"][$conf["tableValueName"][$i]][$dataSetNum],
12606
			#$dataSetNum 爲第$dataSetNum+1筆資料
12607
			#$conf["tableValueName"][$i] 爲第 $i+1 個欄位的名稱
12608
		#$result["dataCount"],爲取得的資料筆數。
12609
		#必填參數:
12610
		$conf["db"]["sendQueryDataToVariabele"]["sqlQueryResult"]=$dataTableSelectCustomV2["sqlQueryResult"];#爲執行sql語法所獲得的查詢結果。
12611
		$conf["db"]["sendQueryDataToVariabele"]["tableValueName"]=$conf["columnYouWant"];#$conf["tableValueName"]=array();#爲該資料表列項目的每一項名稱,須爲陣列值,若為「array("*")」則代表所有欄位.
12612
		$conf["db"]["sendQueryDataToVariabele"]["valueName"]=$conf["columnYouWant"];#爲該資料表列項目的每一項所要對應的變數名稱,須爲陣列值。
12613
		$conf["db"]["sendQueryDataToVariabele"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
12614
		$conf["db"]["sendQueryDataToVariabele"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
12615
		#可省略參數:
12616
 
12617
		#如果存在 $conf["dbPassword"]
12618
		if(isset($conf["dbPassword"])){
12619
 
12620
			#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼。
12621
			$conf["db"]["sendQueryDataToVariabele"]["dbPassword"]=$conf["dbPassword"];
12622
 
12623
			}#if end
12624
 
12625
		#如果存在 $conf["dbPort"]
12626
		if(isset($conf["dbPort"])){
12627
 
12628
			#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表使用預設 port 3306
12629
			$conf["db"]["sendQueryDataToVariabele"]["dbPort"]=$conf["dbPort"];
12630
 
12631
			}#if end
12632
 
12633
		$sendQueryDataToVariabele=db::sendQueryDataToVariabele($conf["db"]["sendQueryDataToVariabele"]);
12634
		unset($conf["db"]);
12635
 
12636
		#如果 $sendQueryDataToVariabele["status"] 等於 "false"
12637
		if($sendQueryDataToVariabele["status"]=="false"){
12638
 
12639
			#設置執行錯誤的識別
12640
			$result["status"]="false";
12641
 
12642
			#設置錯誤訊息
12643
			$result["error"]=$sendQueryDataToVariabele;
12644
 
12645
			#回傳結果
12646
			return $result;
12647
 
12648
			}#if end
12649
 
12650
		#如果 $sendQueryDataToVariabele["dataContent"] 沒有設置
12651
		if(!isset($sendQueryDataToVariabele["dataContent"])){
12652
 
12653
			#那就代表沒有找到符合的資料
12654
			$sendQueryDataToVariabele["dataContent"]=NULL;
12655
 
12656
			#取得抓取到的資料內容
12657
			$result["dataContent"]=$sendQueryDataToVariabele["dataContent"];
12658
 
12659
			}#if end
12660
 
12661
		#反之代表有資料
12662
		else{
12663
 
12664
			#取得抓取到的資料內容
12665
			$result["dataContent"]=$sendQueryDataToVariabele["dataContent"];
12666
 
12667
			#抓取欄位名稱
12668
			$result["dataColumnName"]=$sendQueryDataToVariabele["dataColumnName"];
12669
 
12670
			}#else end
12671
 
12672
		#如果 $sendQueryDataToVariabele["dataCount"] 沒有設定
12673
		if(!isset($sendQueryDataToVariabele["dataCount"])){
12674
 
12675
			#則代表沒有抓到符合的資料
12676
			(int)$sendQueryDataToVariabele["dataCount"]=0;
12677
 
12678
			#取得資料筆數
12679
			$result["dataCount"]=$sendQueryDataToVariabele["dataCount"];
12680
 
12681
			}#if end
12682
 
12683
		#反之代表有符合的資料
12684
		else{
12685
 
12686
			#取得抓取到的資料筆數
12687
			$result["dataCount"]=$sendQueryDataToVariabele["dataCount"];
12688
 
12689
			}#else end
12690
 
12691
		#執行到這邊表示執行成功
12692
		$result["status"]="true";
12693
 
12694
		#回傳結果
12695
		return $result;
12696
 
12697
		}#function fastGetDbData end
12698
 
12699
	/*
12700
	#函式說明:
12701
	#透過一個父資料表取得多個關聯子資料表的資料,並合併成一張表
12702
	#回傳結果:
12703
	#$result["status"],執行結果"true"為成功;"false"為執行失敗。
12704
	#$result["error"],錯誤訊息陣列。
12705
	#$reuslt["function"],當前執行的函數
12706
	#$result["parentTable"]["dataContent"],爲合併了子資料表欄位的父資料表的內容。
12707
	#$result["parentTable"]["dataContent"][$conf["WhereColumnName"][$i]][$dataSetNum]
12708
		#$dataSetNum 爲第$dataSetNum+1筆資料
12709
		#$conf["WhereColumnName"][$i] 爲第 $i+1 個欄位的名稱
12710
	#$result["parentTable"]["dataCount"],爲取得的資料筆數。
12711
	#必填參數:
12712
	#$conf["dbAddress"],字串陣列,爲每個dbServer的位置。
12713
	$conf["dbAddress"]=array($dbAddress);
12714
	#$conf["dbAccount"],字串陣列,爲登入每個dbServer的帳號。
12715
	$conf["dbAccount"]=array($dbAccount);
12716
	#$conf["dbName"],字串陣列,爲每個要存取的資料庫名稱
12717
	$conf["dbName"]=array($dbName);
12718
	#$conf["tableName"],字串陣列,爲每個要存取的資料表名稱,$conf["tableName"][0]為父資料表.
12719
	$conf["tableName"]=array("");
12720
	#$conf["linkColumnName"]=array(array(""));#二維字串陣列,為可以從父表關連到其他資料表的欄位名稱.
12721
		#$conf["linkColumnName"][$i]=array("parentColumnName","childColumnName"),為父資料表的"parentColumnName"欄位跟第$i+1個關聯資料表的"childColumnName"關聯.
12722
	$conf["linkColumnName"]=array(array(""));
12723
	#$conf["columnYouWant"]=array(array(""));#二維字串陣列,為每個資料表依序想要的欄位.
12724
	$conf["columnYouWant"]=array(array(""));#二維字串陣列,為每個資料表依序想要的欄位.
12725
	#可省略參數:
12726
	#$conf["dbPassword"],字串陣列,爲要存取每個dbServer的密碼
12727
	#$conf["dbPassword"]=array($dbPassword);
12728
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,可省略,若省略則代表使用預設的3306 port.
12729
	#$conf["dbPort"]="";
12730
	#$conf["WhereColumnName"],字串陣列,用於判斷語句的欄位項目陣列。
12731
	#$conf["WhereColumnName"]=array("");
12732
	#$conf["WhereColumnValue"],字串陣列,用於判斷語句的欄位數值陣列,若與LIKE搭配,則可以在關鍵自字串的左右名加上「%」符號,這樣就可以搜尋具有該字串的內容。
12733
	#$conf["WhereColumnValue"]=array("");	
12734
	#$conf["WhereColumnCombine"],字串陣列,用於判斷語句當中需要()起來的判斷式,須爲陣列值,"s"代表「(」,"e"代表「)」 ,若無則須設爲""。
12735
	#$conf["WhereColumnCombine"]=array("");
12736
	#$conf["WhereColumnOperator"],字串陣列,用於判斷語句的比較符號陣列,可以用的符號有「"="、">"、"<"、"LIKE"、"NOT LIKE"」,預設都爲「=」。
12737
	#$conf["WhereColumnOperator"]=array("");
12738
	#$conf["WhereColumnAndOr"],字串陣列,用於判斷語句條件之間成立的條件是AND還是OR,須爲陣列值。其數量應爲要判斷的欄位數量減一。
12739
	#$conf["WhereColumnAndOr"]=array("");
12740
	#$conf["whereIn"],二維字串陣列,為每個in語句的內容,特定欄位數值等於陣列元素之一。array(array("colName",array("a","b","c")));代表欄位colName的值為a,b,c三者之一.
12741
	#$conf["whereIn"]=array(array("colName",array("a","b","c")));
12742
	#$conf["whereNotIn"],二維字串陣列,為每個not in語句的內容,array(array("colName",array("a","b","c")));代表欄位colName的值不為a,b,c三者之一.
12743
	#$conf["whereNotIn"]=array(array("colName",array("a","b","c")));
12744
	#$conf["orderItem"],字串,排序的項目依據,若要用隨機抽樣,可以用"rand()",可省略。
12745
	#$conf["orderItem"]="";
12746
	#$conf["ascORdesc"],字串,要低增還是遞減排序,asc爲遞增;desc爲遞減。
12747
	#$conf["ascORdesc"]="";
12748
	#$conf["numberStart"],字串,從第幾筆開始讀取,預設為"0",代筆第一筆。
12749
	#$conf["numberStart"]="0";
12750
	#$conf["numLimit"],字串,要取幾筆資料,可以省略,省略則表示不限制數目。
12751
	#$conf["numLimit"]="30";
12752
	#$conf["groupBy"],字串陣列,爲要以哪幾個欄爲作爲分羣的依據(欄位相同的數值僅會取出一筆)。
12753
	#$conf["groupBy"]=array();
12754
	#參考資料:
12755
	#無.
12756
	#備註:
12757
	#無.
12758
	*/
12759
	public static function fastGetMultiLinkedDbData(&$conf){
12760
 
12761
		#初始化要回傳的內容
12762
		$result=array();
12763
 
12764
		#取得當前執行的函數名稱
12765
		$result["function"]=__FUNCTION__;
12766
 
12767
		#如果 $conf 不為陣列
12768
		if(gettype($conf)!="array"){
12769
 
12770
			#設置執行失敗
12771
			$result["status"]="false";
12772
 
12773
			#設置執行錯誤訊息
12774
			$result["error"][]="\$conf變數須為陣列形態";
12775
 
12776
			#如果傳入的參數為 null
12777
			if($conf==null){
12778
 
12779
				#設置執行錯誤訊息
12780
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
12781
 
12782
				}#if end
12783
 
12784
			#回傳結果
12785
			return $result;
12786
 
12787
			}#if end
12788
 
12789
		#檢查參數
12790
		#函式說明:
12791
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
12792
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
12793
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
12794
		#$result["function"],當前執行的函式名稱.
12795
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
12796
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
12797
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
12798
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
12799
		#必填參數:
12800
		#$conf["variableCheck.checkArguments"]["varInput"],陣列變數,要檢查的陣列變數.
12801
		$conf["variableCheck.checkArguments"]["varInput"]=&$conf;
12802
		#$conf["variableCheck.checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
12803
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableName"]=array("dbAddress","dbAccount","dbName","tableName","linkColumnName","columnYouWant");
12804
		#$conf["variableCheck.checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
12805
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableType"]=array("array","array","array","array","array","array");
12806
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
12807
		$conf["variableCheck.checkArguments"]["referenceVarKey"]="variableCheck.checkArguments";
12808
		#可省略參數:
12809
		#$conf["variableCheck.checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"false"。
12810
		#$conf["variableCheck.checkArguments"]["canBeEmptyString"]="false";
12811
		#$conf["variableCheck.checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
12812
		$conf["variableCheck.checkArguments"]["skipableVariableName"]=array("dbPassword","WhereColumnName","WhereColumnValue","WhereColumnCombine","WhereColumnOperator","WhereColumnAndOr","orderItem","ascORdesc","numberStart","numLimit","groupBy","whereIn","whereNotIn");
12813
		#$conf["variableCheck.checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
12814
		$conf["variableCheck.checkArguments"]["skipableVariableType"]=array("array","array","array","array","array","array","string","string","string","string","array","array","array");
12815
		#$conf["variableCheck.checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定.
12816
		#$conf["variableCheck.checkArguments"]["skipableVarDefaultValue"]=array("");
12817
		$checkResult=variableCheck::checkArguments($conf["variableCheck.checkArguments"]);
12818
		unset($conf["variableCheck.checkArguments"]);
12819
 
12820
		#如果檢查出錯
12821
		if($checkResult["status"]=="false"){
12822
 
12823
			#設置錯誤識別
12824
			$result["status"]="false";
12825
 
12826
			#設置錯誤訊息
12827
			$result["error"]=$checkResult;
12828
 
12829
			#回傳結果
12830
			return $result;
12831
 
12832
			}#if end
12833
 
12834
		#如果檢查出錯
12835
		if($checkResult["passed"]=="false"){
12836
 
12837
			#設置錯誤識別
12838
			$result["status"]="false";
12839
 
12840
			#設置錯誤訊息
12841
			$result["error"]=$checkResult;
12842
 
12843
			#回傳結果
12844
			return $result;
12845
 
12846
			}#if end
12847
 
12848
		#取得父表的資料
12849
		#函式說明:
12850
		#一次取得資料庫、表的資料
12851
		#回傳結果:
12852
		#$result["status"],執行結果"true"為成功;"false"為執行失敗。
12853
		#$result["error"],錯誤訊息陣列。
12854
		#$result["dataContent"],爲資料的內容。
12855
			#$result["dataContent"][$conf["WhereColumnName"][$i]][$dataSetNum]
12856
			#$dataSetNum 爲第$dataSetNum+1筆資料
12857
			#$conf["WhereColumnName"][$i] 爲第 $i+1 個欄位的名稱
12858
		#$result["dataCount"],爲取得的資料筆數。
12859
		#必填參數:
12860
		$conf["db"]["fastGetDbData"]["dbAddress"]=$conf["dbAddress"][0];#爲dbServer的位置。
12861
		$conf["db"]["fastGetDbData"]["dbAccount"]=$conf["dbAccount"][0];#爲登入dbServer的帳號。
12862
		$conf["db"]["fastGetDbData"]["dbName"]=$conf["dbName"][0];#爲要存取的資料庫名稱
12863
		$conf["db"]["fastGetDbData"]["tableName"]=$conf["tableName"][0];#爲要存取的資料表名稱
12864
		$conf["db"]["fastGetDbData"]["columnYouWant"]=$conf["columnYouWant"][0];#你想要的欄位!
12865
		#可省略參數:
12866
 
12867
		#如果 $conf["dbPassword"][0] 有設置
12868
		if(isset($conf["dbPassword"][0])){
12869
 
12870
			$conf["db"]["fastGetDbData"]["dbPassword"]=$conf["dbPassword"][0];#爲要存取dbServer的密碼
12871
 
12872
			}#if end
12873
 
12874
		#如果 $conf["WhereColumnName"] 有設置
12875
		if(isset($conf["WhereColumnName"])){
12876
 
12877
			$conf["db"]["fastGetDbData"]["WhereColumnName"]=$conf["WhereColumnName"];#用於判斷語句的欄位項目陣列。
12878
 
12879
			}#if end
12880
 
12881
		#如果 $conf["WhereColumnValue"] 有設置
12882
		if(isset($conf["WhereColumnValue"])){
177 liveuser 12883
 
3 liveuser 12884
			$conf["db"]["fastGetDbData"]["WhereColumnValue"]=$conf["WhereColumnValue"];#用於判斷語句的欄位數值陣列,若與LIKE搭配,則可以在關鍵自字串的左右名加上「%」符號,這樣就可以搜尋具有該字串的內容。
177 liveuser 12885
 
3 liveuser 12886
			}#if end
12887
 
12888
		#如果 $conf["WhereColumnCombine"] 有設置
12889
		if(isset($conf["WhereColumnCombine"])){
177 liveuser 12890
 
3 liveuser 12891
			$conf["db"]["fastGetDbData"]["WhereColumnCombine"]=$conf["WhereColumnCombine"];#用於判斷語句當中需要()起來的判斷式,須爲陣列值,"s"代表「(」,"e"代表「)」 ,若無則須設爲""。
177 liveuser 12892
 
3 liveuser 12893
			}#if end
12894
 
12895
		#如果 $conf["WhereColumnOperator"] 有設置
12896
		if(isset($conf["WhereColumnOperator"])){
12897
 
12898
			$conf["db"]["fastGetDbData"]["WhereColumnOperator"]=$conf["WhereColumnOperator"];#用於判斷語句的比較符號陣列,可以用的符號有「"="、">"、"<"、"LIKE"、"NOT LIKE"」,預設都爲「=」。
12899
 
12900
			}#if end
12901
 
12902
		#如果 $conf["WhereColumnAndOr"][$i] 有設置
12903
		if(isset($conf["WhereColumnAndOr"])){
12904
 
12905
			$conf["db"]["fastGetDbData"]["WhereColumnAndOr"]=$conf["WhereColumnAndOr"];#用於判斷語句條件之間成立的條件是AND還是OR,須爲陣列值。其數量應爲要判斷的欄位數量減一。
12906
 
12907
			}#if end
12908
 
12909
		#如果 $conf["orderItem"] 有設置
12910
		if(isset($conf["orderItem"])){
12911
 
12912
			$conf["db"]["fastGetDbData"]["orderItem"]=$conf["orderItem"];#爲排序的項目依據,若要用隨機抽樣,可以用"rand()",可省略。
12913
 
12914
			}#if end
12915
 
12916
		#如果 $conf["ascORdesc"] 有設置
12917
		if(isset($conf["ascORdesc"])){
12918
 
12919
			$conf["db"]["fastGetDbData"]["ascORdesc"]=$conf["ascORdesc"];#爲要低增還是遞減排序,asc爲遞增;desc爲遞減。
12920
 
12921
			}#if end
12922
 
12923
		#如果 $conf["numberStart"] 有設置
12924
		if(isset($conf["numberStart"])){
12925
 
12926
			$conf["db"]["fastGetDbData"]["numberStart"]=$conf["numberStart"];#為從第幾筆開始讀取,預設為0,代筆第一筆。
12927
 
12928
			}#if end
12929
 
12930
		#如果 $conf["numLimit"] 有設置
12931
		if(isset($conf["numLimit"])){
12932
 
12933
			$conf["db"]["fastGetDbData"]["numLimit"]=$conf["numLimit"];#為要取幾筆資料,可以省略,省略則表示不限制數目。
12934
 
12935
			}#if end
12936
 
12937
		#如果 $conf["groupBy"] 有設置
12938
		if(isset($conf["groupBy"])){
177 liveuser 12939
 
3 liveuser 12940
			$conf["db"]["fastGetDbData"]["groupBy"]=$conf["groupBy"];#爲要以哪幾個欄爲作爲分羣的依據(欄位相同的數值僅會取出一筆)。
177 liveuser 12941
 
3 liveuser 12942
			}#if end
177 liveuser 12943
 
3 liveuser 12944
		#如果 $conf["whereIn"] 存在
12945
		if(isset($conf["whereIn"])){
177 liveuser 12946
 
12947
			#where in 條件
3 liveuser 12948
			$conf["db"]["fastGetDbData"]["whereIn"]=$conf["whereIn"];
12949
 
12950
			}#if end
12951
 
12952
		#如果 $conf["whereNotIn"] 存在
12953
		if(isset($conf["whereNotIn"])){
177 liveuser 12954
 
3 liveuser 12955
			#where not in 條件	
12956
			$conf["db"]["fastGetDbData"]["whereNotIn"]=$conf["whereNotIn"];
12957
 
12958
			}#if end
177 liveuser 12959
 
3 liveuser 12960
		#儲存到 $result["mainTable"] 陣列裡面
12961
		$result["parentTable"]=db::fastGetDbData($conf["db"]["fastGetDbData"]);
12962
		unset($conf["db"]["fastGetDbData"]);
12963
 
12964
		#如果 $result["mainTable"]["status"] 為 "false"
12965
		if($result["parentTable"]["status"]=="false"){
12966
 
12967
			#取得錯誤訊息
12968
			$result["error"]=$result["parentTable"]["error"];
12969
 
12970
			#設置執行結果為 "false"
12971
			$result["status"]="false";
12972
 
12973
			#回傳結果
12974
			return $result;
12975
 
12976
			}#if end
12977
 
12978
		#根據 $conf["linkColumnName"] 的數量
12979
		for($i=0;$i<count($conf["linkColumnName"]);$i++){
12980
 
12981
			#取得父資料表的關聯欄位名稱
12982
			$parentTableLinkColumnName=$conf["linkColumnName"][$i][0];
12983
 
12984
			#取得子資料表的關聯欄位名稱
12985
			$childTableLinkColumnName=$conf["linkColumnName"][$i][1];
12986
 
12987
			#根據父資料表的資料筆數
12988
			for($j=0;$j<$result["parentTable"]["dataCount"];$j++){
12989
 
12990
				#如果要連結的欄位不在 select 的欄位裡面
12991
				if(!isset($result["parentTable"]["dataContent"][$parentTableLinkColumnName])){
12992
 
12993
					#設置執行錯誤
12994
					$result["status"]="false";
12995
 
12996
					#設置執行錯誤內容
12997
					$result["error"]="欄位 ".$parentTableLinkColumnName." 必須在參數 columnYouWant 裡面.";
12998
 
12999
					#回傳結果
13000
					return $result;
13001
 
13002
					}#if end
13003
 
13004
				#父資料表第$j筆資料關聯欄位的數值內容
13005
				$parentTableLinkColumnValue=$result["parentTable"]["dataContent"][$parentTableLinkColumnName][$j];
13006
 
13007
				#var_dump($parentTableLinkColumnValue);
13008
 
13009
				#根據第$j筆資料的父關聯欄位數值來尋找子關聯資料表的欄位數值
13010
				#函式說明:
13011
				#一次取得資料庫、表的資料
13012
				#回傳結果:
13013
				#$result["status"],執行結果"true"為成功;"false"為執行失敗。
13014
				#$result["error"],錯誤訊息陣列。
13015
				#$result["dataContent"],爲資料的內容。
13016
				#$result["dataContent"][$conf["WhereColumnName"][$i]][$dataSetNum]
13017
					#$dataSetNum 爲第$dataSetNum+1筆資料
13018
					#$conf["WhereColumnName"][$i] 爲第 $i+1 個欄位的名稱
13019
				#$result["dataCount"],爲取得的資料筆數。
13020
				#必填參數:
13021
				$conf["db"]["fastGetDbData"]["dbAddress"]=$conf["dbAddress"][$i+1];#爲dbServer的位置。
13022
				$conf["db"]["fastGetDbData"]["dbAccount"]=$conf["dbAccount"][$i+1];#爲登入dbServer的帳號。
13023
				$conf["db"]["fastGetDbData"]["dbName"]=$conf["dbName"][$i+1];#爲要存取的資料庫名稱
13024
				$conf["db"]["fastGetDbData"]["tableName"]=$conf["tableName"][$i+1];#爲要存取的資料表名稱
13025
				$conf["db"]["fastGetDbData"]["columnYouWant"]=$conf["columnYouWant"][$i+1];#你想要的欄位!
13026
				#可省略參數:
13027
 
13028
				#如果 $conf["dbPassword"][$i+1] 有設定
13029
				if(isset($conf["dbPassword"][$i+1])){
13030
 
13031
					#則設置其連線密碼
13032
					$conf["db"]["fastGetDbData"]["dbPassword"]=$conf["dbPassword"][$i+1];#爲要存取dbServer的密碼
13033
 
13034
					}#if end
13035
 
13036
				#如果 $conf["dbPort"][$i+1] 有設定
13037
				if(isset($conf["dbPort"][$i+1])){
13038
 
13039
					#則設置其連線的 port
13040
					$conf["db"]["fastGetDbData"]["dbPort"]=$conf["dbPort"][$i+1];#爲要存取dbServer的port
13041
 
13042
					}#if end
13043
 
13044
				$conf["db"]["fastGetDbData"]["WhereColumnName"]=array($childTableLinkColumnName);#用於判斷語句的欄位項目陣列。
13045
				$conf["db"]["fastGetDbData"]["WhereColumnValue"]=array($parentTableLinkColumnValue);#用於判斷語句的欄位數值陣列,若與LIKE搭配,則可以在關鍵自字串的左右名加上「%」符號,這樣就可以搜尋具有該字串的內容。
13046
				#$conf["WhereColumnCombine"]=array("");#用於判斷語句當中需要()起來的判斷式,須爲陣列值,"s"代表「(」,"e"代表「)」 ,若無則須設爲""。
13047
				#$conf["WhereColumnOperator"]=array("");#用於判斷語句的比較符號陣列,可以用的符號有「"="、">"、"<"、"LIKE"、"NOT LIKE"」,預設都爲「=」。
13048
				#$conf["WhereColumnAndOr"]=array("");#用於判斷語句條件之間成立的條件是AND還是OR,須爲陣列值。其數量應爲要判斷的欄位數量減一。
13049
				#$conf["orderItem"]="";#爲排序的項目依據,若要用隨機抽樣,可以用"rand()",可省略。
13050
				#$conf["ascORdesc"]="";#爲要低增還是遞減排序,asc爲遞增;desc爲遞減。
13051
				#$conf["numberStart"]="0";#為從第幾筆開始讀取,預設為0,代筆第一筆。
13052
				#$conf["numLimit"]="30";#為要取幾筆資料,可以省略,省略則表示不限制數目。
13053
				#$conf["groupBy"]=array("");#爲要以哪幾個欄爲作爲分羣的依據(欄位相同的數值僅會取出一筆)。
13054
				$childTable[$j]=db::fastGetDbData($conf["db"]["fastGetDbData"]);
13055
				unset($conf["db"]["fastGetDbData"]);
13056
 
13057
				#如果取得資料失敗
13058
				if($childTable[$j]["status"]=="false"){
13059
 
13060
					#取得錯誤訊息
13061
					$result["error"]=$childTable[$j];
13062
 
13063
					#設置執行結果為 "false"
13064
					$result["status"]="false";
13065
 
13066
					#回傳結果
13067
					return $result;
13068
 
13069
					}#if end
13070
 
13071
				#如果 $childTable[$j]["dataContent"] 有設置,則代表有符合的資料
13072
				if(isset($childTable[$j]["dataContent"])){
13073
 
13074
					#針對每個取得的新欄位
13075
					foreach($childTable[$j]["dataContent"] as $newColumnNameArray=>$newColumnNameValue){
13076
 
13077
						#新增第$j筆的欄位名稱與數值
13078
						$result["parentTable"]["dataContent"][$conf["tableName"][$i+1].".".$newColumnNameArray][$j]=$newColumnNameValue[0];
177 liveuser 13079
 
3 liveuser 13080
						}#foreach end
13081
 
13082
					}#if end
13083
 
13084
				#反之代表 $childTable[$j]["dataContent"] 沒有設置,沒有符合的資料
13085
				else{
13086
 
13087
					#根據每個要取得的欄位名稱
13088
					foreach($conf["columnYouWant"][$i+1] as $newColumnName){
13089
 
13090
						#新增第$j筆的欄位名稱與數值
13091
						$result["parentTable"]["dataContent"][$conf["tableName"][$i+1].".".$newColumnName][$j]="";
13092
 
13093
						}#foreach end
13094
 
13095
					}#else end
177 liveuser 13096
 
3 liveuser 13097
				}#for end
13098
 
13099
			}#for end
13100
 
13101
		#執行到這邊代表執行成功
13102
		#設置執行結果為 "true"
13103
		$result["status"]="true";
13104
 
13105
		#回傳結果
13106
		return $result;
13107
 
13108
		}#function fastGetMutiLinkedDbData end
13109
 
13110
	/*
13111
	#函式說明:
13112
	#透過php來join多張資料表資料,提供各個欄位的包含資料庫、資料表、的資訊,會產生sql inner join的效果,資料會越來越多.
13113
	#回傳結果:
13114
	#$result["status"],執行結果"true"為成功;"false"為執行失敗。
13115
	#$result["error"],錯誤訊息陣列。
13116
	#$reuslt["function"],當前執行的函數
13117
	#$result["content"],爲合併了子資料表欄位的父資料表的內容。
13118
	#$result["content"][$conf["WhereColumnName"][$i]][$dataSetNum]
13119
		#$dataSetNum 爲第$dataSetNum+1筆資料
13120
		#$conf["WhereColumnName"][$i] 爲第 $i+1 個欄位的名稱
13121
	#$result["parentTable"]["dataCount"],爲取得的資料筆數。
13122
	#必填參數:
13123
	#$conf["dbInfo"]["資料庫名稱"],字串陣列,爲要存取的"資料庫名稱"的連線資訊.
13124
	#$conf["dbIfno"]["資料庫名稱"]["dbAddr"],字串,dbServer的位置.
13125
	#$conf["dbInfo"]["資料庫名稱"]["dbAddr"]="";
13126
	#$conf["dbIfno"]["資料庫名稱"]["dbAcct"],字串,dbServer的連線帳號.
13127
	#$conf["dbInfo"]["資料庫名稱"]["dbAcct"]="";	
13128
	#$conf["mainTable"],字串,為 主資料庫.資料表 的名稱,例如 "dbA.dtA".
13129
	$conf["mainTable"]="";
13130
	#$conf["linkColumnName"],二字串陣列,為資料表間相連結的欄位名稱,格式為 array("mergedDb.mergedDt.mergedCol","linkDb.linkDt.linkCol") 就代表當前組好的欄位 mergedDb.mergedDt.mergedCol 跟資料庫 linkDB 表 linkDt 欄位 linkCol 進行資料的配對。
13131
	$conf["linkColumnName"]=array(array(""));	
13132
	#可省略參數:
13133
	#$conf["dbInfo"]["資料庫名稱"]["dbPass"],字串,dbServer的連線密碼.
13134
	#$conf["dbInfo"]["資料庫名稱"]["dbPass"]="";
13135
	#$conf["dbInfo"]["資料庫名稱"]["dbPort"],字串,db連線用的port.
13136
	#$conf["dbInfo"]["資料庫名稱"]["dbPort"]="";
13137
	#$conf["columnYouWant"],字串陣列,為想要的資料表欄位,格式為 "dbName.dtName.colName".
13138
	#$conf["columnYouWant"]=array();
13139
	#$conf["mainDtWhereColName"],字串陣列,用於主表判斷語句的欄位項目陣列.
13140
	#$conf["mainDtWhereColName"]=array("");
13141
	#$conf["mainDtWhereColVal"]=,字串陣列,用於主表判斷語句的欄位項目數值陣列,若與LIKE搭配,則可以在關鍵自字串的左右名加上「%」符號,這樣就可以搜尋具有該字串的內容.
13142
	#$conf["mainDtWhereColVal"]=array("");
13143
	#$conf["mainDtWhereColCombine"],字串陣列,用於主表判斷語句當中需要()起來的判斷式,須爲陣列值,"s"代表「(」,"e"代表「)」 ,若無則須設爲""。
13144
	#$conf["mainDtWhereColCombine"]=array("");
13145
	#$conf["mainWhereColumnOperator"],字串陣列,用於判斷語句的比較符號陣列,可以用的符號有「"="、">"、"<"、"LIKE"、"NOT LIKE"」,預設都爲「=」。
13146
	#$conf["mainWhereColumnOperator"]=array("");
13147
	#$conf["mainWhereColumnAndOr"],字串陣列,用於判斷語句條件之間成立的條件是AND還是OR,須爲陣列值。其數量應爲要判斷的欄位數量減一。
13148
	#$conf["mainWhereColumnAndOr"]=array("");
13149
	#$conf["mainWhereIn"],字串陣列,為每個in語句的內容,特定欄位數值等於陣列元素之一。array(array("colName",array("a","b","c")));代表欄位colName的值為a,b,c三者之一.
13150
	#$conf["mainWhereIn"]=array(array("colName",array("a","b","c")));
13151
	#$conf["mainWhereNotIn"],字串陣列,為每個not in語句的內容,array(array("colName",array("a","b","c")));代表欄位colName的值不為a,b,c三者之一.
13152
	#$conf["mainWhereNotIn"]=array(array("colName",array("a","b","c")));
13153
	#$conf["mainNumberStart"],字串,從第幾筆開始讀取,預設為"0",代筆第一筆。
13154
	#$conf["mainNumberStart"]="0";
13155
	#$conf["mainNumLimit"],字串,要取幾筆資料,可以省略,省略則表示不限制數目.
13156
	#$conf["mainNumLimit"]="30";
13157
	#$conf["mainGroupBy"],字串陣列,爲要以哪幾個欄爲作爲分羣的依據(欄位相同的數值僅會取出一筆)。
13158
	#$conf["mainGroupBy"]=array();
13159
	#$conf["mainOrderItem"],字串,組好的資料的排序項目依據
13160
	#$conf["mainOrderItem"]="";
13161
	#$conf["mainAscORdesc"],字串,組好的資料要低增還是遞減排序,asc爲遞增;desc爲遞減,預設不做處理.
13162
	#$conf["mainAscORdesc"]="";	
13163
	#參考資料:
13164
	#無.
13165
	#備註:
13166
	#無.
13167
	*/
13168
	public static function joinByPHP(&$conf=array()){
13169
 
13170
		#初始化要回傳的內容
13171
		$result=array();
13172
 
13173
		#取得當前執行的函數名稱
13174
		$result["function"]=__FUNCTION__;
13175
 
13176
		#如果 $conf 不為陣列
13177
		if(gettype($conf)!="array"){
13178
 
13179
			#設置執行失敗
13180
			$result["status"]="false";
13181
 
13182
			#設置執行錯誤訊息
13183
			$result["error"][]="\$conf變數須為陣列形態";
13184
 
13185
			#如果傳入的參數為 null
13186
			if($conf==null){
13187
 
13188
				#設置執行錯誤訊息
13189
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
13190
 
13191
				}#if end
13192
 
13193
			#回傳結果
13194
			return $result;
13195
 
13196
			}#if end
13197
 
13198
		#檢查參數
13199
		#函式說明:
13200
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
13201
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13202
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
13203
		#$result["function"],當前執行的函式名稱.
13204
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
13205
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
13206
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
13207
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
13208
		#必填參數:
13209
		#$conf["variableCheck.checkArguments"]["varInput"],陣列變數,要檢查的陣列變數.
13210
		$conf["variableCheck.checkArguments"]["varInput"]=&$conf;
13211
		#$conf["variableCheck.checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
13212
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableName"]=array("dbInfo","mainTable","linkColumnName");
13213
		#$conf["variableCheck.checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
13214
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableType"]=array("array","string","array");
13215
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
13216
		$conf["variableCheck.checkArguments"]["referenceVarKey"]="variableCheck.checkArguments";
13217
		#可省略參數:
13218
		#$conf["variableCheck.checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"false"。
13219
		#$conf["variableCheck.checkArguments"]["canBeEmptyString"]="false";
13220
		#$conf["variableCheck.checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
13221
		$conf["variableCheck.checkArguments"]["skipableVariableName"]=array("columnYouWant","mainDtWhereColName","mainDtWhereColVal","mainDtWhereColCombine","mainWhereColumnOperator","mainWhereColumnAndOr","mainWhereIn","mainWhereNotIn","mainNumberStart","mainNumLimit","mainGroupBy","mainOrderItem","mainAscORdesc");
13222
		#$conf["variableCheck.checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
13223
		$conf["variableCheck.checkArguments"]["skipableVariableType"]=array("array","array","array","array","array","array","array","array","string","string","array","string","string");
13224
		#$conf["variableCheck.checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定.
13225
		#$conf["variableCheck.checkArguments"]["skipableVarDefaultValue"]=array("");
13226
		$checkResult=variableCheck::checkArguments($conf["variableCheck.checkArguments"]);
13227
		unset($conf["variableCheck.checkArguments"]);
13228
 
13229
		#如果檢查出錯
13230
		if($checkResult["status"]=="false"){
13231
 
13232
			#設置錯誤識別
13233
			$result["status"]="false";
13234
 
13235
			#設置錯誤訊息
13236
			$result["error"]=$checkResult;
13237
 
13238
			#回傳結果
13239
			return $result;
13240
 
13241
			}#if end
13242
 
13243
		#如果檢查出錯
13244
		if($checkResult["passed"]=="false"){
13245
 
13246
			#設置錯誤識別
13247
			$result["status"]="false";
13248
 
13249
			#設置錯誤訊息
13250
			$result["error"]=$checkResult;
13251
 
13252
			#回傳結果
13253
			return $result;
13254
 
13255
			}#if end
13256
 
13257
		#取得 $conf["mainTable"] 的資料
13258
 
13259
		#檢查主表是否為 db.dt 的
13260
		$foundDot=strpos($conf["mainTable"],'.');
13261
 
13262
		#如果不是
13263
		if(!$foundDot){
13264
 
13265
			#設置錯誤識別
13266
			$result["status"]="false";
13267
 
13268
			#設置錯誤訊息
13269
			$result["error"][]="參數 \$conf[\"mainTable\"] 必須為 資料庫名稱.資料表名稱";
13270
 
13271
			#回傳結果
13272
			return $result;
13273
 
13274
			}#if end
13275
 
13276
		#反之
13277
		else{
13278
 
13279
			#用 . 去切割字串
13280
			$dbdtsplitedstr=explode('.',$conf["mainTable"]);
13281
 
13282
			#如果切割出來不等於兩段
13283
			if(count($dbdtsplitedstr)!==2){
13284
 
13285
				#設置錯誤識別
13286
				$result["status"]="false";
13287
 
13288
				#設置錯誤訊息
13289
				$result["error"][]="參數 \$conf[\"mainTable\"] 必須為 資料庫名稱.資料表名稱";
13290
 
13291
				#回傳結果
13292
				return $result;
13293
 
13294
				}#if end
13295
 
13296
			#取得 mainTable 的 db name
13297
			$mainDb=&$dbdtsplitedstr[0];
13298
 
13299
			#取得 mainTable 的名稱
13300
			$mainDt=&$dbdtsplitedstr[1];
13301
 
13302
			}#else end
13303
 
13304
		#若主資料表連線參數不存在
13305
		if(!isset($conf["dbInfo"][$mainDb])){
13306
 
13307
			#設置錯誤識別
13308
			$result["status"]="false";
13309
 
13310
			#設置錯誤訊息
13311
			$result["error"][]="參數 \$conf[\"dbInfo\"][$mainDb] 必須提供";
13312
 
13313
			#回傳結果
13314
			return $result;
13315
 
13316
			}#if end
13317
 
13318
		#檢查主表的參數
13319
		#函式說明:
13320
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
13321
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13322
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
13323
		#$result["function"],當前執行的函式名稱.
13324
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
13325
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
13326
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
13327
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
13328
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
13329
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
13330
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
13331
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
13332
		#必填參數:
13333
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
13334
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf["dbInfo"][$mainDb];	
13335
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
13336
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
13337
		#可以省略的參數:
13338
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
13339
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("dbAddr","dbAcct");
13340
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
13341
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
13342
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
13343
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
13344
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
13345
		#$conf["canNotBeEmpty"]=array();
13346
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
13347
		#$conf["canBeEmpty"]=array();
13348
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
13349
		$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("dbPass","dbPort");
13350
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
13351
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("dbPass","dbPort");
13352
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
13353
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
13354
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
13355
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null);
13356
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
13357
		#$conf["disallowAllSkipableVarIsEmpty"]="";
13358
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
13359
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
13360
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
13361
		#$conf["arrayCountEqualCheck"][]=array();
13362
		#參考資料:
13363
		#array_keys=>http://php.net/manual/en/function.array-keys.php
13364
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
13365
		unset($conf["variableCheck::checkArguments"]);
13366
 
13367
		#如果執行失敗
13368
		if($checkArguments["status"]==="false"){
13369
 
13370
			#設置錯誤識別
13371
			$result["status"]="false";
13372
 
13373
			#設置錯誤訊息
13374
			$result["error"]=$checkArguments;
13375
 
13376
			#回傳結果
13377
			return $result;
13378
 
13379
			}#if end
13380
 
13381
		#如果檢查不通過
13382
		if($checkArguments["passed"]==="false"){
13383
 
13384
			#設置錯誤識別
13385
			$result["status"]="false";
13386
 
13387
			#設置錯誤訊息
13388
			$result["error"]=$checkArguments;
13389
 
13390
			#回傳結果
13391
			return $result;
13392
 
13393
			}#if end
13394
 
13395
		#函式說明:
13396
		#一次取得資料庫、表的資料
13397
		#回傳結果:
13398
		#$result["status"],執行結果"true"為成功;"false"為執行失敗。
13399
		#$result["error"],錯誤訊息陣列。
13400
		#$result["function"],當前執行的漢書名稱.
13401
		#$result["dataColumnName"],抓取的資料欄位名稱陣列.
13402
			#$result["dataColumnName"][$i]代表第$i+1個欄位名稱
13403
		#$result["dataContent"],爲資料的內容。
13404
		#$result["dataContent"][$conf["WhereColumnName"][$i]][$dataSetNum]
13405
			#$dataSetNum 爲第$dataSetNum+1筆資料
13406
			#$conf["WhereColumnName"][$i] 爲第 $i+1 個欄位的名稱
13407
		#$result["dataCount"],爲取得的資料筆數。
13408
		#$result["sql"],執行的sql字串.
13409
		#必填參數:
13410
		$conf["db::fastGetDbData"]["dbAddress"]=$conf["dbInfo"][$mainDb]["dbAddr"];#爲dbServer的位置。
13411
		$conf["db::fastGetDbData"]["dbAccount"]=$conf["dbInfo"][$mainDb]["dbAcct"];#爲登入dbServer的帳號。
13412
		$conf["db::fastGetDbData"]["dbName"]=$mainDb;#爲要存取的資料庫名稱
13413
		$conf["db::fastGetDbData"]["tableName"]=$mainDt;#爲要存取的資料表名稱
13414
		$conf["db::fastGetDbData"]["columnYouWant"]=array("*");#你想要的欄位!,若設為「array("*")」則代表全部欄位.
13415
		#可省略參數:
13416
 
13417
		#如果有給予連線密碼
13418
		if(isset($conf["dbInfo"][$mainDb]["dbPass"])){
13419
 
13420
			$conf["db::fastGetDbData"]["dbPassword"]=$conf["dbInfo"][$mainDb]["dbPass"];#爲要存取dbServer的密碼
13421
 
13422
			}#if end
13423
 
13424
		#如果有給予連線port
13425
		if(isset($conf["dbInfo"][$mainDb]["dbPort"])){
13426
 
13427
			$conf["db::fastGetDbData"]["dbPort"]=$conf["dbInfo"][$mainDb]["dbPort"];#爲要存取dbServer的port
13428
 
13429
			}#if end
13430
 
13431
		#如果有設置 $conf["mainDtWhereColName"]
13432
		if(isset($conf["mainDtWhereColName"])){
13433
 
13434
			#設置參數
13435
			$conf["db::fastGetDbData"]["WhereColumnName"]=$conf["mainDtWhereColName"];
13436
 
13437
			}#if end
13438
 
13439
		#如果有設置 $conf["mainDtWhereColVal"]
13440
		if(isset($conf["mainDtWhereColVal"])){
13441
 
13442
			#設置參數
13443
			$conf["db::fastGetDbData"]["WhereColumnValue"]=$conf["mainDtWhereColVal"];#用於判斷語句的欄位數值陣列,若與LIKE搭配,則可以在關鍵自字串的左右名加上「%」符號,這樣就可以搜尋具有該字串的內容。
13444
 
13445
			}#if end
13446
 
13447
		#如果有設置 $conf["mainDtWhereColCombine"]
13448
		if(isset($conf["mainDtWhereColCombine"])){
13449
 
13450
			#設置參數
13451
			$conf["db::fastGetDbData"]["WhereColumnCombine"]=$conf["mainDtWhereColCombine"];#用於判斷語句當中需要()起來的判斷式,須爲陣列值,"s"代表「(」,"e"代表「)」 ,若無則須設爲""。
13452
 
13453
			}#if end
13454
 
13455
		#如果有設置 $conf["mainWhereColumnOperator"]
13456
		if(isset($conf["mainWhereColumnOperator"])){
13457
 
13458
			#設置參數
13459
			$conf["db::fastGetDbData"]["WhereColumnOperator"]=$conf["mainWhereColumnOperator"];#用於判斷語句的比較符號陣列,可以用的符號有「"="、"!="、">"、"<"、"LIKE"、"NOT LIKE"」,預設都爲「=」。
13460
 
13461
			}#if end
13462
 
13463
		#如果有設置 $conf["mainWhereColumnAndOr"]
13464
		if(isset($conf["mainWhereColumnAndOr"])){
13465
 
13466
			#設置參數
13467
			$conf["db::fastGetDbData"]["WhereColumnAndOr"]=$conf["mainWhereColumnAndOr"];#用於判斷語句條件之間成立的條件是AND還是OR,須爲陣列值。其數量應爲要判斷的欄位數量減一。
13468
 
13469
			}#if end
13470
 
13471
		#如果有設置 $conf["mainWhereIn"]
13472
		if(isset($conf["mainWhereIn"])){
13473
 
13474
			#$conf["whereIn"],二維字串陣列,為每個in語句的內容,特定欄位數值等於陣列元素之一。array(array("colName",array("a","b","c")));代表欄位colName的值為a,b,c三者之一.
13475
			$conf["db::fastGetDbData"]["whereIn"]=$conf["mainWhereIn"];
13476
 
13477
			}#if end
13478
 
13479
		#如果有設置 $conf["mainWhereNotIn"]
13480
		if(isset($conf["mainWhereNotIn"])){
13481
 
13482
			#設置參數
13483
			#$conf["whereNotIn"],二維字串陣列,為每個not in語句的內容,array(array("colName",array("a","b","c")));代表欄位colName的值不為a,b,c三者之一.
13484
			$conf["db::fastGetDbData"]["whereNotIn"]=$conf["mainWhereNotIn"];
13485
 
13486
			}#if end
13487
 
13488
		#如果有設置 $conf["mainNumberStart"]
13489
		if(isset($conf["mainNumberStart"])){
13490
 
13491
			#設置參數
13492
			$conf["db::fastGetDbData"]["numberStart"]=$conf["mainNumberStart"];#為從第幾筆開始讀取,預設為0,代筆第一筆。
13493
 
13494
			}#if end
13495
 
13496
		#如果有設置 $conf["mainNumLimit"]
13497
		if(isset($conf["mainNumLimit"])){
13498
 
13499
			#設置參數
13500
			$conf["db::fastGetDbData"]["numLimit"]=$conf["mainNumLimit"];#為要取幾筆資料,可以省略,省略則表示不限制數目。
13501
 
13502
			}#if end
13503
 
13504
		#如果有設置 $conf["mainGroupBy"]
13505
		if(isset($conf["mainGroupBy"])){
13506
 
13507
			#設置參數
13508
			$conf["db::fastGetDbData"]["groupBy"]=$conf["mainGroupBy"];#爲要以哪幾個欄爲作爲分羣的依據(欄位相同的數值僅會取出一筆)。
13509
 
13510
			}#if end
13511
 
13512
		#如果有設置 $conf["mainOrderItem"]
13513
		if(isset($conf["mainOrderItem"])){
13514
 
13515
			#設置參數
13516
			$conf["db::fastGetDbData"]["orderItem"]=$conf["mainOrderItem"];#爲排序的項目依據,若要用隨機抽樣,可以用"rand()",可省略。
13517
 
13518
			}#if end
13519
 
13520
		#如果有設置 $conf["mainAscORdesc"]
13521
		if(isset($conf["mainAscORdesc"])){
13522
 
13523
			#設置參數
13524
			#$conf["mainAscORdesc"],字串,組好的資料要低增還是遞減排序,asc爲遞增;desc爲遞減,預設不做處理.
13525
			$conf["db::fastGetDbData"]["mainAscORdesc"]=$conf["mainAscORdesc"];
13526
 
13527
			}#if end
13528
 
13529
		$fastGetDbData=db::fastGetDbData($conf["db::fastGetDbData"]);
13530
		unset($conf["db::fastGetDbData"]);
13531
 
13532
		#如果執行失敗
13533
		if($fastGetDbData["status"]==="false"){
13534
 
13535
			#設置錯誤識別
13536
			$result["status"]="false";
13537
 
13538
			#設置錯誤訊息
13539
			$result["error"]=$fastGetDbData;
13540
 
13541
			#回傳結果
13542
			return $result;
13543
 
13544
			}#if end
13545
 
13546
		#var_dump($fastGetDbData);
13547
 
13548
		#初始化儲存合併好的資料
13549
		$merged=array();
13550
 
13551
		#如果該存在的變數不存在
13552
		if(!isset($fastGetDbData["dataColumnName"])){
13553
 
13554
			#設置錯誤識別
13555
			$result["status"]="false";
13556
 
13557
			#設置錯誤訊息
13558
			$result["error"]=$fastGetDbData;
13559
 
13560
			#回傳結果
13561
			return $result;
13562
 
13563
			}#if end
13564
 
13565
		#針對每個欄位
13566
		foreach($fastGetDbData["dataColumnName"] as $colName){
13567
 
13568
			#將當前資料的欄位用 dbName.dtName.dataColName 儲存
13569
			$merged[$mainDb.".".$mainDt.".".$colName]=$fastGetDbData["dataContent"][$colName];
13570
 
13571
			}#foreach end
13572
 
13573
		#移除變數節省記憶體
13574
		unset($fastGetDbData);
13575
 
13576
		#取得陣列元素數目
13577
		$mergedCount=count($merged);
13578
 
13579
		#移除以數字為欄位索引的變數
13580
		for($i=0;$i<$mergedCount/2;$i++){
13581
 
13582
			#移除索引
13583
			unset($merged[$i]);
13584
 
13585
			}#for end
13586
 
13587
		#var_dump($merged);exit;
13588
 
13589
		#針對每個 $conf["linkColumnName"] 
13590
		foreach($conf["linkColumnName"] as $linkCondition){
13591
 
13592
			#如果不是陣列
13593
			if(gettype($linkCondition)!=="array"){
13594
 
13595
				#設置錯誤識別
13596
				$result["status"]="false";
13597
 
13598
				#設置錯誤訊息
13599
				$result["error"][]="參數 linkColumnName 的陣列元素應該為陣列.";
13600
 
13601
				#回傳結果
13602
				return $result;
13603
 
13604
				}#if end
13605
 
13606
			#如果數量不為2
13607
			if(count($linkCondition)!==2){
13608
 
13609
				#設置錯誤識別
13610
				$result["status"]="false";
13611
 
13612
				#設置錯誤訊息
13613
				$result["error"][]="參數 linkColumnName 的陣列元素應為有兩個元素的陣列.";
13614
 
13615
				#回傳結果
13616
				return $result;
13617
 
13618
				}#if end
13619
 
13620
			#取得原始欄位的名稱
13621
			$oriCol=&$linkCondition[0];	
13622
 
13623
			#如果用來比對的原欄位不存在
13624
			if(!isset($merged[$oriCol])){
13625
 
13626
				#設置錯誤識別
13627
				$result["status"]="false";
13628
 
13629
				#設置錯誤訊息
13630
				$result["error"][]="用來比對的原始資料沒有欄位 「".$oriCol."」 存在.";
13631
 
13632
				#回傳結果
13633
				return $result;
13634
 
13635
				}#if end
13636
 
13637
			#取得要增加的欄位名稱
13638
			$newCol=&$linkCondition[1];	
13639
 
13640
			#檢查增加的欄位名稱是否有 "."
13641
			$foundDot=strpos($newCol,'.');
13642
 
13643
			#如果不是
13644
			if(!$foundDot){
13645
 
13646
				#設置錯誤識別
13647
				$result["status"]="false";
13648
 
13649
				#設置錯誤訊息
13650
				$result["error"][]="參數 linkColumnName 的欄位格式 ".$newCol." 必須為 資料庫名稱.資料表名稱.資料欄位名稱";
13651
 
13652
				#回傳結果
13653
				return $result;
13654
 
13655
				}#if end
13656
 
13657
			#反之
13658
			else{
13659
 
13660
				#用 . 去切割字串
13661
				$dbdtsplitedstr=explode('.',$newCol);
13662
 
13663
				#如果切割出來不等於兩段
13664
				if(count($dbdtsplitedstr)!==3){
13665
 
13666
					#設置錯誤識別
13667
					$result["status"]="false";
13668
 
13669
					#設置錯誤訊息
13670
					$result["error"][]="參數 linkColumnName 的欄位格式 ".$newCol." 必須為 資料庫名稱.資料表名稱.資料欄位名稱";
13671
 
13672
					#回傳結果
13673
					return $result;
13674
 
13675
					}#if end
13676
 
13677
				#取得 linkTable 的 db name
13678
				$linkDb=&$dbdtsplitedstr[0];
13679
 
13680
				#取得 linkTable 的名稱
13681
				$linkDt=&$dbdtsplitedstr[1];
13682
 
13683
				#取得 linkCol 的名稱
13684
				$linkCol=&$dbdtsplitedstr[2];
13685
 
13686
				}#else end
13687
 
13688
			#檢查次表的參數
13689
			#函式說明:
13690
			#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
13691
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13692
			#$reuslt["error"],執行不正常結束的錯訊息陣列.
13693
			#$result["function"],當前執行的函式名稱.
13694
			#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
13695
			#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
13696
			#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
13697
			#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
13698
			#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
13699
			#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
13700
			#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
13701
			#$result["notNeedVar"],字串陣列,多餘的參數名稱.
13702
			#必填參數:
13703
			#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
13704
			$conf["variableCheck::checkArguments"]["varInput"]=&$conf["dbInfo"][$linkDb];	
13705
			#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
13706
			$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
13707
			#可以省略的參數:
13708
			#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
13709
			$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("dbAddr","dbAcct");
13710
			#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
13711
			$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
13712
			#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
13713
			$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
13714
			#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
13715
			#$conf["canNotBeEmpty"]=array();
13716
			#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
13717
			#$conf["canBeEmpty"]=array();
13718
			#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
13719
			$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("dbPass");
13720
			#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
13721
			$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("dbPass");
13722
			#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
13723
			$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
13724
			#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
13725
			$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null);
13726
			#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
13727
			#$conf["disallowAllSkipableVarIsEmpty"]="";
13728
			#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
13729
			#$conf["disallowAllSkipableVarIsEmptyArray"]="";
13730
			#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
13731
			#$conf["arrayCountEqualCheck"][]=array();
13732
			#參考資料:
13733
			#array_keys=>http://php.net/manual/en/function.array-keys.php
13734
			$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
13735
			unset($conf["variableCheck::checkArguments"]);
13736
 
13737
			#var_dump($checkArguments);
13738
			#exit;
13739
 
13740
			#如果執行失敗
13741
			if($checkArguments["status"]==="false"){
13742
 
13743
				#設置錯誤識別
13744
				$result["status"]="false";
13745
 
13746
				#設置錯誤訊息
13747
				$result["error"]=$checkArguments;
13748
 
13749
				#回傳結果
13750
				return $result;
13751
 
13752
				}#if end
13753
 
13754
			#如果檢查不通過
13755
			if($checkArguments["passed"]==="false"){
13756
 
13757
				#設置錯誤識別
13758
				$result["status"]="false";
13759
 
13760
				#設置錯誤訊息
13761
				$result["error"]=$checkArguments;
13762
 
13763
				#回傳結果
13764
				return $result;
13765
 
13766
				}#if end
13767
 
13768
			#初始化新合併過後的資料
13769
			$newMerged=&$merged;
13770
 
13771
			#初始化儲存既有的欄位名稱
13772
			$mergedColName=array_keys($merged);
13773
 
13774
			#取得既有的欄位的數量
13775
			$mergedColCount=count($mergedColName);		
13776
 
13777
			#主表有幾筆資料就執行幾次
13778
			foreach($merged[$oriCol] as $index=>$mainColVal){
13779
 
13780
				#函式說明:
13781
				#一次取得資料庫、表的資料
13782
				#回傳結果:
13783
				#$result["status"],執行結果"true"為成功;"false"為執行失敗。
13784
				#$result["error"],錯誤訊息陣列。
13785
				#$result["function"],當前執行的漢書名稱.
13786
				#$result["dataColumnName"],抓取的資料欄位名稱陣列.
13787
					#$result["dataColumnName"][$i]代表第$i+1個欄位名稱
13788
				#$result["dataContent"],爲資料的內容。
13789
				#$result["dataContent"][$conf["WhereColumnName"][$i]][$dataSetNum]
13790
					#$dataSetNum 爲第$dataSetNum+1筆資料
13791
					#$conf["WhereColumnName"][$i] 爲第 $i+1 個欄位的名稱
13792
				#$result["dataCount"],爲取得的資料筆數。
13793
				#$result["sql"],執行的sql字串.
13794
				#必填參數:
13795
				$conf["db::fastGetDbData"]["dbAddress"]=$conf["dbInfo"][$linkDb]["dbAddr"];#爲dbServer的位置。
13796
				$conf["db::fastGetDbData"]["dbAccount"]=$conf["dbInfo"][$linkDb]["dbAcct"];#爲登入dbServer的帳號。
13797
				$conf["db::fastGetDbData"]["dbName"]=$linkDb;#爲要存取的資料庫名稱
13798
				$conf["db::fastGetDbData"]["tableName"]=$linkDt;#爲要存取的資料表名稱
13799
				$conf["db::fastGetDbData"]["columnYouWant"]=array("*");#你想要的欄位!,若設為「array("*")」則代表全部欄位.
13800
				#可省略參數:
13801
 
13802
				#如果有設置次表的密碼
13803
				if(isset($conf["dbInfo"][$linkDb]["dbPass"])){
13804
 
13805
					$conf["db::fastGetDbData"]["dbPassword"]=$conf["dbInfo"][$linkDb]["dbPass"];#爲要存取dbServer的密碼
13806
 
13807
					}#if end			
13808
 
13809
				$conf["db::fastGetDbData"]["WhereColumnName"]=array($linkCol);#用於判斷語句的欄位項目陣列。
13810
				$conf["db::fastGetDbData"]["WhereColumnValue"]=array($mainColVal);#用於判斷語句的欄位數值陣列,若與LIKE搭配,則可以在關鍵自字串的左右名加上「%」符號,這樣就可以搜尋具有該字串的內容。
13811
				#$conf["WhereColumnCombine"]=array("");#用於判斷語句當中需要()起來的判斷式,須爲陣列值,"s"代表「(」,"e"代表「)」 ,若無則須設爲""。
13812
				#$conf["WhereColumnOperator"]=array("");#用於判斷語句的比較符號陣列,可以用的符號有「"="、"!="、">"、"<"、"LIKE"、"NOT LIKE"」,預設都爲「=」。
13813
				#$conf["WhereColumnAndOr"]=array("");#用於判斷語句條件之間成立的條件是AND還是OR,須爲陣列值。其數量應爲要判斷的欄位數量減一。
13814
				#$conf["whereIn"],二維字串陣列,為每個in語句的內容,特定欄位數值等於陣列元素之一。array(array("colName",array("a","b","c")));代表欄位colName的值為a,b,c三者之一.
13815
				#$conf["whereIn"]=array(array("colName",array("a","b","c")));
13816
				#$conf["whereNotIn"],二維字串陣列,為每個not in語句的內容,array(array("colName",array("a","b","c")));代表欄位colName的值不為a,b,c三者之一.
13817
				#$conf["whereNotIn"]=array(array("colName",array("a","b","c")));
13818
				#$conf["orderItem"]="";#爲排序的項目依據,若要用隨機抽樣,可以用"rand()",可省略。
13819
				#$conf["ascORdesc"]="";#爲要低增還是遞減排序,asc爲遞增;desc爲遞減。
13820
				#$conf["numberStart"]="0";#為從第幾筆開始讀取,預設為0,代筆第一筆。
13821
				#$conf["db::fastGetDbData"]["numLimit"]="1";#為要取幾筆資料,可以省略,省略則表示不限制數目。
13822
				#$conf["groupBy"]=array("");#爲要以哪幾個欄爲作爲分羣的依據(欄位相同的數值僅會取出一筆)。
13823
				$fastGetDbData=db::fastGetDbData($conf["db::fastGetDbData"]);
13824
				unset($conf["db::fastGetDbData"]);
13825
 
13826
				#如果query失敗
13827
				if($fastGetDbData["status"]==="false"){
13828
 
13829
					#設置執行失敗
13830
					$result["status"]="false";
13831
 
13832
					#設置錯誤訊息
13833
					$result["error"]=$fastGetDbData;
13834
 
13835
					#回傳結果;
13836
					return $result;
13837
 
13838
					}#if end
13839
 
13840
				#如果如果沒有符合的資料
13841
				if($fastGetDbData["dataCount"]===0){
13842
 
13843
					#如果有欄位名稱存在
13844
					if(isset($fastGetDbData["dataColumnName"])){
13845
 
13846
						#次表有幾個欄位就執行幾次
13847
						foreach($fastGetDbData["dataColumnName"] as $linkedColName){
13848
 
13849
							#給予NULL
13850
							$newMerged[$linkDb.".".$linkDt.".".$linkedColName][$index]=NULL;
13851
 
13852
							}#foreach end					
13853
 
13854
						}#if end
13855
 
13856
					}#if end
13857
 
13858
				#反之有資料
13859
				else{
13860
 
13861
					#次表有幾個欄位就執行幾次
13862
					foreach($fastGetDbData["dataColumnName"] as $linkedColName){
13863
 
13864
						#設置新的欄位資料
13865
						$newMerged[$linkDb.".".$linkDt.".".$linkedColName][$index]=$fastGetDbData["dataContent"][$linkedColName][0];
13866
 
13867
						}#foreach end
13868
 
13869
					#有幾筆資料就執行幾次
13870
					for($i=1;$i<$fastGetDbData["dataCount"];$i++){
13871
 
13872
						#取得資新料的索引
13873
						$newMergedDataIndex=count($newMerged[$mergedColName[0]]);
13874
 
13875
						#有幾個欄位就執行幾次
13876
						for($j=0;$j<$mergedColCount;$j++){
13877
 
13878
							#複製既有的欄位資料
13879
							$newMerged[$mergedColName[$j]][$newMergedDataIndex]=$newMerged[$mergedColName[$j]][$index];
13880
 
13881
							}#for end							
13882
 
13883
						#次表有幾個欄位就執行幾次
13884
						foreach($fastGetDbData["dataColumnName"] as $linkedColName){	
13885
 
13886
							#加上新的欄位資料
13887
							$newMerged[$linkDb.".".$linkDt.".".$linkedColName][$newMergedDataIndex]=$fastGetDbData["dataContent"][$linkedColName][$i];
13888
 
13889
							}#foreach end
13890
 
13891
						}#for end					
13892
 
13893
					}#else end
13894
 
13895
				}#foreach end
13896
 
13897
			}#foreach end
13898
 
13899
		#如果有設置要的欄位
13900
		if(isset($conf["columnYouWant"])){
13901
 
13902
			#初始化儲存僅需要的欄位
13903
			$filteredCol=array();
13904
 
13905
			#依照每個需要的欄位
13906
			foreach($conf["columnYouWant"] as $colYouWant){
13907
 
13908
				#如果要的欄位不存在
13909
				if(!isset($newMerged[$colYouWant])){
13910
 
13911
					#設置執行不正常;  
13912
					$result["status"]="false";
13913
 
13914
					#設置錯誤訊息
13915
					$result["error"][]="欄位 ".$colYouWant." 不存在於查詢後的結果!";
13916
 
13917
					#回傳結果
13918
					return $result;
13919
 
13920
					}#if end
13921
 
13922
				#取得欄位內容
13923
				$filteredCol[$colYouWant]=&$newMerged[$colYouWant];
13924
 
13925
				}#foreach end
13926
 
13927
			#置換成篩選過後的欄位資訊
13928
			$newMerged=$filteredCol;
13929
 
13930
			}#if end
13931
 
13932
		#設置執行正常
13933
		$result["status"]="true";
13934
 
13935
		#設置join完的資料;
13936
		$result["content"]=$merged;
13937
 
13938
		#回傳結果
13939
		return $result;
13940
 
13941
		}#function joinByPHP end
13942
 
13943
	/*
13944
	#函式說明:
13945
	#取得該資料表總共有幾筆資料
13946
	#回傳變數:
13947
	#$result["status"],爲執行是否正常,若爲"true"則成功,若爲"false"則表示失敗了
13948
	#$result["function"],當前執行的函數名稱
13949
	#$result["error"],錯誤訊息
13950
	#$result["dataCount"],資料表裏面的資料筆數。
13951
	#必填參數:
13952
	#$conf["dbAddress"],字串,爲mysql-Server的位置.
13953
	$conf["dbAddress"]=$dbAddress;
13954
	#$conf["dbAccount"]字串,爲用於連入mysql-Server時要使用的帳號.
13955
	$conf["dbAccount"]=$dbAccount;
13956
	#$conf["selectedDataBaseName"],字串,要選取的資料庫名稱	
13957
	$conf["selectedDataBaseName"]=$dbName;
13958
	#$conf["selectedDataTableName"],字串,為要計算的對象資料表
13959
	$conf["selectedDataTableName"]="";#為要計算的對象資料表
13960
	#可省略參數:
13961
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼.
13962
	#$conf["dbPassword"]=$dbPassword;
13963
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,可省略,若省略則代表用預設的 port 3306.
13964
	#$conf["dbPort"]=$dbPort;
13965
	#參考資料:
13966
	#無.
13967
	#備註:
13968
	#無.
13969
	*/	
13970
	public static function getDataCountsInTable($conf){
13971
 
13972
		#初始化要回傳的內容
13973
		$result=array();
13974
 
13975
		#取得當前執行的函數名稱
13976
		$result["function"]=__FUNCTION__;
13977
 
13978
		#如果 $conf 不為陣列
13979
		if(gettype($conf)!="array"){
13980
 
13981
			#設置執行失敗
13982
			$result["status"]="false";
13983
 
13984
			#設置執行錯誤訊息
13985
			$result["error"][]="\$conf變數須為陣列形態";
13986
 
13987
			#如果傳入的參數為 null
13988
			if($conf==null){
13989
 
13990
				#設置執行錯誤訊息
13991
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
13992
 
13993
				}#if end
13994
 
13995
			#回傳結果
13996
			return $result;
13997
 
13998
			}#if end
13999
 
14000
		#檢查參數
14001
		#函式說明:
14002
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
14003
		#回傳結果:
14004
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14005
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
14006
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
14007
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
14008
		#必填參數:
14009
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
14010
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("dbAddress","dbPassword","selectedDataBaseName","selectedDataTableName");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
14011
		#可省略參數:
14012
		#$conf["variableCheck"]["isexistMuti"]["variableType"]=array();#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
14013
		#$conf["variableCheck"]["isexistMuti"]"canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
14014
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
14015
		unset($conf["variableCheck"]["isexistMuti"]);
14016
 
14017
		#如果 $checkResult["status"] 等於 "false"
14018
		if($checkResult["status"]=="false"){
14019
 
14020
			#設置錯識別
14021
			$result["status"]="false";
14022
 
14023
			#設置錯誤訊息
14024
			$result["error"]=$checkResult;
14025
 
14026
			#回傳結果
14027
			return $result;
14028
 
14029
			}#if end
14030
 
14031
		#如果 $checkResult["passed"] 等於 "false"
14032
		if($checkResult["passed"]=="false"){
14033
 
14034
			#設置錯識別
14035
			$result["passed"]="false";
14036
 
14037
			#設置錯誤訊息
14038
			$result["error"]=$checkResult;
14039
 
14040
			#回傳結果
14041
			return $result;
14042
 
14043
			}#if end
14044
 
14045
		#函式說明:
14046
		#執行mysql指令
14047
		#回傳結果::
14048
		#$result["status"],"true"為執行成功;"false"為執行失敗。
14049
		#$result["error"],錯誤訊息的陣列
14050
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
14051
		#$result["queryString"],mysql查詢的語言
14052
		#查詢號的解果,需要解析。
14053
		#必填參數:
14054
		$conf["db"]["execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
14055
		$conf["db"]["execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
14056
		$conf["db"]["execMysqlQuery"]["dbSql"]="select count(*) from ".$conf["selectedDataBaseName"].".".$conf["selectedDataTableName"]." ;";#要執行sql語法
14057
		#可省略參數:
14058
 
14059
		#如果 $conf["dbPassword"] 有設定
14060
		if(isset($conf["dbPassword"])){
14061
 
14062
			$conf["db"]["execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
14063
 
14064
			}#if end
14065
 
14066
		#如果 $conf["dbPort"] 有設定
14067
		if(isset($conf["dbPort"])){
14068
 
14069
			$conf["db"]["execMysqlQuery"]["dbPort"]=$conf["dbPort"];#爲連線到mysql-Server時要使用的port,可省略,若省略則代表預設的 port.
14070
 
14071
			}#if end
14072
 
14073
		#執行查尋	
14074
		$countResult=db::execMysqlQuery($conf["db"]["execMysqlQuery"]);
14075
		unset($conf["db"]["execMysqlQuery"]);
14076
 
14077
		#如果執行失敗
14078
		if($countResult["status"]=="false"){
14079
 
14080
			#設置錯誤識別
14081
			$result["status"]="false";
14082
 
14083
			#設置錯誤訊息
14084
			$result["error"]=$countResult;
14085
 
14086
			#回傳結果
14087
			return $result;
14088
 
14089
			}#if end
14090
 
14091
		#解析 dataTableSelect($conf) 後的結果,亦即將執行sql語法後所得到的結果解析放進變數裏面
14092
		#回傳結果:
14093
		#$result["status"],執行結果"true"為成功;"false"為失敗
14094
		#$result["error"],錯誤訊息
14095
		#$result["dataColumnName"],為資料欄位的名稱陣列.
14096
			#$result["dataColumnName"][$i]代表第一個欄位名稱.
14097
		#$result["dataContent"],爲資料的內容。
14098
		#$result["dataContent"][$conf["tableValueName"][$i]][$dataSetNum],
14099
			#$dataSetNum 爲第$dataSetNum+1筆資料
14100
			#$conf["tableValueName"][$i] 爲第 $i+1 個欄位的名稱
14101
		#$result["dataCount"],爲取得的資料筆數。
14102
		#必填參數:
14103
		$conf["db"]["sendQueryDataToVariabele"]["sqlQueryResult"]=$countResult["queryResource"];#爲執行sql語法所獲得的查詢結果。
14104
		$conf["db"]["sendQueryDataToVariabele"]["tableValueName"]=array("count(*)");#爲該資料表列項目的每一項名稱,須爲陣列值,若為「array("*")」則代表所有欄位.
14105
		$conf["db"]["sendQueryDataToVariabele"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
14106
		$conf["db"]["sendQueryDataToVariabele"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
14107
		#可省略參數:
14108
 
14109
		#如果 $conf["dbPassword"] 有設置
14110
		if(isset($conf["dbPassword"])){
14111
 
14112
			$conf["db"]["sendQueryDataToVariabele"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
14113
 
14114
			}#if end
14115
 
14116
		#如果 $conf["dbPort"] 有設置
14117
		if(isset($conf["dbPort"])){
14118
 
14119
			$conf["db"]["sendQueryDataToVariabele"]["dbPort"]=$conf["dbPort"];#爲連線到mysql-Server時要使用的port,可省略,若省略則代表預設的port 3306
14120
 
14121
			}#if end
14122
 
14123
		$conf["db"]["sendQueryDataToVariabele"]["valueName"]=array("count");#陣列,爲該資料表列項目的每一項所要對應的變數名稱,預設為欄位的名稱($conf["tableValueName"]).
14124
		#參考資料:
14125
		#http://www.w3school.com.cn/php/func_mysql_fetch_array.asp => 解析取得的資料表欄位時,能夠選擇回傳含有欄位名稱與數字代表的key.
14126
		$getCountResult=db::sendQueryDataToVariabele($conf["db"]["sendQueryDataToVariabele"]);
14127
		unset($conf["db"]["sendQueryDataToVariabele"]);
14128
 
14129
		#如果 $getCountResult["status"] 等於 "false"
14130
		if($getCountResult["status"]=="false"){
14131
 
14132
			#設置錯誤識別
14133
			$result["status"]="false";
14134
 
14135
			#設置錯誤訊息
14136
			$result["error"]=$getCountResult;
14137
 
14138
			#回傳結果
14139
			return $result;
14140
 
14141
			}#if end
14142
 
14143
		#取得資料筆數
14144
		$result["dataCount"]=$getCountResult["dataContent"]["count"][0];
14145
 
14146
		#執行到這邊代表執行正常
14147
		$result["status"]="true";
14148
 
14149
		#回傳查詢的結果;	
14150
		return $result;	
14151
 
14152
		}#function getDataCountsInTable end
14153
 
14154
	/*
14155
	#函式說明:
14156
	#插入資料到指定的資料表裡面,插入資料完畢可以選擇是否要進行轉址。
14157
	#回傳結果:	
14158
	#$result["status"],爲查詢是否成功,若爲"true"則成功,若爲"false"則表示失敗了.
14159
	#$result["error"],錯誤訊息.
14160
	#$result["sql"],執行的sql語法.
14161
	#$result["lastInsertId"],新增的資料id.
14162
	#$result["function"],當前執行的涵式
14163
	#必填參數:
14164
	#$conf["dbAddress"],字串,爲mysql-Server的位置
14165
	$conf["dbAddress"]=$dbAddress;
14166
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號
14167
	$conf["dbAccount"]=$dbAccount;
14168
	#$conf["selectedDataBaseName"],字串,要選取的資料庫名稱
14169
	$conf["selectedDataBaseName"]=$dbName;
14170
	#$conf["tableName"],字串,爲要插入資料的資料表名稱
14171
	$conf["tableName"]="";
14172
	#$conf["columnName"],字串陣列,爲資料表的項目名稱.例如:$conf["columnName"]=array("columnName1","columnName2","columnName3",...);
14173
	$conf["columnName"]=array();
14174
	#$conf["insertValue"],字串陣列,爲要插入度數值.#例如:$conf["insertValue"]=array("insertValue1","insertValue2","insertValue3",...);
14175
	$conf["insertValue"]=array();
14176
	#可省略參數:
14177
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
14178
	#$conf["dbPassword"]=$dbPassword;
14179
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,可省略,若省略則代表用預設的 3306 port.
14180
	#$conf["dbPort"]=$dbPort;
14181
	#參考資料:
14182
	#http://www.javaworld.com.tw/jute/post/view?bid=21&id=173738&sty=1
14183
	#備註:
14184
	#無.
14185
	*/	
14186
	public static function insertData($conf){
14187
 
14188
		#初始化要回傳的內容
14189
		$result=array();
14190
 
14191
		#取得當前執行的函數名稱
14192
		$result["function"]=__FUNCTION__;
14193
 
14194
		#如果 $conf 不為陣列
14195
		if(gettype($conf)!="array"){
14196
 
14197
			#設置執行失敗
14198
			$result["status"]="false";
14199
 
14200
			#設置執行錯誤訊息
14201
			$result["error"][]="\$conf變數須為陣列形態";
14202
 
14203
			#如果傳入的參數為 null
14204
			if($conf==null){
14205
 
14206
				#設置執行錯誤訊息
14207
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
14208
 
14209
				}#if end
14210
 
14211
			#回傳結果
14212
			return $result;
14213
 
14214
			}#if end
14215
 
14216
		#函式說明:
14217
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
14218
		#回傳結果:
14219
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
14220
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
14221
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
14222
		#必填參數:
14223
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
14224
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("dbAddress","dbAccount","selectedDataBaseName","tableName","columnName","insertValue");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
14225
		#可省略參數:
14226
		$conf["variableCheck"]["isexistMuti"]["variableType"]=array("string","string","string","string","array","array");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
14227
		#$conf["variableCheck"]["isexistMuti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
14228
		#備註:
14229
		#功能與checkExistAndType函式相同
14230
		$variableCheck=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
14231
		unset($conf["variableCheck"]["isexistMuti"]);
14232
 
14233
		#如果 $variableCheck["status"] 等於 "false"
14234
		if($variableCheck["status"]=="false"){
14235
 
14236
			#設置執行錯誤的識別
14237
			$result["status"]="false";
14238
 
14239
			#設置執行錯誤的訊息
14240
			$result["error"]=$variableCheck;
14241
 
14242
			#回傳結果
14243
			return $result;
14244
 
14245
			}#if end
14246
 
14247
		#如果 $variableCheck["passed"] 等於 "false"
14248
		if($variableCheck["passed"]=="false"){
14249
 
14250
			#設置執行錯誤的識別
14251
			$result["status"]="false";
14252
 
14253
			#設置執行錯誤的訊息
14254
			$result["error"]=$variableCheck;
14255
 
14256
			#回傳結果
14257
			return $result;
14258
 
14259
			}#if end
14260
 
14261
		#連線到資料庫
14262
		#函式說明:
14263
		#連線到資料庫,結果會回傳一個陣列
14264
		#$result["status"],若連線成功則爲"true",連線失敗則爲"false".
14265
		#$result["connectInformation"],爲回傳的mysql連線資訊.
14266
		#$result["error"],錯誤訊息	.
14267
		#$result["function"],當前執行的函數名稱.	
14268
		#必填參數:
14269
		$conf["db"]["dbConnect"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
14270
		$conf["db"]["dbConnect"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
14271
		#$conf["dbName"],字串,爲要連的資料庫名稱
14272
		$conf["db"]["dbConnect"]["dbName"]=$conf["selectedDataBaseName"];
14273
		#可省略參數:
14274
 
14275
		#如果 $conf["dbPassword"] 有設定
14276
		if(isset($conf["dbPassword"])){
14277
 
14278
			$conf["db"]["dbConnect"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
14279
 
14280
			}#if end
14281
 
14282
		#如果 $conf["dbPort"] 有設定
14283
		if(isset($conf["dbPort"])){
14284
 
14285
			$conf["db"]["dbConnect"]["dbPort"]=$conf["dbPort"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
14286
 
14287
			}#if end
14288
 
14289
		$con=db::dbConnect($conf["db"]["dbConnect"]);
14290
		unset($conf["db"]);
14291
 
14292
		#如果連線到資料庫失敗
14293
		if($con["status"]==="false"){
14294
 
14295
			#設置執行失敗
14296
			$result["status"]="false";
14297
 
14298
			#設置執行錯誤訊息
14299
			$result["error"]=$con;
14300
 
14301
			#回傳結果
14302
			return $result;
14303
 
14304
			}#if end
14305
 
14306
		#var_dump($con);	
14307
 
14308
		#取得mysqli物件
14309
		$mysqli=$con["connectInformation"];
14310
 
14311
		#輸入資料到 資料表 board 的語法
14312
		$str1="insert into `".$conf["selectedDataBaseName"]."`.`".$conf["tableName"]."`(";
14313
 
14314
		#取得一筆資料有幾個項目
14315
		$count=count($conf["columnName"]);
14316
 
14317
		#跑 $count-1 次,插入第一筆到最倒數第二筆
14318
		for($i=0;$i<=($count-2);$i++){
14319
 
14320
			#放入欲插入的項目名稱			
14321
			$str1=$str1."`".$conf["columnName"][$i]."`".",";
14322
 
14323
			}#for end
14324
 
14325
		#插入最後一筆項目名稱
14326
		$lastItem = ($count-1);
14327
		$str1=$str1."`".$conf["columnName"][$lastItem]."`)";  
14328
 
14329
		#要插入的數值語法開始
14330
		$str2=" values (";
14331
 
14332
		#跑 $count-1 次
14333
		for($i=0;$i<=($count-2);$i++){
14334
 
14335
			#插入第一筆到最倒數第二筆的資料內容	
14336
			$str2=$str2."'".mysqli_real_escape_string($mysqli,$conf["insertValue"][$i])."',";
14337
 
14338
			}#for end
14339
 
14340
		#插入最後一筆的資料內容
14341
		$lastItem = ($count-1);
14342
		$str2=$str2."'".mysqli_real_escape_string($mysqli,$conf["insertValue"][$lastItem])."');";  
14343
 
14344
		#合併要執行的sql語法
14345
		$sqlString=$str1.$str2;
14346
 
14347
		#執行sql語法
14348
		#函式說明:
14349
		#執行mysql指令
14350
		#回傳結果::
14351
		#$result["status"],"true"為執行成功;"false"為執行失敗。
14352
		#$result["error"],錯誤訊息的陣列
14353
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
14354
		#$result["queryConn"],用於資料庫操作的變數.
14355
		#$result["queryString"],mysql查詢的語言
14356
		#查詢號的解果,需要解析。
14357
		#必填參數:
14358
		$conf["db::execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
14359
		$conf["db::execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
14360
		$conf["db::execMysqlQuery"]["dbSql"]=$sqlString;#要執行sql語法
14361
		#可省略參數: 
14362
 
14363
		#如果 $conf["dbPassword"] 有設置
14364
		if(isset($conf["dbPassword"])){
14365
 
14366
			$conf["db::execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
14367
 
14368
			}#if end
14369
 
14370
		#如果 $conf["dbPort"] 有設置
14371
		if(isset($conf["dbPort"])){
14372
 
14373
			$conf["db::execMysqlQuery"]["dbPort"]=$conf["dbPort"];#爲連線到mysql-Server時要使用的port,可省略,若省略則代表預設的3306 port.
14374
 
14375
			}#if end
14376
 
14377
		#$conf["dbLink"],物件,mysqli物件,由mysqli_connect()回傳的物件內容,若為數值則改用賬號密碼等資訊進行連線,反之則沿用連線物件.
14378
		$conf["db::execMysqlQuery"]["dbLink"]=$mysqli;
14379
		#$conf["autoClose],字串,"true"代表要自動斷線,預設為"true"會自動斷線
14380
		$conf["db::execMysqlQuery"]["autoClose"]="false";
14381
		$mysqlQueryResult=db::execMysqlQuery($conf["db::execMysqlQuery"]);
14382
		unset($conf["db::execMysqlQuery"]);
14383
 
14384
		#若執行 query 語法失敗
14385
		if($mysqlQueryResult["status"]=="false"){
14386
 
14387
			#設置執行錯誤識別
14388
			$result["status"]="false";
14389
 
14390
			#設置錯誤訊息
14391
			$result["error"]=$mysqlQueryResult;				
14392
 
14393
			#回傳結果
14394
			return $result;
14395
 
14396
			}#else end
14397
 
14398
		#取得新增的該筆記錄id
14399
		$result["lastInsertId"]=mysqli_insert_id($mysqlQueryResult["queryConn"]);
14400
 
14401
		#取得執行的sql字串
14402
		$result["sql"]=$mysqlQueryResult["queryString"];
14403
 
14404
		#執行到這邊代表執行成功
14405
		$result["status"]="true";
14406
 
14407
		#回傳結果
14408
		return $result;
14409
 
14410
		}#function insertData end
14411
 
14412
	/*
14413
	#函式說明:	
14414
	#更新資料表裏面的資料
14415
	#回傳結果:	
14416
	#$result["status"],爲查詢是否成功,若爲0則成功,若爲1則表示失敗了
14417
	#$result["error"],錯誤訊息
14418
	#$result["function"],當前執行的函數名稱
14419
	#$result["sql"],執行的sql語法.
14420
	#$result["argu"],使用的參數.
14421
	#必填參數:
14422
	#$conf["fileArgu"],字串,變數__FILE__的內容.
14423
	$conf["fileArgu"]=__FILE__;
14424
	#$conf["dbAddress"],字串,爲mysql-Server的位置
14425
	$conf["dbAddress"]=$dbAddress;
14426
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號
14427
	$conf["dbAccount"]=$dbAccount;
14428
	#$conf["selectedDataBaseName"],字串,要選取的資料庫名稱
14429
	$conf["selectedDataBaseName"]=$dbName;
14430
	#$conf["tableName"],字串,要修改的資料表名稱
14431
	$conf["tableName"]="";
14432
	#$conf["whereColumn"],字串陣列,爲用來判斷要更新的哪筆資料的欄位名稱,須爲陣列值
14433
	$conf["whereColumn"]=array("");
14434
	#$conf["whereValue"],字串陣列,為用來判斷是要更新哪筆資料的欄位對應數值,須爲陣列值
14435
	$conf["whereValue"]=array("");
14436
	#$conf["tableColumnName"],字串陣列,資料表項目的名稱陣列
14437
	$conf["tableColumnName"]=array("");
14438
	#$conf["updateDataValue"],字串陣列,要更改成對應資料表項目的內容,須為陣列值
14439
	$conf["updateDataValue"]=array("");
14440
	#可省略參數:
14441
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼.
14442
	#$conf["dbPassword"]=$dbPassword;
14443
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,可省略,若省略則代表使用預設的port 3306.
14444
	#$conf["dbPort"]=$dbPort;
14445
	#參考資料:
14446
	#無.
14447
	#備註:
14448
	#無.
14449
	*/
14450
	public static function updateDataTableContent($conf){
14451
 
14452
		#初始化要回傳的內容
14453
		$result=array();
14454
 
14455
		#取得當前執行的函數名稱
14456
		$result["function"]=__FUNCTION__;
14457
 
14458
		#如果 $conf 不為陣列
14459
		if(gettype($conf)!=="array"){
14460
 
14461
			#設置執行失敗
14462
			$result["status"]="false";
14463
 
14464
			#設置執行錯誤訊息
14465
			$result["error"][]="\$conf變數須為陣列形態";
14466
 
14467
			#如果傳入的參數為 null
14468
			if($conf==null){
14469
 
14470
				#設置執行錯誤訊息
14471
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
14472
 
14473
				}#if end
14474
 
14475
			#回傳結果
14476
			return $result;
14477
 
14478
			}#if end
14479
 
14480
		#儲存使用的參數
14481
		$result["argu"]=$conf;
14482
 
14483
		#函式說明:
14484
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
14485
		#回傳結果:
14486
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14487
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
14488
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
14489
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
14490
		#必填參數:
14491
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
14492
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("fileArgu","dbAddress","dbAccount","selectedDataBaseName","tableName","whereColumn","whereValue","tableColumnName","updateDataValue");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
14493
		#可省略參數:
14494
		$conf["variableCheck"]["isexistMuti"]["variableType"]=array("string","string","string","string","string","array","array","array","array");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
14495
		#$conf["variableCheck"]["isexistMuti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
14496
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
14497
		unset($conf["variableCheck"]["isexistMuti"]);
14498
 
14499
		#如果檢查參數作業出錯
14500
		if($checkResult["status"]==="false"){
14501
 
14502
			#設置執行錯誤識別
14503
			$result["status"]="false";
14504
 
14505
			#設置錯誤訊息
14506
			$result["error"]=$checkResult;
14507
 
14508
			#回傳結果
14509
			return $result;
14510
 
14511
			}#if end
14512
 
14513
		#如果檢查沒通過
14514
		if($checkResult["passed"]==="false"){
14515
 
14516
			#設置執行錯誤識別
14517
			$result["status"]="false";
14518
 
14519
			#設置錯誤訊息
14520
			$result["error"]=$checkResult;
14521
 
14522
			#回傳結果
14523
			return $result;
14524
 
14525
			}#if end
14526
 
14527
		#將陣列變數 $conf["whereColumn"] 與 $conf["whereValue"] 對應的變數中不存在的 $conf["whereValue"][$i] 元素去掉,並同時調整 $conf["whereColumn"] 使兩者變數的元素數量均相同。
14528
		#函式說明:
14529
		#比對兩個陣列變數,如果其中一個陣列變數的元素不存在,則將之消去,然後進行替補。另一個陣列變數則也要做同步的動作。
14530
		#回傳結果::
14531
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常。
14532
		#$result["error"],錯誤訊息。
14533
		#$result["content"],組合成新值的一維陣列。
14534
		#$result["function"],當前執行的函數名稱。
14535
		#必填參數:
14536
		$conf_compareAndModify2Arrays["arraysA"]=$conf["tableColumnName"];#用來跟陣列變數B比較的陣列變數A
14537
		$conf_compareAndModify2Arrays["arraysB"]=$conf["updateDataValue"];#用來跟陣列變數A比較的陣列變數B
14538
		$compareAndModifyTwoArrays=arrays::compareAndModifyTwoArrays($conf_compareAndModify2Arrays);
14539
		unset($conf_compareAndModify2Arrays);
14540
 
14541
		#如果 arrays::compareAndModifyTwoArrays 執行失敗
14542
		if($compareAndModifyTwoArrays["status"]==="false"){
14543
 
14544
			#設置執行錯誤識別
14545
			$result["status"]="false";
14546
 
14547
			#設置錯誤訊息
14548
			$result["error"]=$compareAndModifyTwoArrays;
14549
 
14550
			#回傳結果
14551
			return $result;
14552
 
14553
			}#if end
14554
 
14555
		#將整理好的 $result["compareAndModify2Arrays"]["A"] 放到 $conf["whereColumn"] ; $result["compareAndModify2Arrays"]["B"] 放到 $conf["whereValue"]
14556
		$conf["tableColumnName"]=$compareAndModifyTwoArrays["newArraysA"];
14557
		$conf["updateDataValue"]=$compareAndModifyTwoArrays["newArraysB"];
14558
 
14559
		#更新 $conf["selectedDatabaseName"].$tableName 資料表
14560
		$selectUpdateTableSql="UPDATE `".$conf["selectedDataBaseName"]."`.`".$conf["tableName"]."` "; 
14561
 
14562
		#更新資料表資料語法的一部分
14563
		$chooseColumnSql="SET ";
14564
 
14565
		#取得一筆資料有幾個項目
14566
		$counts=count($conf["tableColumnName"]);
14567
 
14568
		#儲存宣告shell變數的指令陣列
14569
		$shellVarDefined=array();
14570
 
14571
		#儲存要宣告的變數
14572
		$varDefined=array();
14573
 
14574
		#有$count欄項目,
14575
		for($i=0;$i<$counts;$i++){
14576
 
14577
			#如果是最後一項要更新的資料
14578
			if($i==($counts-1)){
14579
 
14580
				#如果內容不為字串
14581
				if(gettype($conf["updateDataValue"][$i])!=="string"){
14582
 
14583
					#設置執行錯誤識別
14584
					$result["status"]="false";
14585
 
14586
					#設置錯誤訊息
14587
					$result["error"][]="欲使用的變數不為字串";
14588
 
14589
					#設置錯誤訊息
14590
					$result["error"][]=$conf["updateDataValue"][$i];
14591
 
14592
					#回傳結果
14593
					return $result;
14594
 
14595
					}#if end
14596
 
14597
				#定義 shell script 變數
14598
				$shellVarDefined[]=array("cmd"=>"x".$i."=","param"=>array($conf["updateDataValue"][$i]));
14599
 
14600
				#定義變數
14601
				#$varDefined[]="select @x".$i." := '\${x".$i."}';";
14602
				$varDefined[]="select @x".$i." := \${x".$i."};";
14603
 
14604
				#將要更新的內容字串串接,結尾無逗號                             
14605
				$chooseColumnSql = $chooseColumnSql."`".$conf["tableColumnName"][$i]."`= @x".$i." ";
14606
 
14607
				}#判斷式結束
14608
 
14609
			#如果不是最後一項要更新的資料
14610
			if($i!=($counts-1)){
14611
 
14612
				#定義 shell script 變數
14613
				$shellVarDefined[]=array("cmd"=>"x".$i."=","param"=>array($conf["updateDataValue"][$i]));
14614
 
14615
				#sql定義變數
14616
				#$varDefined[]="select @x".$i." := '\${x".$i."}';";
14617
				$varDefined[]="select @x".$i." := \${x".$i."};";
14618
 
14619
				#將要更新的內容字串串接,結尾有逗號
14620
				$chooseColumnSql = $chooseColumnSql."`".$conf["tableColumnName"][$i]."`= @x".$i." ,";
14621
 
14622
				}#判斷式結束
14623
 
14624
			}#回圈結束
14625
 
14626
		#取得條件有幾項
14627
		$conditionArrayCounts=count($conf["whereColumn"]);				
14628
 
14629
		#構成條件式
14630
		for($i=0;$i<$conditionArrayCounts;$i++){
14631
 
14632
			#如果是第一筆
14633
			if($i==0){
14634
 
14635
				#尋找的條件式
14636
				$condition="WHERE `".$conf["whereColumn"][$i]."` = '".$conf["whereValue"][$i]."'";
14637
 
14638
				#測試有無抓到第一個條件
14639
				#var_dump($condition);
14640
 
14641
				}#判斷式結束
14642
 
14643
			#如果不是第一筆
14644
			if($i!=0){
14645
 
14646
				#其它條件
14647
				$condition=$condition." AND `".$conf["whereColumn"][$i]."` = '".$conf["whereValue"][$i]."'";
14648
 
14649
				#測試有無抓到其它條件
14650
				#var_dump($condition);
14651
 
14652
				}#判斷式結束
14653
 
14654
			}#迴圈結束
14655
 
14656
		#初始化定義變數的sql
14657
		$varDefineStr="";
14658
 
14659
		#針對每個要使用的數值
14660
		foreach($varDefined as $index=>$var){
14661
 
14662
			#累加定義變數的sql
14663
			$varDefineStr=$varDefineStr.$var;
14664
 
14665
			}#foreach end
14666
 
14667
		#合併所有的語法成一句完整的語法 
14668
		$sqlString = $varDefineStr.$selectUpdateTableSql.$chooseColumnSql.$condition;
14669
 
14670
		#設置取得執行的sql語法
14671
		$result["sql"]=$sqlString;
14672
 
14673
		#函式說明:
14674
		#用shell執行mysql指令.
14675
		#回傳結果::
14676
		#$result["status"],"true"為執行成功;"false"為執行失敗。
14677
		#$result["error"],錯誤訊息的陣列
14678
		#$result["function"],當前執行的涵式
14679
		#$result["queryString"],mysql查詢的語言.
14680
		#必填參數:
14681
		#$conf["fileArgu"],字串,變數__FILE__的內容.
14682
		$conf["db::shell"]["fileArgu"]=$conf["fileArgu"];
14683
		#$conf["dbSql"],字串,要執行sql語法
14684
		$conf["db::shell"]["dbSql"]=$sqlString;
14685
		#$conf["dbAddress"],字串,爲mysql-Server的位置。
14686
		$conf["db::shell"]["dbAddress"]=$conf["dbAddress"];
14687
		#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號。
14688
		$conf["db::shell"]["dbAccount"]=$conf["dbAccount"]; 
14689
		#可省略參數:
14690
		$conf["db::shell"]["pre"]=$shellVarDefined;
14691
 
14692
		#如果有設定密碼
14693
		if(isset($conf["dbPassword"])){
14694
 
14695
			#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼。
14696
			$conf["db::shell"]["dbPassword"]=$conf["dbPassword"];
14697
 
14698
			}#if end
14699
 
14700
		#$conf["dbName"],字串,爲要連的資料庫名稱
14701
		$conf["db::shell"]["dbName"]=$conf["selectedDataBaseName"];
14702
 
14703
		#如果有設定port
14704
		if(isset($conf["dbPort"])){
14705
 
14706
			#$conf["dbPort"],字串,為連線到mysql-Server時對應的port,可省略,預設為3306.
14707
			$conf["db::shell"]["dbPort"]=$conf["dbPort"];
14708
 
14709
			}#if end
14710
 
14711
		$shell=db::shell($conf["db::shell"]);
14712
		unset($conf["db::shell"]);
14713
 
14714
		/* debug
14715
		$fsock=fopen("/var/www/html/log/log.txt","a");
14716
		fwrite($fsock,"func:".__CLASS__." line:".__LINE__.":".print_r($shell,true).PHP_EOL.PHP_EOL);
14717
		fclose($fsock);
14718
		*/
14719
 
14720
		#如果執行sql失敗
14721
		if($shell["status"]==="false"){
14722
 
14723
			#設置執行不正常
14724
			$result["status"]="false";	
14725
 
14726
			#設置錯誤訊息
14727
			$result["error"]=$shell;
14728
 
14729
			#回傳結果
14730
			return $result;
14731
 
14732
			}#if end
14733
 
14734
		#設置執行正常
14735
		$result["status"]="true";
14736
 
14737
		#回傳結果
14738
		return $result;
14739
 
14740
		}#function updateDataTableContent end
14741
 
14742
	/*
14743
	#函式說明:
14744
	#將滿足條件的資料從資料表中刪除
14745
	#回傳結果:	
14746
	#$result["status"],爲查詢是否成功,若爲0則成功,若爲1則表示失敗了
14747
	#$result["function"],當前執行的函數名稱.
14748
	#$result["error"],錯誤訊息
14749
	#$result["sql"],執行的語法
14750
	#必填參數:
14751
	#$conf["dbAddress"],字串,爲mysql-Server的位置
14752
	$conf["dbAddress"]=$dbAddress;
14753
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號
14754
	$conf["dbAccount"]=$dbAccount;
14755
	#$conf["selectedDataBaseName"],字串,要選取的資料庫名稱
14756
	$conf["selectedDataBaseName"]=$dbName;
14757
	#$conf["selectedDataTableName"],字串,要選取的資料表的名稱
14758
	$conf["selectedDataTableName"]="";
14759
	#$conf["whereColumn"],字串陣列,爲用來判斷要刪除的哪筆資料的欄位名稱,須爲陣列值
14760
	$conf["whereColumn"]=array("");
14761
	#$conf["whereValue"]=,字串陣列,為用來判斷是要刪除哪筆資料的欄位對應數值,須爲陣列值
14762
	$conf["whereValue"]=array("");	
14763
	#可省略參數:
14764
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
14765
	#$conf["dbPassword"]=$dbPassword;
14766
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,可省略,若省略則代表使用預設的port 3306.
14767
	#$conf["dbPort"]=$dbPort;
14768
	#$conf["WhereColumnOperator"],字串陣列,用於判斷語句的比較符號陣列,可以用的符號有「"="、">"、"<"、"LIKE"、"NOT LIKE"」,預設都爲「=」。
14769
	#$conf["WhereColumnOperator"]=array("");
14770
	#$conf["WhereColumnAndOr"]=array("");#用於判斷語句條件之間成立的條件是AND還是OR,須爲陣列值,預設皆爲AND。其數量應爲要判斷的欄位數量減一。
14771
	#$conf["WhereColumnAndOr"]=array("");
14772
	#參考資料:
14773
	#無.
14774
	#備註:
14775
	#無.
14776
	*/	
14777
	public static function deleteDataFromTable(&$conf){
14778
 
14779
		#初始化要回傳的內容
14780
		$result=array();
14781
 
14782
		#取得當前執行的函數名稱
14783
		$result["function"]=__FUNCTION__;
14784
 
14785
		#如果 $conf 不為陣列
14786
		if(gettype($conf)!="array"){
14787
 
14788
			#設置執行失敗
14789
			$result["status"]="false";
14790
 
14791
			#設置執行錯誤訊息
14792
			$result["error"][]="\$conf變數須為陣列形態";
14793
 
14794
			#如果傳入的參數為 null
14795
			if($conf==null){
14796
 
14797
				#設置執行錯誤訊息
14798
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
14799
 
14800
				}#if end
14801
 
14802
			#回傳結果
14803
			return $result;
14804
 
14805
			}#if end
14806
 
14807
		#檢查參數
14808
		#函式說明:
14809
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
14810
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14811
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
14812
		#$result["function"],當前執行的函式名稱.
14813
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
14814
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
14815
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
14816
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
14817
		#必填參數:
14818
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
14819
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
14820
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
14821
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("dbAddress","dbAccount","selectedDataBaseName","selectedDataTableName","whereColumn","whereValue");
14822
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
14823
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string","string","array","array");
14824
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
14825
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
14826
		#可省略參數:
14827
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
14828
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
14829
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
14830
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("dbPassword","dbPort","WhereColumnOperator","WhereColumnAndOr");
14831
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
14832
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","array","array");
14833
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
14834
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null,null,null);
14835
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
14836
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("WhereColumnOperator","WhereColumnAndOr");
14837
		#var_dump($conf["variableCheck::checkArguments"]);
14838
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
14839
		unset($conf["variableCheck::checkArguments"]);
14840
 
14841
		#如果檢查作業出出錯
14842
		if($checkResult["status"]=="false"){
14843
 
14844
			#設置錯誤識別
14845
			$result["status"]="false";
14846
 
14847
			#設置錯誤訊息
14848
			$result["error"]=$checkResult;
14849
 
14850
			#回傳結果
14851
			return $result;
14852
 
14853
			}#if end
14854
 
14855
		#如果檢查作業出出錯
14856
		if($checkResult["passed"]=="false"){
14857
 
14858
			#設置錯誤識別
14859
			$result["status"]="false";
14860
 
14861
			#設置錯誤訊息
14862
			$result["error"]=$checkResult;
14863
 
14864
			#回傳結果
14865
			return $result;
14866
 
14867
			}#if end
14868
 
14869
		#刪除資料的語法開始,指定了表格的名稱
14870
		$sql="DELETE FROM `".$conf["selectedDataBaseName"]."`.`".$conf["selectedDataTableName"]."` ";
14871
 
14872
		#取得有幾個條件
14873
		$counts=count($conf["whereColumn"]);
14874
 
14875
		#連線到資料庫
14876
		#函式說明:
14877
		#連線到資料庫,結果會回傳一個陣列
14878
		#$result["status"],若連線成功則爲"true",連線失敗則爲"false".
14879
		#$result["connectInformation"],爲回傳的mysql連線資訊.
14880
		#$result["error"],錯誤訊息	.
14881
		#$result["function"],當前執行的函數名稱.	
14882
		#必填參數:
14883
		$conf["db"]["dbConnect"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
14884
		$conf["db"]["dbConnect"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
14885
		#$conf["dbName"],字串,爲要連的資料庫名稱
14886
		$conf["db"]["dbConnect"]["dbName"]=$conf["selectedDataBaseName"];
14887
		#可省略參數:
14888
 
14889
		#如果 $conf["dbPassword"] 有設定
14890
		if(isset($conf["dbPassword"])){
14891
 
14892
			$conf["db"]["dbConnect"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
14893
 
14894
			}#if end
14895
 
14896
		#如果 $conf["dbPort"] 有設定
14897
		if(isset($conf["dbPort"])){
14898
 
14899
			$conf["db"]["dbConnect"]["dbPort"]=$conf["dbPort"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
14900
 
14901
			}#if end
14902
 
14903
		$con=db::dbConnect($conf["db"]["dbConnect"]);
14904
		unset($conf["db"]);
14905
 
14906
		#如果連線到資料庫失敗
14907
		if($con["status"]==="false"){
14908
 
14909
			#設置執行失敗
14910
			$result["status"]="false";
14911
 
14912
			#設置執行錯誤訊息
14913
			$result["error"]=$con;
14914
 
14915
			#回傳結果
14916
			return $result;
14917
 
14918
			}#if end
14919
 
14920
		#var_dump($con);	
14921
 
14922
		#取得mysqli物件
14923
		$mysqli=$con["connectInformation"];
14924
 
14925
		#條件語句
14926
		for($i=0;$i<$counts;$i++){
14927
 
14928
			#如果 $conf["WhereColumnOperator"] 不存在
14929
			if(!isset($conf["WhereColumnOperator"])){
14930
 
14931
				#如果 $conf["WhereColumnOperator"][$i] 不存在
14932
				if(!isset($conf["WhereColumnOperator"][$i])){
14933
 
14934
					#設置為 "="
14935
					$conf["WhereColumnOperator"][$i]="=";
14936
 
14937
					}#if end
14938
 
14939
				}#if end
14940
 
14941
			#反之若 $conf["WhereColumnOperator"][$i] 不存在
14942
			else if(!isset($conf["WhereColumnOperator"][$i])){
14943
 
14944
				#設置為 "="
14945
				$conf["WhereColumnOperator"][$i]="=";
14946
 
14947
				}#if end
14948
 
14949
			#以下變數應該要為字串
14950
			$checkedVar["whereColumn"]=$conf["whereColumn"][$i];
14951
			$checkedVar["WhereColumnOperator"]=$conf["WhereColumnOperator"][$i];
14952
			$checkedVar["whereValue"]=$conf["whereValue"][$i];
14953
 
14954
			#函式說明:
14955
			#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
14956
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14957
			#$reuslt["error"],執行不正常結束的錯訊息陣列.
14958
			#$result["function"],當前執行的函式名稱.
14959
			#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
14960
			#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
14961
			#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
14962
			#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
14963
			#必填參數:
14964
			#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
14965
			$conf["variableCheck::checkArguments"]["varInput"]=&$checkedVar;
14966
			#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
14967
			$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("whereColumn","WhereColumnOperator","whereValue");
14968
			#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
14969
			$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string");
14970
			#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
14971
			$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
14972
			#可省略參數:
14973
			#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
14974
			#$conf["canBeEmptyString"]="false";
14975
			#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
14976
			#$conf["skipableVariableName"]=array();
14977
			#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
14978
			#$conf["skipableVariableType"]=array();
14979
			#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
14980
			#$conf["skipableVarDefaultValue"]=array("");
14981
			#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
14982
			#$conf["arrayCountEqualCheck"][]=array();
14983
			$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
14984
			unset($conf["variableCheck::checkArguments"]);
14985
 
14986
			#如果檢查失敗
14987
			if($checkResult["status"]=="false"){
14988
 
14989
				#設置執行錯誤
14990
				$result["status"]="false";
14991
 
14992
				#設置執行錯誤訊息
14993
				$result["error"]=$checkResult;
14994
 
14995
				#回傳結果
14996
				return $result;
14997
 
14998
				}#if end
14999
 
15000
			#如果檢查失敗
15001
			if($checkResult["passed"]=="false"){
15002
 
15003
				#設置執行錯誤
15004
				$result["status"]="false";
15005
 
15006
				#設置執行錯誤訊息
15007
				$result["error"]=$checkResult;
15008
 
15009
				#回傳結果
15010
				return $result;
15011
 
15012
				}#if end
15013
 
15014
			#如果是第一筆
15015
			if($i==0){
15016
 
15017
				#如果 $conf["WhereColumnOperator"] 存在
15018
				if(isset($conf["WhereColumnOperator"])){
15019
 
15020
					#設定第一個條件
15021
					$sql = $sql." WHERE `".$conf["whereColumn"][$i]. "` ".$conf["WhereColumnOperator"][$i]." '". mysqli_real_escape_string($mysqli,$conf["whereValue"][$i])."'";
15022
 
15023
					}#if end
15024
 
15025
				#反之 $conf["WhereColumnOperator"] 不存在
15026
				else{
15027
 
15028
					#設定第一個條件
15029
					$sql = $sql." WHERE `".$conf["whereColumn"][$i]. "` = '". mysqli_real_escape_string($mysqli,$conf["whereValue"][$i])."'"; 
15030
 
15031
					}#else end
15032
 
15033
				}#判斷式
15034
 
15035
			#如果不是第一個條件
15036
			if($i!=0){
15037
 
15038
				#如果 $conf["WhereColumnAndOr"] 不存在 
15039
				if(!isset($conf["WhereColumnAndOr"])){
15040
 
15041
					#將 $conf["WhereColumnAndOr"] 裏面的元素置換爲 AND
15042
					#函式說明:
15043
					#建立一個陣列,可以指派陣列的內容,然後回傳
15044
					#回傳結果::
15045
					#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15046
					#$result["function"],當前執行的函數名稱.
15047
					#$result["error"],錯誤訊息陣列.
15048
					#$result["content"],爲陣列變數內容
15049
					#必填參數:
15050
					$conf_arrays_create["arrayContent"]=array("AND");#陣列元素的內容,須爲陣列值。
15051
					#可省略參數:
15052
					$conf_arrays_create["arrayCounts"]=$counts-1;#爲陣列的元素有幾個,若沒設定,則數量爲$conf["arrayContent"]裏的元素數量
15053
					$conf_arrays_create["theSameAs"]="true";#若設爲"true",則所有元素內容都跟第一個元素內容相同
15054
					$create=arrays::create($conf_arrays_create);
15055
					unset($conf_arrays_create);
15056
 
15057
					#如果建立陣列失敗
15058
					if($create["status"]=="false"){
15059
 
15060
						#設置執行錯誤
15061
						$result["status"]="false";
15062
 
15063
						#設置執行錯誤訊息
15064
						$result["error"]=$create;
15065
 
15066
						#回傳結果
15067
						return $result;
15068
 
15069
						}#if end
15070
 
15071
					#取得 $conf["WhereColumnAndOr"] 參數內容
15072
					$conf["WhereColumnAndOr"]=$create["content"];
15073
 
15074
					}#if end
15075
 
15076
				#如果 $conf["WhereColumnOperator"] 存在
15077
				if(isset($conf["WhereColumnOperator"])){
15078
 
15079
					#設定其它條件
15080
					$sql=$sql." ".$conf["WhereColumnAndOr"][$i-1]." `".$conf["whereColumn"][$i]. "` ".$conf["WhereColumnOperator"][$i]." '".mysqli_real_escape_string($mysqli,$conf["whereValue"][$i])."'";			
15081
 
15082
					}#if end			
15083
 
15084
				#反之 $conf["WhereColumnOperator"] 不存在
15085
				else{
15086
 
15087
					#設定其它條件
15088
					$sql=$sql." ".$conf["WhereColumnAndOr"][$i-1]." `".$conf["whereColumn"][$i]. "` = '".mysqli_real_escape_string($mysqli,$conf["whereValue"][$i])."'";			
15089
 
15090
					}#else end
15091
 
15092
				}#判斷式
15093
 
15094
			}#迴圈結束
15095
 
15096
		#sql語法結束
15097
		$sqlString=$sql.";";			
15098
 
15099
		#執行sql語法
15100
		#函式說明:
15101
		#執行mysql指令
15102
		#回傳結果::
15103
		#$result["status"],"true"為執行成功;"false"為執行失敗。
15104
		#$result["error"],錯誤訊息的陣列
15105
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
15106
		#$result["queryString"],mysql查詢的語言
15107
		#查詢號的解果,需要解析。
15108
		#必填參數:
15109
		$conf["db"]["execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
15110
		$conf["db"]["execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
15111
		$conf["db"]["execMysqlQuery"]["dbSql"]=$sqlString;#要執行sql語法
15112
		#可省略參數: 
15113
 
15114
		#如果 $conf["dbPassword"] 有設置
15115
		if(isset($conf["dbPassword"])){
15116
 
15117
			$conf["db"]["execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
15118
 
15119
			}#if end
15120
 
15121
		#如果 $conf["dbPort"] 有設置
15122
		if(isset($conf["dbPort"])){
15123
 
15124
			$conf["db"]["execMysqlQuery"]["dbPort"]=$conf["dbPort"];#爲連線到mysql-Server時要使用的port,可省略,若省略則代表預設的 3306 port.
15125
 
15126
			}#if end
15127
 
15128
		#$conf["dbLink"],物件,mysqli物件,由mysqli_connect()回傳的物件內容,若為數值則改用賬號密碼等資訊進行連線,反之則沿用連線物件.
15129
		$conf["db"]["execMysqlQuery"]["dbLink"]=$mysqli;
15130
 
15131
		$db["execMysqlQuery"]=db::execMysqlQuery($conf["db"]["execMysqlQuery"]);
15132
		unset($conf["db"]["execMysqlQuery"]);
15133
 
15134
		#如果sql執行有誤
15135
		if($db["execMysqlQuery"]["status"]=="false"){
15136
 
15137
			#設置錯誤識別
15138
			$result["status"]="false";
15139
 
15140
			#設置錯誤訊息
15141
			$result["error"]=$db["execMysqlQuery"];
15142
 
15143
			#回傳結果
15144
			return $result;
15145
 
15146
			}#if end
15147
 
15148
		#取得執行的sql語法
15149
		$result["sql"]=$db["execMysqlQuery"]["queryString"];
15150
 
15151
		#執行到這邊表執行成功
15152
		$result["status"]="true";
15153
 
15154
		#回傳結果
15155
		return $result;
15156
 
15157
		}#函式結束
15158
 
15159
	/*
15160
	#函式說明:
15161
	#取得目標資料庫底下所有資料表的索引鍵,可作為foreign key的可用欄位,欄位必須為index key或primary key.
15162
	#回傳結果::
15163
	#$result["status"],執行是否成功"true"為執行成功,"false"為執行失敗。
15164
	#$result["error"],執行的錯誤訊息.
15165
	#$result["function"],當前執行函式名稱.
15166
	#$result["content"][$i]["tableName"],欄位所屬的資料表名稱.
15167
	#$result["content"][$i]["columnKey"],是"primary key"還是"index key".
15168
	#$result["content"][$i]["columnName"],欄位名稱.
15169
	#$result["content"][$i]["typeAndLength"],欄位儲存形態與長度限制.
15170
	#$result["content"][$i]["tableDotColumnName"],欄位的「鍵所屬資料表名稱.鍵欄位名稱」.
15171
	#$result["content"][$i]["tableDotColumnVarType"],「資料索引鍵所屬資料表名稱.索引鍵欄位名稱 儲存變數型別與長度」.
15172
	#$result["indexKey"]["tableName"],index key欄位所屬的資料表陣列
15173
	#$result["indexKey"]["columnName"],index key的欄位名稱陣列
15174
	#$result["indexKey"]["typeAndLength"],index key的欄位儲存型態與長度限制陣列
15175
	#$result["indexKey"]["tableDotColumnName"],index key的 「資料索引鍵所屬資料表名稱.索引鍵欄位名稱」 陣列
15176
	#$result["indexKey"]["tableDotColumnVarType"],index key的 「資料索引鍵所屬資料表名稱.索引鍵欄位名稱 儲存變數型別與長度」 陣列
15177
	#$result["primaryKey"][$tableCount]["dtName"],主鍵所屬的資料表名稱,若沒有主鍵則為null.
15178
	#$result["primaryKey"][$tableCount]["columnName"],資料表的主鍵欄位名稱,若沒有主鍵則為null.
15179
	#$result["primaryKey"][$tableCount]["columnVarType"],資料表的主鍵欄位的儲存形態,若沒有主鍵則為null..
15180
	#$result["primaryKey"][$tableCount]["columnVarLengthLimit"],資料表的主鍵欄位的儲存長度限制,若沒有主鍵則為null.
15181
	#$result["primaryKey"][$tableCount]["columnVarTypeAndLengthLimit"],儲存當前資料表的主鍵欄位的儲存形態與長度限制,若沒有主鍵則為null.
15182
	#必填參數:
15183
	#$conf["dbAddress"],字串,爲mysql-Server的位置
15184
	$conf["dbAddress"]=$dbAddress;
15185
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號
15186
	$conf["dbAccount"]=$dbAccount;
15187
	#$conf["selectedDataBaseName"],字串,爲目標資料表所屬的資料庫
15188
	$conf["selectedDataBaseName"]="";#
15189
	#可省略參數:
15190
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
15191
	#$conf["dbPassword"]=$dbPassword;#
15192
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,可省略,若省略則代表使用預設的port 3306.
15193
	#$conf["dbPort"]=$dbPort;
15194
	#參考資料:
15195
	#無.
15196
	#備註:
15197
	#目前只能取得一個資料庫的所有索引鍵.
15198
	*/
15199
	public static function getAllIndexKeyInAllDataBase(&$conf){
15200
 
15201
		#初始化要回傳的內容
15202
		$result=array();
15203
 
15204
		#取得當前執行的函數名稱
15205
		$result["function"]=__FUNCTION__;
15206
 
15207
		#如果 $conf 不為陣列
15208
		if(gettype($conf)!="array"){
15209
 
15210
			#設置執行失敗
15211
			$result["status"]="false";
15212
 
15213
			#設置執行錯誤訊息
15214
			$result["error"][]="\$conf變數須為陣列形態";
15215
 
15216
			#如果傳入的參數為 null
15217
			if($conf==null){
15218
 
15219
				#設置執行錯誤訊息
15220
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
15221
 
15222
				}#if end
15223
 
15224
			#回傳結果
15225
			return $result;
15226
 
15227
			}#if end
15228
 
15229
		#檢查參數
15230
		#函式說明:
15231
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
15232
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15233
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
15234
		#$result["function"],當前執行的函式名稱.
15235
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
15236
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
15237
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
15238
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
15239
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
15240
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
15241
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
15242
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
15243
		#必填參數:
15244
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
15245
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
15246
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
15247
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("dbAddress","dbAccount","selectedDataBaseName");
15248
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
15249
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string");
15250
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
15251
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
15252
		#可省略參數:
15253
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
15254
		#$conf["canBeEmptyString"]="false";
15255
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或集合.
15256
		$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("dbPassword","dbPort");
15257
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
15258
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("dbPassword","dbPort");
15259
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
15260
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
15261
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
15262
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null);
15263
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
15264
		#$conf["arrayCountEqualCheck"][]=array();
15265
		#參考資料:
15266
		#array_keys=>http://php.net/manual/en/function.array-keys.php
15267
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
15268
		unset($conf["variableCheck::checkArguments"]);
15269
 
15270
		#如果檢查有誤
15271
		if($checkResult["status"]=="false"){
15272
 
15273
			#設置執行錯誤的識別
15274
			$result["status"]="false";
15275
 
15276
			#設置錯誤訊息
15277
			$result["error"]=$checkResult;
15278
 
15279
			#回傳結果
15280
			return $result;
15281
 
15282
			}#if end
15283
 
15284
		#如果檢查不通過
15285
		if($checkResult["passed"]=="false"){
15286
 
15287
			#設置執行錯誤的識別
15288
			$result["status"]="false";
15289
 
15290
			#設置錯誤訊息
15291
			$result["error"]=$checkResult;
15292
 
15293
			#回傳結果
15294
			return $result;
15295
 
15296
			}#if end
15297
 
15298
		#取得資料表列表
15299
		#查詢特定資料庫裡的資料表列表,會回傳查詢的結果
15300
		#$result["connectStatus"],若成功則爲0,失敗則爲1。
15301
		#$result["connectInformation"],爲回傳的mysql連線資訊。
15302
		#$result["tableName"] 爲查詢的資料庫名稱陣列,
15303
			#第一筆資料庫名稱爲$result["tableName"][0],
15304
			#第二筆資料庫名稱爲$result["tableName"][1],
15305
			#其餘以此類推。
15306
		#$result["dataCounts"] 爲資料庫的總筆數
15307
		#必填參數:
15308
		$conf["db"]["getDataTableList"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
15309
		$conf["db"]["getDataTableList"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
15310
		$conf["db"]["getDataTableList"]["selectedDataBaseName"]=$conf["selectedDataBaseName"];#爲指定的資料庫名稱
15311
		#可省略參數:
15312
 
15313
		#如果有設定 $conf["dbPassword"]
15314
		if(isset($conf["dbPassword"])){
15315
 
15316
			#則套用設定
15317
			$conf["db"]["getDataTableList"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
15318
 
15319
			}#if end
15320
 
15321
		#如果有設定 $conf["dbPort"]
15322
		if(isset($conf["dbPort"])){
15323
 
15324
			#則套用設定
15325
			$conf["db"]["getDataTableList"]["dbPort"]=$conf["dbPort"];#爲連線到mysql-Server時要使用的port,預設為3306.
15326
 
15327
			}#if end
15328
 
15329
		#原始語法:
15330
		#show tables FROM databaseName,代表檢視databaseName裡面的資料表清單。
15331
		$tableList=db::getDataTableList($conf["db"]["getDataTableList"]);
15332
		unset($conf["db"]);
15333
 
15334
		#debug
15335
		#var_dump($tableList);
15336
 
15337
		#如果 資料表清單 取得失敗
15338
		if($tableList["status"]=="false"){
15339
 
15340
			#設置執行錯誤的識別
15341
			$result["status"]="fasle";
15342
 
15343
			#設置錯誤訊息
15344
			$result["error"]="取得資料表清單失敗";
15345
 
15346
			#回傳結果
15347
			return $result;
15348
 
15349
			}#if end
15350
 
15351
		#初始化資料表的計數變數
15352
		$tableCount=0;
15353
 
15354
		#初始化儲存 index key
15355
		$result["indexKey"]=array();
15356
 
15357
		#初始化儲存index key所屬的表格 
15358
		$result["indexKey"]["tableName"]=array();
15359
 
15360
		#根據每個資料表
15361
		foreach($tableList["tableName"] as $tableName){
15362
 
15363
			#取得該資料表的欄位資訊
15364
			#函式說明:
15365
			#取得資料表所有欄位的詳細資訊
15366
			#回傳的內容:
15367
			#$result["status"],執行結果,"true"代表執行成功;"false"代表執行失敗
15368
			#$result["error"],錯誤訊息陣列
15369
			#$result["sql"],執行的sql語法
15370
			#$result["oriInput"],原始的資料表欄位資訊
15371
			#$result["everyLine"],逐行的欄位資訊
15372
			#$result["tableName"],當前查詢的資料表名稱
15373
			#$result["engine"],資料表使用的儲存引擎
15374
			#$result["charset"],資料表預設的編碼
15375
			#$result["columnName"][$i],各欄位的名稱陣列,$i爲0開始的數字,也可以使用欄位的名稱。
15376
			#$result["columnVarTypeAndLengthLimit"][$i],各欄位儲存的變數形態與長度限制,$i爲0開始的數字,也可以使用欄位的名稱。
15377
			#$result["columnVarType"][$i],各欄位變數儲存的型態,$i爲1開始的數字,也可以使用欄位的名稱.
15378
			#$result["columnVarLengthLimit"][$i],個欄位變數的長度限制,若不存在其限制,則為"",$i爲1開始的數字,也可以使用欄位的名稱.
15379
			#$result["columnNotNull"][$i],各欄位是否可以不爲null,"true"爲可以不爲null;"false"爲可以爲"null",$i爲0開始的數字,也可以使用欄位的名稱。
15380
			#$result["columnAutoIncrement"][$i],各欄位是否會自動加1,"true"爲會;"false"爲不會,$i爲0開始的數字,也可以使用欄位的名稱。
15381
			#$result["columnDefault"][$i],各欄位的預設內容,若無則爲"沒有指定",$i爲0開始的數字,也可以使用欄位的名稱。
15382
			#$result["columnOnUpdateAction"][$i],當資料有修改時,該欄位的內容要怎麼因應,$i爲0開始的數字,也可以使用欄位的名稱。
15383
			#$result["columnCharacterSet"][$i],各欄位使用的CharacterSet,$i爲0開始的數字,也可以使用欄位的名稱。
15384
			#$result["columnCollate"][$i],各欄位使用的Collate,$i爲0開始的數字,也可以使用欄位的名稱。
15385
			#$result["key"]["exist"],該資料表是否有索引鍵,"true"代表有;"false"代表沒有。
15386
			#$result["key"][$j],該資料表的索引鍵陣列,$j爲0開始的數字,也可以使用欄位的名稱。
15387
			#$result["keyConstraintName"][$j],該資料表用於識別索引鍵的CONSTRAINT名稱陣列,$j爲0開始的數字,也可以使用欄位的名稱。
15388
			#$result["primaryKey"],該資料表的主鍵
15389
			#$result["foreignKey"]["exist"],該資料表是否有foreign key,"true"代表有;"fasle"代表沒有。
15390
			#$result["foreignKey"]["constraintName"][$k],用來識別外鍵的CONSTRAINT名稱陣列,$k爲0開始的數字,也可以使用欄位的名稱。
15391
			#$result["foreignKey"]["columnName"][$k],外鍵的名稱陣列,$k爲0開始的數字,也可以使用欄位的名稱。
15392
			#$result["foreignKey"]["referencesTable"][$k],外鍵參照的欄位,$k爲0開始的數字
15393
			#$result["foreignKey"]["referencesColumn"][$k],外鍵參照的欄位屬於哪個資料表,$k爲0開始的數字
15394
			#$result["foreignKey"]["OnUpdateAction"][$l],當參照的欄位資料更新時,會怎麼同步,$l爲0開始的數字
15395
			#$result["foreignKey"]["OnDeleteAction"][$m],當參照的欄位資料移除時,會怎麼同步,$m爲0開始的數字
15396
			#必填參數:
15397
			$conf["db"]["getTableColumnDetailInfo"]["dbAddress"]=$conf["dbAddress"];#資料庫的網路位置
15398
			$conf["db"]["getTableColumnDetailInfo"]["dbAccount"]=$conf["dbAccount"];#連線到資料庫要用的帳號
15399
			$conf["db"]["getTableColumnDetailInfo"]["selectedDataBase"]=$conf["selectedDataBaseName"];#連線到資料庫要選擇的資料庫
15400
			$conf["db"]["getTableColumnDetailInfo"]["selectedDataTable"]=$tableName;#連線到資料庫要檢視的資料表
15401
			#可省略參數:
15402
 
15403
			#如果有設定 $conf["dbPassword"]
15404
			if(isset($conf["dbPassword"])){
15405
 
15406
				#則套用設定
15407
				$conf["db"]["getTableColumnDetailInfo"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
15408
 
15409
				}#if end
15410
 
15411
			#如果有設定 $conf["dbPort"]
15412
			if(isset($conf["dbPort"])){
15413
 
15414
				#則套用設定
15415
				$conf["db"]["getTableColumnDetailInfo"]["dbPort"]=$conf["dbPort"];#爲連線到mysql-Server時要使用的port,預設為3306.
15416
 
15417
				}#if end
15418
 
15419
			$columnData=db::getTableColumnDetailInfo($conf["db"]["getTableColumnDetailInfo"]);
15420
			unset($conf["db"]["getTableColumnDetailInfo"]);
15421
 
15422
			#如果取得資料表結構詳細資訊失敗
15423
			if($columnData["status"]=="false"){
15424
 
15425
				#設置執行錯誤的識別
15426
				$result["status"]="fasle";
15427
 
15428
				#設置錯誤訊息
15429
				$result["error"]=$columnData;
15430
 
15431
				#回傳結果
15432
				return $result;
15433
 
15434
				}#if end
15435
 
15436
			#儲存當前資料表的主鍵所屬資料表名稱
15437
			$result["primaryKey"][$tableCount]["dtName"]=$tableName;
15438
 
15439
			#如果該資料表沒有主鍵
15440
			if(!isset($columnData["primaryKey"])){
15441
 
15442
				#將數值設為null
15443
 
15444
				#儲存當前資料表的主鍵欄位名稱
15445
				$result["primaryKey"][$tableCount]["columnName"]=null;
15446
 
15447
				#儲存當前資料表的主鍵欄位的儲存形態
15448
				$result["primaryKey"][$tableCount]["columnVarType"]=null;
15449
 
15450
				#儲存當前資料表的主鍵欄位的儲存長度限制
15451
				$result["primaryKey"][$tableCount]["columnVarLengthLimit"]=null;
15452
 
15453
				#儲存當前資料表的主鍵欄位的儲存形態與長度限制
15454
				$result["primaryKey"][$tableCount]["columnVarTypeAndLengthLimit"]=null;
15455
 
15456
				}#if end
15457
 
15458
			#反之有主鍵
15459
			else{
15460
 
15461
				#儲存當前資料表的主鍵欄位名稱
15462
				$result["primaryKey"][$tableCount]["columnName"]=$columnData["primaryKey"];
15463
 
15464
				#儲存當前資料表的主鍵欄位的儲存形態
15465
				$result["primaryKey"][$tableCount]["columnVarType"]=$columnData["columnVarType"][$columnData["primaryKey"]];
15466
 
15467
				#儲存當前資料表的主鍵欄位的儲存長度限制
15468
				$result["primaryKey"][$tableCount]["columnVarLengthLimit"]=$columnData["columnVarLengthLimit"][$columnData["primaryKey"]];
15469
 
15470
				#儲存當前資料表的主鍵欄位的儲存形態與長度限制
15471
				$result["primaryKey"][$tableCount]["columnVarTypeAndLengthLimit"]=$columnData["columnVarTypeAndLengthLimit"][$columnData["primaryKey"]];
15472
 
15473
				}#else end
15474
 
15475
			#資料表計數加1
15476
			$tableCount++;			
15477
 
15478
			#如果有index key
15479
			if($columnData["key"]["exist"]=="true"){
15480
 
15481
				#依據每個index key
15482
				for($i=0;$i<count($columnData["key"]);$i++){
15483
 
15484
					#如果該元素不存在
15485
					if(!isset($columnData["key"][$i])){
15486
 
15487
						#中斷迴圈
15488
						break;
15489
 
15490
						}#if end
15491
 
15492
					#取得其index key欄位
15493
					$tempColumnName=$result["indexKey"]["columnName"][]=$columnData["key"][$i];
15494
 
15495
					#如果 $columnData["columnVarTypeAndLengthLimit"][$i] 有設置
15496
					if(isset($columnData["columnVarTypeAndLengthLimit"][$tempColumnName])){
15497
 
15498
						#取得該欄位的儲存變數型別與長度限制
15499
						$result["indexKey"]["typeAndLength"][]=$columnData["columnVarTypeAndLengthLimit"][$tempColumnName];
15500
 
15501
						}#if end
15502
 
15503
					#反之
15504
					else{
15505
 
15506
						#將 得該欄位的儲存變數型別與長度限制 設為 ""
15507
						$result["indexKey"]["typeAndLength"][]="";
15508
 
15509
						}#else end	
15510
 
15511
					#取得其index key的所屬資料表
15512
					$result["indexKey"]["tableName"][]=$tableName;
15513
 
15514
					}#for end
15515
 
15516
				}#if end
15517
 
15518
			}#foreach end
15519
 
15520
		#根據每個索引鍵欄位與其所屬的資料表來建立 「索引鍵所屬資料表名稱.索引鍵欄位名稱 儲存變數型別與長度」 格式的陣列
15521
		for($i=0;$i<count($result["indexKey"]["tableName"]);$i++){
15522
 
15523
			#設置 索引鍵所屬資料表名稱.索引鍵欄位名稱 格式的陣列
15524
			$result["indexKey"]["tableDotColumnName"][]=$result["indexKey"]["tableName"][$i].".".$result["indexKey"]["columnName"][$i];
15525
 
15526
			#設置 索引鍵所屬資料表名稱.索引鍵欄位名稱 欄位儲存型態與長度限制 格式的陣列
15527
			$result["indexKey"]["tableDotColumnVarType"][]=$result["indexKey"]["tableName"][$i].".".$result["indexKey"]["columnName"][$i]." ".$result["indexKey"]["typeAndLength"][$i];
15528
 
15529
			}#for end
15530
 
15531
		#組裝主鍵與索引鍵的資訊
15532
		#$result["content"][$i]["tableName"],欄位所屬的資料表名稱.
15533
		#$result["content"][$i]["columnKey"],是"primary key"還是"index key".
15534
		#$result["content"][$i]["columnName"],欄位名稱.
15535
		#$result["content"][$i]["typeAndLength"],欄位儲存形態與長度限制.
15536
		#$result["content"][$i]["tableDotColumnName"],欄位的「鍵所屬資料表名稱.鍵欄位名稱」.
15537
		#$result["content"][$i]["tableDotColumnVarType"],「資料索引鍵所屬資料表名稱.索引鍵欄位名稱 儲存變數型別與長度」.
15538
		#$result["indexKey"]["tableName"],index key欄位所屬的資料表陣列
15539
		#$result["indexKey"]["columnName"],index key的欄位名稱陣列
15540
		#$result["indexKey"]["typeAndLength"],index key的欄位儲存型態與長度限制陣列
15541
		#$result["indexKey"]["tableDotColumnName"],index key的 「資料索引鍵所屬資料表名稱.索引鍵欄位名稱」 陣列
15542
		#$result["indexKey"]["tableDotColumnVarType"],index key的 「資料索引鍵所屬資料表名稱.索引鍵欄位名稱 儲存變數型別與長度」 陣列
15543
		#$result["primaryKey"][$tableCount]["dtName"],主鍵所屬的資料表名稱,若沒有主鍵則為null.
15544
		#$result["primaryKey"][$tableCount]["columnName"],資料表的主鍵欄位名稱,若沒有主鍵則為null.
15545
		#$result["primaryKey"][$tableCount]["columnVarType"],資料表的主鍵欄位的儲存形態,若沒有主鍵則為null..
15546
		#$result["primaryKey"][$tableCount]["columnVarLengthLimit"],資料表的主鍵欄位的儲存長度限制,若沒有主鍵則為null.
15547
		#$result["primaryKey"][$tableCount]["columnVarTypeAndLengthLimit"],儲存當前資料表的主鍵欄位的儲存形態與長度限制,若沒有主鍵則為null.
15548
 
15549
		#能夠被外鍵參照的欄位計數
15550
		$referenceColumnCount=0;
15551
 
15552
		#有幾個主鍵就執行幾次
15553
		for($i=0;$i<count($result["primaryKey"]);$i++){
15554
 
15555
			#暫存當前資料表的名稱
15556
			$dtName=$result["primaryKey"][$i]["dtName"];
15557
 
15558
			#如果主鍵欄位名稱不為 null,亦即有主鍵
15559
			if($result["primaryKey"][$i]["columnName"]!=null){
15560
 
15561
				#儲存欄位所屬的資料表名稱.
15562
				$result["content"][$referenceColumnCount]["tableName"]=$dtName;
15563
 
15564
				#儲存是"primary key"還是"index key".
15565
				$result["content"][$referenceColumnCount]["columnKey"]="primary key";
15566
 
15567
				#儲存欄位名稱
15568
				$result["content"][$referenceColumnCount]["columnName"]=$result["primaryKey"][$i]["columnName"];
15569
 
15570
				#儲存欄位儲存形態與長度限制.
15571
				$result["content"][$referenceColumnCount]["typeAndLength"]=$result["primaryKey"][$i]["columnVarLengthLimit"];
15572
 
15573
				#儲存欄位的「鍵所屬資料表名稱.鍵欄位名稱」.
15574
				$result["content"][$referenceColumnCount]["tableDotColumnName"]=$dtName.".".$result["primaryKey"][$i]["columnName"];
15575
 
15576
				#儲存欄位的「資料索引鍵所屬資料表名稱.索引鍵欄位名稱 儲存變數型別與長度」.
15577
				$result["content"][$referenceColumnCount]["tableDotColumnVarType"]=$dtName.".".$result["primaryKey"][$i]["columnName"]." ".$result["primaryKey"][$i]["columnVarTypeAndLengthLimit"];
15578
 
15579
				#能夠被外鍵參照的欄位計數加1
15580
				$referenceColumnCount++;	
15581
 
15582
				}#if end
15583
 
15584
			#用當前資料表的名稱取得索引鍵的資訊
15585
 
15586
			#所有資料表有幾個索引鍵就執行幾次
15587
			for($j=0;$j<count($result["indexKey"]["tableName"]);$j++){
15588
 
15589
				#如果是當前資料表的索引鍵
15590
				if($result["indexKey"]["tableName"][$j]==$dtName){
15591
 
15592
					#儲存欄位所屬的資料表名稱.
15593
					$result["content"][$referenceColumnCount]["tableName"]=$dtName;
15594
 
15595
					#儲存是"primary key"還是"index key".
15596
					$result["content"][$referenceColumnCount]["columnKey"]="index key";
15597
 
15598
					#儲存欄位名稱
15599
					$result["content"][$referenceColumnCount]["columnName"]=$result["indexKey"]["columnName"][$j];
15600
 
15601
					#儲存欄位儲存形態與長度限制.
15602
					$result["content"][$referenceColumnCount]["typeAndLength"]=$result["indexKey"]["typeAndLength"][$j];
15603
 
15604
					#儲存欄位的「鍵所屬資料表名稱.鍵欄位名稱」.
15605
					$result["content"][$referenceColumnCount]["tableDotColumnName"]=$result["indexKey"]["tableDotColumnName"][$j];
15606
 
15607
					#儲存欄位的「資料索引鍵所屬資料表名稱.索引鍵欄位名稱 儲存變數型別與長度」.
15608
					$result["content"][$referenceColumnCount]["tableDotColumnVarType"]=$result["indexKey"]["tableDotColumnVarType"][$j];
15609
 
15610
					#能夠被外鍵參照的欄位計數加1
15611
					$referenceColumnCount++;	
15612
 
15613
					}#if end
15614
 
15615
				}#for end
15616
 
15617
			}#for end
15618
 
15619
		#執行到這邊代表執行成功
15620
		$result["status"]="true";
15621
 
15622
		#回傳結果
15623
		return $result;
15624
 
15625
		}#function getAllIndexKeyInAllDataBase end 
15626
 
15627
	/*
15628
	#函式說明:
15629
	#將資料表輸出成csv檔案
15630
	#回傳結果:
15631
	#$result["status"],執行是否正常,"true"代表執行正常,"false"代表執行失敗.
15632
	#$result["error"],錯誤訊息
15633
	#$result["function"],當前執行的涵式
15634
	#$result["csvFile"],輸出的csv檔案位置與名稱.
15635
	#必填參數:
15636
	#$conf["dbAddress"],字串,欲連線的mariadb/mysql伺服器IP/domainName位置.
15637
	$conf["dbAddress"]=$dbAddress;
15638
	#$conf["dbAccount"],字串,連線到mariadb/mysql所用的帳戶.
15639
	$conf["dbAccount"]=$dbAccount;
15640
	#$conf["dbName"],字串,目標資料表位於哪個資庫底下.
15641
	$conf["dbName"]=$dbName;
15642
	#$conf["dtName"],字串,目標資料表的名稱.
15643
	$conf["dtName"]="";
15644
	#可省略參數:
15645
	#$conf["dbPassword"],字串,連線到mariadb/mysql伺服器時所使用的密碼,若未設置則代表不使用密碼來連線.
15646
	#$conf["dbPassword"]=$dbPassword;
15647
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,可省略,若省略則代表使用預設的port 3306.
15648
	#$conf["dbPort"]=$dbPort;
15649
	#$conf["column"],陣列,要的欄位名稱,預設為「array(*)」代表所有欄位都要, 
15650
	#$conf["column"]=array("*");
15651
	#$conf["WhereColumnName"],陣列,篩選用的特定欄位
15652
	#$conf["WhereColumnName"]=array("");
15653
	#$conf["WhereColumnValue"],陣列,篩選用特定欄位的數值要等於多少才是我們要的.
15654
	#$conf["WhereColumnValue"]=array("");
15655
	#$conf["groupBy"],陣列,爲要以哪幾個欄爲作爲分羣的依據(欄位相同的數值僅會取出一筆).
15656
	#$conf["groupBy"]=array("");
15657
	#$conf["orderItem"],字串,爲排序的項目依據,若要用隨機抽樣,可以用"rand()",可省略。
15658
	#$conf["orderItem"]="";#
15659
	#$conf["ascORdesc"],字串,爲要低增還是遞減排序,asc爲遞增;desc爲遞減。
15660
	#$conf["ascORdesc"]="asc";
15661
	#$conf["outPutPathAndName"],字串,輸出的csv檔案要存放在哪裡.
15662
	#$conf["outPutPathAndName"]="";
15663
	#$conf["noDownload"],字串,如果爲"true"則代表不要讓使用者下載,但會回傳檔案的相對位置
15664
	#$conf["noDownload"]="true";
15665
	#參考資料:
15666
	#無.
15667
	#備註:
15668
	#無.
15669
	*/
15670
	public static function exportTableToCsv($conf){
15671
 
15672
		#初始化要回傳的內容
15673
		$result=array();
15674
 
15675
		#取得當前執行的函數名稱
15676
		$result["function"]=__FUNCTION__;
15677
 
15678
		#如果 $conf 不為陣列
15679
		if(gettype($conf)!="array"){
15680
 
15681
			#設置執行失敗
15682
			$result["status"]="false";
15683
 
15684
			#設置執行錯誤訊息
15685
			$result["error"][]="\$conf變數須為陣列形態";
15686
 
15687
			#如果傳入的參數為 null
15688
			if($conf==null){
15689
 
15690
				#設置執行錯誤訊息
15691
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
15692
 
15693
				}#if end
15694
 
15695
			#回傳結果
15696
			return $result;
15697
 
15698
			}#if end
15699
 
15700
		#檢查參數
15701
		#函式說明:
15702
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
15703
		#回傳結果:
15704
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15705
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
15706
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
15707
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
15708
		#必填參數:
15709
		$conf["db"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
15710
		$conf["db"]["isexistMuti"]["variableCheck"]=array("dbAddress","dbAccount","dbName","dtName");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
15711
		#可省略參數:
15712
		$conf["db"]["isexistMuti"]["variableType"]=array("string","string","string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
15713
		$conf["db"]["isexistMuti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
15714
		$checkResult=variableCheck::isexistMulti($conf["db"]["isexistMuti"]);
15715
		unset($conf["db"]["isexistMuti"]);
15716
 
15717
		#如果 $checkResult["status"] 等於 "false"
15718
		if($checkResult["status"]=="false"){
15719
 
15720
			#設置錯誤識別
15721
			$result["status"]="false";
15722
 
15723
			#設置錯誤訊息
15724
			$result["error"]=$checkResult;
15725
 
15726
			#回傳結果
15727
			return $result;
15728
 
15729
			}#if end
15730
 
15731
		#如果 $checkResult["passed"] 等於 "false"
15732
		if($checkResult["passed"]=="false"){
15733
 
15734
			#設置錯誤識別
15735
			$result["status"]="false";
15736
 
15737
			#設置錯誤訊息
15738
			$result["error"]=$checkResult;
15739
 
15740
			#回傳結果
15741
			return $result;
15742
 
15743
			}#if end
15744
 
15745
		#如果 $conf["column"] 沒有設置
15746
		if(!isset($conf["column"])){
15747
 
15748
			#則代表要全部的欄位
15749
			$conf["column"]=array("*");
15750
 
15751
			}#if end
15752
 
15753
		#抓取資料表資料
15754
		#函式說明:
15755
		#一次取得資料庫、表的資料
15756
		#回傳結果:
15757
		#$result["status"],執行結果"true"為成功;"false"為執行失敗。
15758
		#$result["error"],錯誤訊息陣列。
15759
		#$result["dataColumnName"],抓取的資料欄位名稱陣列.
15760
		#$result["dataColumnName"][$i]代表第$i+1個欄位名稱
15761
		#$result["dataContent"],爲資料的內容。
15762
		#$result["dataContent"][$conf["WhereColumnName"][$i]][$dataSetNum]
15763
			#$dataSetNum 爲第$dataSetNum+1筆資料
15764
			#$conf["WhereColumnName"][$i] 爲第 $i+1 個欄位的名稱
15765
		#$result["dataCount"],爲取得的資料筆數。
15766
		#$result["sql"],執行的sql字串.
15767
		#必填參數:
15768
		$conf["db"]["fastGetDbData"]["dbAddress"]=$conf["dbAddress"];#爲dbServer的位置。
15769
		$conf["db"]["fastGetDbData"]["dbAccount"]=$conf["dbAccount"];#爲登入dbServer的帳號。
15770
		$conf["db"]["fastGetDbData"]["dbName"]=$conf["dbName"];#爲要存取的資料庫名稱
15771
		$conf["db"]["fastGetDbData"]["tableName"]=$conf["dtName"];#爲要存取的資料表名稱
15772
		$conf["db"]["fastGetDbData"]["columnYouWant"]=$conf["column"];#你想要的欄位!
15773
		#可省略參數:
15774
 
15775
		#如果 $conf["dbPassword"] 有設置 
15776
		if(isset($conf["dbPassword"])){
15777
 
15778
			#則設定進行連線密碼
15779
			$conf["db"]["fastGetDbData"]["dbPassword"]=$conf["dbPassword"];#爲要存取dbServer的密碼
15780
 
15781
			}#if end
15782
 
15783
		#如果 $conf["dbPort"] 有設置 
15784
		if(isset($conf["dbPort"])){
15785
 
15786
			#則設定進行連線的 port
15787
			$conf["db"]["fastGetDbData"]["dbPort"]=$conf["dbPort"];#爲要存取dbServer的port
15788
 
15789
			}#if end
15790
 
15791
		#如果 $conf["WhereColumnName"] 有設置
15792
		if(isset($conf["WhereColumnName"])){
15793
 
15794
			$conf["db"]["fastGetDbData"]["WhereColumnName"]=$conf["WhereColumnName"];#用於判斷語句的欄位項目陣列。
15795
 
15796
			}#if end
15797
 
15798
		#如果 $conf["WhereColumnValue"] 有設置
15799
		if(isset($conf["WhereColumnValue"])){
15800
 
15801
			$conf["db"]["fastGetDbData"]["WhereColumnValue"]=$conf["WhereColumnValue"];#用於判斷語句的欄位數值陣列,若與LIKE搭配,則可以在關鍵自字串的左右名加上「%」符號,這樣就可以搜尋具有該字串的內容。
15802
 
15803
			}#if end
15804
 
15805
		#$conf["db"]["fastGetDbData"]["WhereColumnCombine"]=array("");#用於判斷語句當中需要()起來的判斷式,須爲陣列值,"s"代表「(」,"e"代表「)」 ,若無則須設爲""。
15806
		#$conf["db"]["fastGetDbData"]["WhereColumnOperator"]=array("");#用於判斷語句的比較符號陣列,可以用的符號有「"="、">"、"<"、"LIKE"、"NOT LIKE"」,預設都爲「=」。
15807
		#$conf["db"]["fastGetDbData"]["WhereColumnAndOr"]=array("");#用於判斷語句條件之間成立的條件是AND還是OR,須爲陣列值。其數量應爲要判斷的欄位數量減一。
15808
 
15809
		#如果 $conf["orderItem"] 有設定
15810
		if(isset($conf["orderItem"])){
15811
 
15812
			$conf["db"]["fastGetDbData"]["orderItem"]=$conf["orderItem"];#爲排序的項目依據,若要用隨機抽樣,可以用"rand()",可省略。
15813
 
15814
			}#if end
15815
 
15816
		#如果 $conf["ascORdesc"] 有設定
15817
		if(isset($conf["ascORdesc"])){
15818
 
15819
 
15820
			$conf["db"]["fastGetDbData"]["ascORdesc"]=$conf["ascORdesc"];#爲要低增還是遞減排序,asc爲遞增;desc爲遞減。
15821
 
15822
			}#if end
15823
 
15824
		#$conf["db"]["fastGetDbData"]["numberStart"]="0";#為從第幾筆開始讀取,預設為0,代筆第一筆。
15825
		#$conf["db"]["fastGetDbData"]["numLimit"]="30";#為要取幾筆資料,可以省略,省略則表示不限制數目。
15826
 
15827
		#如果 $conf["groupBy"] 有設定
15828
		if(isset($conf["groupBy"])){
15829
 
15830
			$conf["db"]["fastGetDbData"]["groupBy"]=$conf["groupBy"];#爲要以哪幾個欄爲作爲分羣的依據(欄位相同的數值僅會取出一筆).
15831
 
15832
			}#if end
15833
 
15834
		$db["fastGetDbData"]=db::fastGetDbData($conf["db"]["fastGetDbData"]);
15835
		unset($conf["db"]["fastGetDbData"]);
15836
 
15837
		#var_dump($db["fastGetDbData"]);
15838
 
15839
		#如果 $db["fastGetDbData"]["status"] 等於 "false"
15840
		if($db["fastGetDbData"]["status"]=="false"){
15841
 
15842
			#設置錯誤識別
15843
			$result["status"]="false";
15844
 
15845
			#設置錯誤訊息
15846
			$result["error"]=$db["fastGetDbData"];
15847
 
15848
			#回傳結果
15849
			return $result;
15850
 
15851
			}#if end
15852
 
15853
		#初始化要寫入的內容
15854
		$writedData[0]=$db["fastGetDbData"]["dataColumnName"];
15855
 
15856
		#var_dump($writedData);
15857
 
15858
		#取得要寫入的欄位數值
15859
 
15860
		#針對每筆資料
15861
		for($i=0;$i<$db["fastGetDbData"]["dataCount"];$i++){
15862
 
15863
			#依據每個欄位
15864
			for($j=0;$j<count($db["fastGetDbData"]["dataColumnName"]);$j++){
15865
 
15866
				#儲存到列裡面
15867
				$writedData[$i+1][]=$db["fastGetDbData"]["dataContent"][$db["fastGetDbData"]["dataColumnName"][$j]][$i];
15868
 
15869
				}#foreach end
15870
 
15871
			}#for end
15872
 
15873
		#var_dump($writedData);
15874
 
15875
		#輸出成csv檔
15876
		#函式說明:
15877
		#快速建立一個csv檔案,並且要求使用者下載。
15878
		#回傳結果::
15879
		#如果有設置$conf["noDownload"]爲"true"的話,則會回傳檔案的位置
15880
		#必填參數:
15881
		$conf["db"]["create"]["dataArray"]=$writedData;#要寫入的文字,$conf["dataArray"][$i],代表第 $i 行的內容。
15882
		#可省略參數:
15883
 
15884
		#如果有設置 $conf["outPutPathAndName"]
15885
		if(isset($conf["outPutPathAndName"])){
15886
 
15887
			$conf["db"]["create"]["csvFilePathAndName"]=$conf["outPutPathAndName"];#csv檔案的名稱,預設爲系統時間
15888
 
15889
			}#if end
15890
 
15891
		#如果 $conf["noDownload"] 有設置
15892
		if(isset($conf["noDownload"])){
15893
 
15894
			#且$conf["noDownload"]等於"true"
15895
			if($conf["noDownload"]=="true"){
15896
 
15897
				$conf["db"]["create"]["noDownload"]="true";#如果爲"true"則代表不要讓使用者下載,但會回傳檔案的相對位置
15898
 
15899
				}#if end	
15900
 
15901
			}#if end
15902
 
15903
		#參考資料來源:
15904
		#http://php.net/manual/en/function.str-split.php
15905
		return csv::create($conf["db"]["create"]);
15906
		unset($conf["db"]["create"]);
15907
 
15908
		}#funciton exportTableToCsv end
15909
 
15910
	/*
15911
	#函式說明:
15912
	#透過一筆筆將資料表刪除後,重設識別欄位的自動增量欄位起始值為1
15913
	#回傳結果:
15914
	#$result["status"],執行是否正常,"true"代表執行正常,"false"代表執行失敗.
15915
	#$result["error"],錯誤訊息.
15916
	#$result["function"],當前執行的函數名稱.
15917
	#$result["sql"],執行的sql語法陣列.
15918
	#必填參數:
15919
	#$conf["dbAddress"],字串,連線到資料庫的位置.
15920
	$conf["dbAddress"]=$dbAddress;
15921
	#$conf["dbAccount"],字串,連線到資料庫的帳號.
15922
	$conf["dbAccount"]=$dbAccount;
15923
	#$conf["dbName"],字串,要連線到哪個資料庫.
15924
	$conf["dbName"]=$dbName;
15925
	#$conf["dtName"],字串,要重設重設識別欄位的自動增量為0的資料表名稱.
15926
	$conf["dtName"]="";
15927
	#可省略參數:
15928
	#$conf["dbPassword"],字串,連線到資料庫的密碼.
15929
	#$conf["dbPassword"]=$dbPassword;
15930
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,可省略,若省略則代表使用預設的port 3306.
15931
	#$conf["dbPort"]=$dbPort;
15932
	#參考資料:
15933
	#http://dev.mysql.com/doc/refman/5.0/en/alter-table.html
15934
	#備註:
15935
	#參考語法,ALTER TABLE dbName.dtName AUTO_INCREMENT = 1;
15936
	*/
15937
	public static function eraseDataInTableThenResetAutoIncrement(&$conf){
15938
 
15939
		#初始化要回傳的內容
15940
		$result=array();
15941
 
15942
		#取得當前執行的函數名稱
15943
		$result["function"]=__FUNCTION__;
15944
 
15945
		#如果 $conf 不為陣列
15946
		if(gettype($conf)!="array"){
15947
 
15948
			#設置執行失敗
15949
			$result["status"]="false";
15950
 
15951
			#設置執行錯誤訊息
15952
			$result["error"][]="\$conf變數須為陣列形態";
15953
 
15954
			#如果傳入的參數為 null
15955
			if($conf==null){
15956
 
15957
				#設置執行錯誤訊息
15958
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
15959
 
15960
				}#if end
15961
 
15962
			#回傳結果
15963
			return $result;
15964
 
15965
			}#if end
15966
 
15967
		#檢查參數
15968
		#函式說明:
15969
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
15970
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15971
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
15972
		#$result["function"],當前執行的函式名稱.
15973
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
15974
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
15975
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
15976
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
15977
		#必填參數:
15978
		#$conf["variableCheck.checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
15979
		$conf["variableCheck.checkArguments"]["varInput"]=&$conf;
15980
		#$conf["variableCheck.checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
15981
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableName"]=array("dbAddress","dbAccount","dbName","dtName");
15982
		#$conf["variableCheck.checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
15983
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableType"]=array("string","string","string","string");
15984
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
15985
		$conf["variableCheck.checkArguments"]["referenceVarKey"]="variableCheck.checkArguments";
15986
		#可省略參數:
15987
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"false"。
15988
		#$conf["canBeEmptyString"]="false";
15989
		#$conf["variableCheck.checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
15990
		$conf["variableCheck.checkArguments"]["skipableVariableName"]=array("dbPassword","dbPort");
15991
		#$conf["variableCheck.checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
15992
		$conf["variableCheck.checkArguments"]["skipableVariableType"]=array("string","string");
15993
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
15994
		#$conf["skipableVarDefaultValue"]=array("");
15995
		$checkResult=variableCheck::checkArguments($conf["variableCheck.checkArguments"]);
15996
		unset($conf["variableCheck.checkArguments"]);
15997
 
15998
		#如果 檢查參數 失敗
15999
		if($checkResult["status"]=="false"){
16000
 
16001
			#設置執行不正常
16002
			$result["status"]="false";
16003
 
16004
			#設置執行錯誤
16005
			$result["error"]=$checkResult;
16006
 
16007
			#回傳節果
16008
			return $result;
16009
 
16010
			}#if end
16011
 
16012
		#如果 檢查參數 不通過
16013
		if($checkResult["passed"]=="false"){
16014
 
16015
			#設置執行不正常
16016
			$result["status"]="false";
16017
 
16018
			#設置執行錯誤
16019
			$result["error"]=$checkResult;
16020
 
16021
			#回傳節果
16022
			return $result;
16023
 
16024
			}#if end
16025
 
16026
		#執行一筆筆移除資料的sql語法
16027
		#函式說明:
16028
		#執行mysql指令
16029
		#回傳結果::
16030
		#$result["status"],"true"為執行成功;"false"為執行失敗。
16031
		#$result["error"],錯誤訊息的陣列
16032
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
16033
		#$result["queryString"],mysql查詢的語言
16034
		#查詢號的解果,需要解析。
16035
		#必填參數:
16036
		$conf["db.execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
16037
		$conf["db.execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
16038
		$conf["db.execMysqlQuery"]["dbSql"]="DELETE FROM `".$conf["dbName"]."`.`".$conf["dtName"]."` ";#要執行sql語法
16039
		#可省略參數: 
16040
 
16041
		#如果有設置 $conf["dbPassword"]
16042
		if(isset($conf["dbPassword"])){
16043
 
16044
			$conf["db.execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
16045
 
16046
			}#if end
16047
 
16048
		#如果有設置 $conf["dbPort"]
16049
		if(isset($conf["dbPort"])){
16050
 
16051
			$conf["db.execMysqlQuery"]["dbPort"]=$conf["dbPort"];#爲連線到mysql-Server時要使用的port,可省略,若省略則代表預設的3306 port.
16052
 
16053
			}#if end
16054
 
16055
		$queryResult=db::execMysqlQuery($conf["db.execMysqlQuery"]);
16056
		unset($conf["db.execMysqlQuery"]);
16057
 
16058
		#如果執行 sql 語法失敗
16059
		if($queryResult["status"]=="false"){
16060
 
16061
			#設置執行不正常
16062
			$result["status"]="false";
16063
 
16064
			#設置執行錯誤
16065
			$result["error"]=$queryResult;
16066
 
16067
			#回傳節果
16068
			return $result;
16069
 
16070
			}#if end
16071
 
16072
		#取得所執行的sql語法
16073
		$result["sql"][]=$queryResult["queryString"];		
16074
 
16075
		#執行重設增量的sql語法
16076
		#函式說明:
16077
		#執行mysql指令
16078
		#回傳結果::
16079
		#$result["status"],"true"為執行成功;"false"為執行失敗。
16080
		#$result["error"],錯誤訊息的陣列
16081
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
16082
		#$result["queryString"],mysql查詢的語言
16083
		#查詢號的解果,需要解析。
16084
		#必填參數:
16085
		$conf["db.execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
16086
		$conf["db.execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
16087
		$conf["db.execMysqlQuery"]["dbSql"]="ALTER TABLE ".$conf["dbName"].".".$conf["dtName"]." AUTO_INCREMENT = 1";#要執行sql語法
16088
		#如果有設置 $conf["dbPassword"]
16089
		if(isset($conf["dbPassword"])){
16090
 
16091
			$conf["db.execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
16092
 
16093
			}#if end
16094
 
16095
		#如果有設置 $conf["dbPort"]
16096
		if(isset($conf["dbPort"])){
16097
 
16098
			$conf["db.execMysqlQuery"]["dbPort"]=$conf["dbPort"];#爲連線到mysql-Server時要使用的port,可省略,若省略則代表預設的3306 port.
16099
 
16100
			}#if end
16101
 
16102
		$queryResult=db::execMysqlQuery($conf["db.execMysqlQuery"]);
16103
		unset($conf["db.execMysqlQuery"]);
16104
 
16105
		#如果執行 sql 語法失敗
16106
		if($queryResult["status"]=="false"){
16107
 
16108
			#設置執行不正常
16109
			$result["status"]="false";
16110
 
16111
			#設置執行錯誤
16112
			$result["error"]=$queryResult;
16113
 
16114
			#回傳節果
16115
			return $result;
16116
 
16117
			}#if end
16118
 
16119
		#取得所執行的sql語法
16120
		$result["sql"][]=$queryResult["queryString"];
16121
 
16122
		#設置執行正常
16123
		$result["status"]="true";
16124
 
16125
		#回傳結果
16126
		return $result;
16127
 
16128
		}#function eraseDataInTableThenResetAutoIncrement end
16129
 
16130
	}#db class end
16131
 
16132
?>