Subversion Repositories php-qbpwcf

Rev

Rev 3 | Rev 177 | 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
		#如果檢查失敗
650
		if($checkResult["status"]=="false"){
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";
664
		if($checkResult["passed"]=="false"){
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
 
701
			}#if end	
702
 
703
		$con=db::mysqlConnect($conf["db"]["mysqlConnect"]);
704
		unset($conf["db"]["mysqlConnect"]);
705
 
706
		#如果連線失敗
707
		if($con["status"]=="false"){
708
 
709
			#提示訊息
710
			$result["error"]=$con;
711
 
712
			#設置執行失敗
713
			$result["status"]="false";
714
 
715
			#回傳結果
716
			return $result;
717
 
718
			}#if end
719
 
720
		#選取資料庫
721
		#如果連線失敗
722
		if(!(mysqli_select_db($con["connectInformation"],$conf["dbName"]))){
723
 
724
			#設置連線失敗的提示
725
			$result["error"][]="選取資料庫失敗";
726
 
727
			#取得連線時的錯誤編號
728
			$result["error"][]=mysqli_connect_errno();
729
 
730
			#取得連線時的錯誤訊息
731
			$result["error"][]=mysqli_connect_error();
732
 
733
			#設置執行失敗
734
			$result["status"]="false";
735
 
736
			#回傳結果
737
			return $result;	 
738
 
739
			}#if end
740
 
741
		#取得mysqli物件
742
		$result["connectInformation"]=$con["connectInformation"];
743
 
744
		#設置執行正常
745
		$result["status"]="true";
746
 
747
		#回傳結果
748
		return $result;	 
749
 
750
		}#function dbConnect end
751
 
752
	/*
753
	#函式說明:
754
	#執行mysql指令
755
	#回傳結果::
756
	#$result["status"],"true"為執行成功;"false"為執行失敗。
757
	#$result["error"],錯誤訊息的陣列
758
	#$result["function"],當前執行的涵式
759
	#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
760
	#$result["queryConn"],mysql用來查尋的連資源. 
761
	#$result["queryString"],要執行的sql內容.
762
	#必填參數:
763
	#$conf["dbSql"],字串,要執行sql語法
764
	$conf["dbSql"]="";
765
	#可省略參數:
766
	#$conf["dbLink"],物件,mysqli物件,由mysqli_connect()回傳的物件內容,若為數值則改用賬號密碼等資訊進行連線,反之則沿用連線物件.
767
	$conf["dbLink"]="";
768
	#$conf["dbAddress"],字串,爲mysql-Server的位置。
769
	$conf["dbAddress"]=$dbAddress;
770
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號。
771
	$conf["dbAccount"]=$dbAccount; 
772
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼。
773
	#$conf["dbPassword"]=$dbPassword;
774
	#$conf["dbName"],字串,爲要連的資料庫名稱
775
	#$conf["dbName"]="";
776
	#$conf["dbPort"],字串,為連線到mysql-Server時對應的port,可省略,預設為3306.
777
	#$conf["dbPort"]="3306";
778
	#$conf["autoClose"],字串,"true"代表要自動斷線,預設為"true"會自動斷線
779
	#$conf["autoClose"]="true";
780
	#參考資料:
781
	#無.
782
	#備註:
783
	#無.
784
	*/
785
	public static function execMysqlQuery(&$conf){
786
 
787
		#初始化要回傳的內容
788
		$result=array();
789
 
790
		#取得當前執行的函數名稱
791
		$result["function"]=__FUNCTION__;
792
 
793
		#如果 $conf 不為陣列
794
		if(gettype($conf)!="array"){
795
 
796
			#設置執行失敗
797
			$result["status"]="false";
798
 
799
			#設置執行錯誤訊息
800
			$result["error"][]="\$conf變數須為陣列形態";
801
 
802
			#如果傳入的參數為 null
803
			if($conf===null){
804
 
805
				#設置執行錯誤訊息
806
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
807
 
808
				}#if end
809
 
810
			#回傳結果
811
			return $result;
812
 
813
			}#if end
814
 
815
		#檢查參數
816
		#函式說明:
817
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
818
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
819
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
820
		#$result["function"],當前執行的函式名稱.
821
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
822
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
823
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
824
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
825
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
826
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
827
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
828
		#必填參數:
829
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
830
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
831
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
832
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("dbSql");
833
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
834
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
835
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
836
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
837
		#可省略參數:
838
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
839
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
840
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
841
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("dbLink","dbAddress","dbAccount","dbPassword","dbName","dbPort","autoClose","mysqli");
842
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
843
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("object","string","string","string","string","string","string",null);
844
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
845
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null,null,null,null,null,"true",null);
846
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
847
		#$conf["arrayCountEqualCheck"][]=array();
848
		#參考資料:
849
		#array_keys=>http://php.net/manual/en/function.array-keys.php
850
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
851
		unset($conf["variableCheck::checkArguments"]);
852
 
853
		#如果檢查失敗
854
		if($checkResult["status"]=="false"){
855
 
856
			#設置錯誤識別
857
			$result["status"]="fasle";
858
 
859
			#設置錯誤訊息
860
			$result["error"]=$checkResult;
861
 
862
			#回傳解果
863
			return $result;
864
 
865
			}#if end
866
 
867
		#如果 $checkResult["status"]等於"false";
868
		if($checkResult["passed"]==="false"){
869
 
870
			#設置錯誤識別
871
			$result["status"]="fasle";
872
 
873
			#設置錯誤訊息
874
			$result["error"]=$checkResult;
875
 
876
			#回傳解果
877
			return $result;
878
 
879
			}#if end
880
 
881
		#如果沒有 dbLink
882
		if(!isset($conf["dbLink"])){
883
 
884
			#初始化儲存mysqli物件的變數
885
			$con="";
886
 
887
			#如果有指定資料庫
888
			if(isset($conf["dbName"])){
889
 
890
				#函式說明:
891
				#連線到資料庫,結果會回傳一個陣列.
892
				#$result["status"],若連線成功則爲"true",連線失敗則爲"false".
893
				#$result["connectInformation"],爲回傳的mysql連線資訊.
894
				#$result["error"],錯誤訊息	.
895
				#$result["function"],當前執行的函數名稱.
896
				#必填參數:
897
				$conf["db::dbConnect"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
898
				$conf["db::dbConnect"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
899
				$conf["db::dbConnect"]["dbName"]=$conf["dbName"];#爲要連的資料庫名稱
900
				#可省略參數:
901
 
902
				#如果 $conf["dbPassword"] 有設置
903
				if(isset($conf["dbPassword"])){
904
 
905
					$conf["db::dbConnect"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼。
906
 
907
					}#if end
908
 
909
				#如果有設置 $conf["dbPort"] 
910
				if(isset($conf["dbPort"])){
911
 
912
					#$conf["dbPort"],字串,為連線到mysql-Server時對應的port,可省略,預設為3306.
913
					$conf["db::dbConnect"]["dbPort"]=$conf["dbPort"];
914
 
915
					}#if end
916
 
917
				$con=db::dbConnect($conf["db::dbConnect"]);
918
				unset($conf["db::dbConnect"]);
919
 
920
				#如果連線失敗
921
				if($con["status"]=="false"){
922
 
923
					#設置執行失敗的訊息
924
					$result["status"]="false";
925
 
926
					#紀錄錯誤訊息
927
					$result["error"]=$con;
928
 
929
					#回傳結果
930
					return $result;
931
 
932
					}#if end
933
 
934
				#儲存mysqli物件
935
				$result["queryConn"]=$con["connectInformation"];
936
 
937
				}#if end
938
 
939
			#反之沒有指定資料庫	
940
			else{
941
 
942
				#連線到mysql
943
				#函式說明:
944
				#連線到mysql-server,會回傳一個陣列
945
				#回傳結果:
946
				#$result["connectStatus"],若連線成功則爲0,連線失敗則爲1。
947
				#$result["connectInformation"],爲回傳的mysql連線資訊。
948
				#$result["error"],爲錯誤訊息
949
				#必填參數:
950
				$conf["db"]["mysqlConnect"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置。
951
				$conf["db"]["mysqlConnect"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號。
952
				#可省略參數:
953
 
954
				#如果 $conf["dbPassword"] 有設置
955
				if(isset($conf["dbPassword"])){
956
 
957
					$conf["db"]["mysqlConnect"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼。
958
 
959
					}#if end
960
 
961
				#如果有設置 $conf["dbPort"] 
962
				if(isset($conf["dbPort"])){
963
 
964
					#$conf["dbPort"],字串,為連線到mysql-Server時對應的port,可省略,預設為3306.
965
					$conf["db::dbConnect"]["dbPort"]=$conf["dbPort"];
966
 
967
					}#if end
170 liveuser 968
 
3 liveuser 969
				$con=db::mysqlConnect($conf["db"]["mysqlConnect"]);
970
				unset($conf["db"]);
971
 
972
				#如果連線失敗
170 liveuser 973
				if($con["status"]==="false"){
3 liveuser 974
 
975
					#設置執行失敗的訊息
976
					$result["status"]="false";
977
 
978
					#紀錄錯誤訊息
979
					$result["error"]=$con;
980
 
981
					#回傳結果
982
					return $result;
983
 
984
					}#if end
985
 
170 liveuser 986
				#debug
987
				var_dump(__LINE__,$con);
988
 
3 liveuser 989
				#儲存mysqli物件
170 liveuser 990
				$result["queryConn"]=$con["connectInformation"];
3 liveuser 991
 
992
				}#else end
993
 
994
			}#if end
995
 
996
		#反之存在 $conf["dbLink"]
997
		else{
998
 
999
			#取得db物件
1000
			$result["queryConn"]=$conf["dbLink"];
1001
 
1002
			}#else end
1003
 
1004
		#設置sql的查詢語言
1005
		$result["queryStringOri"]=$conf["dbSql"];
1006
 
1007
		#設置sql的查詢語言
1008
		$result["queryString"]=$conf["dbSql"];
1009
 
1010
		#進行查詢
1011
		#如果有錯誤訊息
1012
		if(!($mysqli_query=mysqli_query($result["queryConn"],$result["queryString"]))){
1013
 
1014
			#設置執行失敗的訊息
1015
			$result["status"]="false";
1016
 
1017
			#設置提示執行mysql語法失敗
1018
			$result["error"][]="執行mysql語法失敗";
1019
 
1020
			#取得錯誤訊息
1021
			$result["error"]["mysqlErrorNo"]=mysqli_errno($result["queryConn"]);
1022
			$result["error"]["mysqlErrorDetail"]=mysqli_error($result["queryConn"]);
1023
 
1024
			#回傳結果
1025
			return $result;
1026
 
1027
			}#if end
1028
 
1029
		#取得正確的mysqli_resource
1030
		$result["queryResource"]=$mysqli_query;
1031
 
1032
		#如果要自動斷線
1033
		if($conf["autoClose"]==="true"){
1034
 
1035
			#連線結束
1036
			#函式說明:
1037
			#關閉與mysql的連線,會回傳一個陣列。
1038
			#回傳結果::
1039
			#$result["status"],若連線成功則爲"true",連線失敗則爲"false".
1040
			#$result["connectInformation"],爲回傳的mysql連線資訊。
1041
			#$result["error"],爲錯誤訊息陣列.		
1042
			#必填參數:
1043
			#$conf["mysqli"],字串,mysqli物件.
1044
			$conf["db::mysqlClose"]["mysqli"]=$result["queryConn"];
1045
			$mysqlClose=db::mysqlClose($conf["db::mysqlClose"]);
1046
			unset($conf["db::mysqlClose"]);
1047
 
1048
			#如果關閉mysql連線失敗
1049
			if($mysqlClose["status"]=="false"){
1050
 
1051
				#設置執行失敗的訊息
1052
				$result["status"]="false";
1053
 
1054
				#紀錄錯誤訊息
1055
				$result["error"]=$mysqlClose;
1056
 
1057
				#回傳結果
1058
				return $result;
1059
 
1060
				}#if end
1061
 
1062
			}#if end
1063
 
1064
		#設置執行成功的訊息
1065
		$result["status"]="true";	
1066
 
1067
		#回傳查詢後的結果
1068
		return $result;
1069
 
1070
		}#function execMysqlQuery end
1071
 
1072
	/*
1073
	#函式說明:
1074
	#用shell執行mysql指令.
1075
	#回傳結果::
1076
	#$result["status"],"true"為執行成功;"false"為執行失敗。
1077
	#$result["error"],錯誤訊息的陣列
1078
	#$result["function"],當前執行的涵式
1079
	#$result["queryString"],mysql查詢的語言.
1080
	#必填參數:
1081
	#$conf["fileArgu"],字串,變數__FILE__的內容.
1082
	$conf["fileArgu"]=__FILE__;
1083
	#$conf["dbSql"],字串,要執行sql語法
1084
	$conf["dbSql"]="";
1085
	#$conf["dbAddress"],字串,爲mysql-Server的位置。
1086
	$conf["dbAddress"]=$dbAddress;
1087
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號。
1088
	$conf["dbAccount"]=$dbAccount; 
1089
	#可省略參數:
1090
	#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
1091
	#$conf["pre"]=array();
1092
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼。
1093
	#$conf["dbPassword"]=$dbPassword;
1094
	#$conf["dbName"],字串,爲要連的資料庫名稱
1095
	#$conf["dbName"]="";
1096
	#$conf["dbPort"],字串,為連線到mysql-Server時對應的port,可省略,預設為3306.
1097
	#$conf["dbPort"]="3306";
1098
	#參考資料:
1099
	#無.
1100
	#備註:
1101
	#無.
1102
	*/
1103
	public static function shell(&$conf){
1104
 
1105
		#初始化要回傳的內容
1106
		$result=array();
1107
 
1108
		#取得當前執行的函數名稱
1109
		$result["function"]=__FUNCTION__;
1110
 
1111
		#如果 $conf 不為陣列
1112
		if(gettype($conf)!="array"){
1113
 
1114
			#設置執行失敗
1115
			$result["status"]="false";
1116
 
1117
			#設置執行錯誤訊息
1118
			$result["error"][]="\$conf變數須為陣列形態";
1119
 
1120
			#如果傳入的參數為 null
1121
			if($conf===null){
1122
 
1123
				#設置執行錯誤訊息
1124
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
1125
 
1126
				}#if end
1127
 
1128
			#回傳結果
1129
			return $result;
1130
 
1131
			}#if end
1132
 
1133
		#檢查參數
1134
		#函式說明:
1135
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
1136
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1137
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
1138
		#$result["function"],當前執行的函式名稱.
1139
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
1140
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
1141
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
1142
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
1143
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
1144
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
1145
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
1146
		#必填參數:
1147
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
1148
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
1149
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
1150
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","dbSql","dbAccount");
1151
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
1152
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string");
1153
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
1154
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
1155
		#可省略參數:
1156
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
1157
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
1158
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
1159
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("pre","dbAddress","dbPassword","dbName","dbPort");
1160
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
1161
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array","string","string","string","string");
1162
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
1163
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,"localhost",null,null,"3306");
1164
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
1165
		#$conf["arrayCountEqualCheck"][]=array();
1166
		#參考資料:
1167
		#array_keys=>http://php.net/manual/en/function.array-keys.php
1168
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
1169
		unset($conf["variableCheck::checkArguments"]);
1170
 
1171
		#如果檢查失敗
1172
		if($checkResult["status"]=="false"){
1173
 
1174
			#設置錯誤識別
1175
			$result["status"]="false";
1176
 
1177
			#設置錯誤訊息
1178
			$result["error"]=$checkResult;
1179
 
1180
			#回傳解果
1181
			return $result;
1182
 
1183
			}#if end
1184
 
1185
		#如果 $checkResult["status"]等於"false";
1186
		if($checkResult["passed"]=="false"){
1187
 
1188
			#設置錯誤識別
1189
			$result["status"]="false";
1190
 
1191
			#設置錯誤訊息
1192
			$result["error"]=$checkResult;
1193
 
1194
			#回傳解果
1195
			return $result;
1196
 
1197
			}#if end
1198
 
1199
		#shell不接受「`」
1200
		#函式說明:
1201
		#處理字串避免網頁出錯
1202
		#回傳結果::
1203
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1204
		#$result["function"],當前執行的函數.
1205
		#$result["content"],爲處理好的字串.
1206
		#$result["error"],錯誤訊息陣列.
1207
		#$result["argu"],使用的參數. 
1208
		#必填參數:
1209
		$conf["stringProcess::correctCharacter"]["stringIn"]=$conf["dbSql"];#爲要處理的字串
1210
		#可省略參數:
1211
		$conf["stringProcess::correctCharacter"]["selectedCharacter"]=array("`");#爲被選擇要處理的字串/字元,須爲陣列值。
1212
			#若不設定則預設爲要將這些字串作替換 ("<",">","=","//","'","$","%","&","|","/*","*","#","\"").
1213
			#特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
1214
		$conf["stringProcess::correctCharacter"]["changeTo"]=array("");#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串).
1215
		#備註:
1216
		#無.
1217
		$correctCharacter=stringProcess::correctCharacter($conf["stringProcess::correctCharacter"]);
1218
		unset($conf["stringProcess::correctCharacter"]);
1219
 
1220
		#如果檢查失敗
1221
		if($correctCharacter["status"]=="false"){
1222
 
1223
			#設置錯誤識別
1224
			$result["status"]="false";
1225
 
1226
			#設置錯誤訊息
1227
			$result["error"]=$correctCharacter;
1228
 
1229
			#回傳解果
1230
			return $result;
1231
 
1232
			}#if end
1233
 
1234
		#取得處理後的 sql
1235
		$sql=$correctCharacter["content"];	
1236
 
1237
		#避免亂碼
1238
		$sql="SET NAMES UTF8;"."SET CHARACTER_SET_CLIENT=utf8;"."SET CHARACTER_SET_RESULTS=utf8;".$sql;
1239
 
1240
		#初始化參數
1241
		$argu=array();
1242
 
1243
		#精簡的參數
1244
		$argu[]=$sql;
1245
		$argu[]="|";
1246
		$argu[]="mysql";
1247
		$argu[]="-u";
1248
		$argu[]=$conf["dbAccount"];	
1249
 
1250
		#如果有設置 $conf["dbPassword"]
1251
		if(isset($conf["dbPassword"])){
1252
 
1253
			#加上密碼參數
1254
			$argu[]="-p".$conf["dbPassword"];
1255
 
1256
			}#if end
1257
 
1258
		#加上 位置參數
1259
		$argu[]="-h".$conf["dbAddress"];
1260
 
1261
		#如果有設置 $conf["dbName"]
1262
		if(isset($conf["dbName"])){
1263
 
1264
			#加上資料庫名稱參數
1265
			$argu[]=$conf["dbName"];
1266
 
1267
			}#if end
1268
 
1269
		#建立暫存的檔案
1270
 
1271
		#將指令寫入暫存的檔案裡面
1272
 
1273
		#函式說明:
1274
		#呼叫shell執行系統命令,並取得回傳的內容.
1275
		#回傳結果:
1276
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1277
		#$result["error"],錯誤訊息陣列.
1278
		#$result["function"],當前執行的函數名稱.
1279
		#$result["argu"],使用的參數.
1280
		#$result["cmd"],執行的指令內容.
1281
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
1282
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
1283
		#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
1284
		#$result["running"],是否還在執行.
1285
		#$result["pid"],pid.
1286
		#$result["statusCode"],執行結束後的代碼.
1287
		#必填的參數
1288
		#$conf["command"],字串,要執行的指令與.
1289
		$conf["external::callShell"]["command"]="echo";
1290
		#$conf["fileArgu"],字串,變數__FILE__的內容.
1291
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];		
1292
		#可省略參數:
1293
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
1294
		$conf["external::callShell"]["argu"]=$argu;
1295
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
1296
		#$conf["arguIsAddr"]=array();	
1297
 
1298
		#如果有參數
1299
		if(count($argu)>0){
1300
 
1301
			#$conf["thereIsShellVar"],陣列字串,指令搭配的參數"argu",若含有「\'」,則取代為「"」.每個argu參數都要有對應的元素."true"代表要置換.
1302
			$conf["external::callShell"]["thereIsShellVar"]=array();
1303
 
1304
			#針對每個參數
1305
			for($i=0;$i<count($argu);$i++){
1306
 
1307
				#第一個參數
1308
				if($i===0){
1309
 
1310
					#含有shell變數
1311
					$conf["external::callShell"]["thereIsShellVar"][$i]="true";
1312
 
1313
					}#if end
1314
 
1315
				#反之
1316
				else{
1317
 
1318
					#不含有shell變數
1319
					$conf["external::callShell"]["thereIsShellVar"][$i]="false";
1320
 
1321
					}#else 
1322
 
1323
				}#for end
1324
 
1325
			}#if end
1326
 
1327
		#如果有設置 pre
1328
		if(isset($conf["pre"])){
1329
 
1330
			#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
1331
			#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
1332
			#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
1333
			$conf["external::callShell"]["pre"]=$conf["pre"];
1334
 
1335
			}#if end
1336
 
1337
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
1338
		#$conf["enablePrintDescription"]="true";
1339
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
1340
		#$conf["printDescription"]="";
1341
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".
1342
		$conf["external::callShell"]["escapeshellarg"]="true";
1343
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
1344
		#$conf["username"]="";
1345
		#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
1346
		#$conf["password"]="";
1347
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
1348
		#$conf["useScript"]="";
1349
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
1350
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
1351
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
1352
		#$conf["inBackGround"]="";
1353
		#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
1354
		#$conf["getErr"]="false";
1355
		#$conf["doNotRun"],字串,"true"代表不執行指令,預設為"false"會執行指令.
1356
		$conf["external::callShell"]["doNotRun"]="true";
1357
		#備註:
1358
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
1359
		#參考資料:
1360
		#exec=>http://php.net/manual/en/function.exec.php
1361
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
1362
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
1363
		$callShell=external::callShell($conf["external::callShell"]);
1364
		unset($conf["external::callShell"]);
1365
 
1366
		#debug
1367
		#var_dump($callShell);
1368
		#exit;
1369
 
1370
		#如果檢查參數作業出錯
1371
		if($callShell["status"]=="false"){
1372
 
1373
			/* debug
1374
			$fsock=fopen("/var/www/html/log/log.txt","a");
1375
			fwrite($fsock,"func:".__CLASS__." line:".__LINE__.":".print_r($callShell,true).PHP_EOL.PHP_EOL);
1376
			fclose($fsock);
1377
			*/
1378
 
1379
			#設置執行錯誤識別
1380
			$result["status"]="false";
1381
 
1382
			#設置錯誤訊息
1383
			$result["error"]=$callShell;
1384
 
1385
			#回傳結果
1386
			return $result;
1387
 
1388
			}#if end
1389
 
1390
		#函式說明:
1391
		#連線到 unixDomainSockServer 提供的 unix domain socket.
1392
		#回傳結果:
1393
		#$result["status"],"true"代表執行正常;"false"代表執行不正常.
1394
		#$result["error"],錯誤訊息陣列.
1395
		#$result["function"],當前執行的函式名稱.
1396
		#$result["content"],取得的回應.
1397
		#必填參數:
1398
		#$conf["sock"],字串,要連線的unix domain socket.
1399
		$conf["sock::unixDomainSockClient"]["sock"]=qbpwcf_usock_path;
1400
		#可省略參數:
1401
		#$conf["id"],字串,取得的id,若無此值,則會得到新的數值.
1402
		#$conf["id"]="";
1403
		#$conf["cmd"],字串,要執行的指令,當$conf["id"]參數合法時,才會執行.
1404
		$conf["sock::unixDomainSockClient"]["cmd"]=$callShell["escape"]["cmd"];
1405
		#$conf["param"],參數陣列.
1406
		$conf["sock::unixDomainSockClient"]["param"]=$callShell["escape"]["argu"];
1407
		#$conf["escaped"],字串,param參數是否已經escaped了,預設為"false",反之為"true".
1408
		$conf["sock::unixDomainSockClient"]["escaped"]="true";
1409
		#$conf["clear"],字串,設為"true"代表要清除過期的用戶連線.
1410
		#$conf["clear"]="true";
1411
		#參考資料:
1412
		#http://php.net/manual/en/function.stream-socket-client.php
1413
		#http://php.net/manual/en/function.stream-get-contents.php
1414
		#備註:
1415
		#無.
1416
		$paramsOfUnixDomainSockClient=$conf["sock::unixDomainSockClient"];
1417
		$unixDomainSockClient=sock::unixDomainSockClient($conf["sock::unixDomainSockClient"]);
1418
		unset($conf["sock::unixDomainSockClient"]);
1419
 
1420
		#如果執行失敗
1421
		if($unixDomainSockClient["status"]==="false"){
1422
 
1423
			#設置執行錯誤識別
1424
			$result["status"]="false";
1425
 
1426
			#設置錯誤訊息
1427
			$result["error"]=$unixDomainSockClient;
1428
 
1429
			#回傳結果
1430
			return $result;
1431
 
1432
			}#if end
1433
 
1434
		#取得json回應
1435
		$jsonRes=json_decode($unixDomainSockClient["content"]);
1436
 
1437
		#如果執行失敗
1438
		if($jsonRes===null){
1439
 
1440
			#設置執行錯誤識別
1441
			$result["status"]="false";
1442
 
1443
			#設置錯誤訊息
1444
			$result["error"]=$unixDomainSockClient;
1445
 
1446
			#回傳結果
1447
			return $result;
1448
 
1449
			}#if end
1450
 
1451
		#如果沒有產生新id
1452
		if(!isset($jsonRes->id)){
1453
 
1454
			#設置執行錯誤識別
1455
			$result["status"]="false";
1456
 
1457
			#設置錯誤訊息
1458
			$result["error"]=$unixDomainSockClient;
1459
 
1460
			#回傳結果
1461
			return $result;
1462
 
1463
			}#if end
1464
 
1465
		#用新的id再傳送一次要求給 qbpwcf_usock_path
1466
		$paramsOfUnixDomainSockClient["id"]=$jsonRes->id;		
1467
		$unixDomainSockClient=sock::unixDomainSockClient($paramsOfUnixDomainSockClient);
1468
		unset($paramsOfUnixDomainSockClient);
1469
 
1470
		#var_dump($unixDomainSockClient);
1471
 
1472
		#如果執行失敗
1473
		if($unixDomainSockClient["status"]==="false"){
1474
 
1475
			#設置執行錯誤識別
1476
			$result["status"]="false";
1477
 
1478
			#設置錯誤訊息
1479
			$result["error"]=$unixDomainSockClient;
1480
 
1481
			#回傳結果
1482
			return $result;
1483
 
1484
			}#if end
1485
 
1486
		#執行正常
1487
		$result["status"]="true";
1488
 
1489
		#設置執行的結果
1490
		$result["content"]=$unixDomainSockClient;
1491
 
1492
		#回傳結果
1493
		return $result;
1494
 
1495
		}#function shell end
1496
 
1497
	/*
1498
	#函式說明:
1499
	#建立資料庫,會回傳一個陣列。
1500
	#回傳結果:
1501
	#$result["status"],成功爲"true",失敗爲"false".
1502
	#$result["error"],錯誤訊息.
1503
	#$result["function"],當前執行的函數名稱.
1504
	#必填參數:
1505
	#$conf["dbAddress"],字串,爲mysql-Server的位置。
1506
	$conf["dbAddress"]=$dbAddress;
1507
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號。
1508
	$conf["dbAccount"]=$dbAccount;
1509
	#$conf["newDatabaseName"],字串,爲要新增的資料庫名稱.
1510
	$conf["newDatabaseName"]="";
1511
	#$conf["dbPort"],字串,為連線到mysql-Server時對應的port,預設為3306.
1512
	$conf["dbPort"]="3306";
1513
	#可省略參數: 
1514
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼。
1515
	#$conf["dbPassword"]=$dbPassword;
1516
	#$conf["dbName"],字串,爲要連的資料庫名稱
1517
	#$conf["dbName"]="";
1518
	#參考資料:
1519
	#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/
1520
	#備註:
1521
	#無.
1522
	*/
1523
	public static function createDatabase($conf){
1524
 
1525
		#初始化錯誤訊息 
1526
		$result=array();
1527
 
1528
		#取得當前執行的函數名稱
1529
		$result["function"]=__FUNCTION__;
1530
 
1531
		#如果 $conf 不為陣列
1532
		if(gettype($conf)!="array"){
1533
 
1534
			#設置執行失敗
1535
			$result["status"]="false";
1536
 
1537
			#設置執行錯誤訊息
1538
			$result["error"][]="\$conf變數須為陣列形態";
1539
 
1540
			#如果傳入的參數為 null
1541
			if($conf==null){
1542
 
1543
				#設置執行錯誤訊息
1544
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
1545
 
1546
				}#if end
1547
 
1548
			#回傳結果
1549
			return $result;
1550
 
1551
			}#if end
1552
 
1553
		#檢查參數
1554
		#函式說明:
1555
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
1556
		#回傳結果:
1557
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
1558
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
1559
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
1560
		#必填參數:
1561
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
1562
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("dbAddress","dbPassword","newDatabaseName","dbPort");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
1563
		#可省略參數:
1564
		$conf["variableCheck"]["isexistMuti"]["variableType"]=array("string","string","string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
1565
		#$conf["variableCheck"]["isexistMuti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
1566
		#備註:
1567
		#功能與checkExistAndType函式相同
1568
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
1569
		unset($conf["variableCheck"]["isexistMuti"]);
1570
 
1571
		#如果 $checkResult["passed"] 等於 "fasle"
1572
		if($checkResult["passed"]=="false"){
1573
 
1574
			#設置錯誤識別
1575
			$result["status"]="false";
1576
 
1577
			#設置錯誤訊息
1578
			$result["error"]=$checkResult;
1579
 
1580
			#回傳結果
1581
			return $result;
1582
 
1583
			}#if end
1584
 
1585
		#建立資料庫的sql語法
1586
		$sql="CREATE DATABASE ".$conf["newDatabaseName"]."  CHARACTER SET='utf8' COLLATE='utf8_unicode_ci'";
1587
 
1588
		#函式說明:
1589
		#執行mysql指令
1590
		#回傳結果::
1591
		#$result["status"],"true"為執行成功;"false"為執行失敗。
1592
		#$result["error"],錯誤訊息的陣列
1593
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
1594
		#$result["queryString"],mysql查詢的語言
1595
		#查詢號的解果,需要解析。
1596
		#必填參數:
1597
		$conf["db"]["execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
1598
		$conf["db"]["execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
1599
		$conf["db"]["execMysqlQuery"]["dbSql"]=$sql;#要執行sql語法
1600
		#可省略參數: 
1601
 
1602
		#如果 $conf["dbPassword"] 有設定
1603
		if(isset($conf["dbPassword"])){
1604
 
1605
			$conf["db"]["execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
1606
 
1607
			}#if end
1608
 
1609
		#如果 $conf["dbPort"] 有設定
1610
		if(isset($conf["dbPort"])){
1611
 
1612
			#$conf["dbPort"],字串,為連線到mysql-Server時對應的port,可省略,預設為3306.
1613
			$conf["db"]["execMysqlQuery"]["dbPort"]=$conf["dbPort"];
1614
 
1615
			}#if end
1616
 
1617
		$db["execMysqlQuery"]=db::execMysqlQuery($conf["db"]["execMysqlQuery"]);
1618
		unset($conf["db"]["execMysqlQuery"]);
1619
 
1620
		#如果 $db["execMysqlQuery"]["status"] 等於 "false"
1621
		if($db["execMysqlQuery"]["status"]=="false"){
1622
 
1623
			#設置錯誤識別
1624
			$result["status"]="false";
1625
 
1626
			#設置錯誤訊息
1627
			$result["error"]=$db["execMysqlQuery"];
1628
 
1629
			#回傳結果
1630
			return $result;
1631
 
1632
			}#if end
1633
 
1634
		#執行道這邊代表執行正確
1635
		$result["status"]="true";
1636
 
1637
		#回傳結果
1638
		return $result;
1639
 
1640
		}#function createDatabase end
1641
 
1642
	/*
1643
	#函式說明:
1644
	#建立資料表,會回傳一個陣列。
1645
	#回傳結果:
1646
	#$result["status"],若成功則爲"true",失敗則爲"false"。
1647
	#$result["error"],錯誤訊息的陣列。
1648
	#$result["sql"],要執行的sql語法。
1649
	#$result["function"],當前執行的函數名稱.
1650
	#必填參數:
1651
	#$conf["dbAddress"],字串,爲mysql-Server的位置
1652
	$conf["dbAddress"]=$dbAddress;
1653
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號
1654
	$conf["dbAccount"]=$dbAccount;
1655
	#$conf["selectedDataBaseName"],字串,要選取的資料庫名稱	
1656
	$conf["selectedDataBaseName"]=$dbName;
1657
	#$conf["newDataTableName"],字串,爲要新增的資料表名稱.
1658
	$conf["newDataTableName"]="";
1659
	#$conf["newDataTableColmunName"],字串,為新資料表的欄位名稱.
1660
	$conf["newDataTableColmunName"]=array("id","lastUpdatedTime");
1661
	#$conf["newDataTableColmunType"],字串陣列,為新資料表的欄位儲存的型態,常見的有:int,用來儲存整數;double,用來儲存有小數點的數值;timestamp,用來儲存時間;char,用來儲存任何東西,儲存成字元
1662
	$conf["newDataTableColmunType"]=array("int","timestamp");
1663
	#$conf["newDataTableColmunDefault"],字串陣列,為該欄位的預設值,若為currentTime則為當前時間;若為updatedCurrentTime則為初始為當前時間,之後每更動一次就更新為當次時間;若為null則代表空值;若為""則為不設定;以外的內容視為指定的數值.
1664
	$conf["newDataTableColmunDefault"]=array("","updatedCurrentTime");
1665
	#$conf["newDataTableColmunLength"],字串陣列,為新資料表的欄位儲存的長度,""代表不指定長度.
1666
	$conf["newDataTableColmunLength"]=array("","");
1667
	#$conf["newDataTableColmunNull"],字串陣列,為新資料表的欄位是否可為NULL.若為no則代表不能為null;若為yes則代表可以為null.
1668
	$conf["newDataTableColmunNull"]=array("no","no");	
1669
	#$conf["newDataTableColmunAutoAdd"],字串陣列,為新資料表的欄位是否自動+1
1670
	$conf["newDataTableColmunAutoAdd"]=array("true","");
1671
	#$conf["newDataTableColmunKeyType"],字串陣列,為該欄位的鍵屬性:primary key代表主鍵;留"",代表不指定。
1672
	$conf["newDataTableColmunKeyType"]=array("primary key","");
1673
	#可省略參數:
1674
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼.
1675
	#$conf["dbPassword"]=$dbPassword;
1676
	#$conf["dbPort"],字串,為連線到mysql-Server時對應的port,可省略,預設為3306.
1677
	#$conf["dbPort"]="3306";
1678
	#參考資料:
1679
	#無.
1680
	#備註:
1681
	#無.
1682
	*/
1683
	public static function createDataTable($conf){
1684
 
1685
		#初始化要回傳的結果
1686
		$result=array();
1687
 
1688
		#取得當前執行的函數名稱
1689
		$result["function"]=__FUNCTION__;
1690
 
1691
		#如果 $conf 不為陣列
1692
		if(gettype($conf)!="array"){
1693
 
1694
			#設置執行失敗
1695
			$result["status"]="false";
1696
 
1697
			#設置執行錯誤訊息
1698
			$result["error"][]="\$conf變數須為陣列形態";
1699
 
1700
			#如果傳入的參數為 null
1701
			if($conf==null){
1702
 
1703
				#設置執行錯誤訊息
1704
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
1705
 
1706
				}#if end
1707
 
1708
			#回傳結果
1709
			return $result;
1710
 
1711
			}#if end
1712
 
1713
		#函式說明:
1714
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
1715
		#回傳結果:
1716
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
1717
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
1718
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
1719
		#必填參數:
1720
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
1721
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("dbAddress","dbAccount","selectedDataBaseName","newDataTableName","newDataTableColmunName","newDataTableColmunType","newDataTableColmunLength","newDataTableColmunDefault","newDataTableColmunNull","newDataTableColmunAutoAdd","newDataTableColmunKeyType");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
1722
		#可省略參數:
1723
		#$conf["variableType"]=array();#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
1724
		#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
1725
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
1726
		unset($conf["variableCheck"]["isexistMuti"]);
1727
 
1728
		#如果檢查動作不正常
1729
		if($checkResult["status"]=="false"){
1730
 
1731
			#設置執失敗訊息
1732
			$result["status"]="false";
1733
 
1734
			#設置錯誤訊息
1735
			$result["error"]=$checkResult;
1736
 
1737
			#回傳錯誤訊息
1738
			return $result;
1739
 
1740
			}#if end
1741
 
1742
		#如果檢查不通過
1743
		if($checkResult["passed"]=="false"){
1744
 
1745
			#設置執失敗訊息
1746
			$result["status"]="false";
1747
 
1748
			#設置錯誤訊息
1749
			$result["error"]=$checkResult;
1750
 
1751
			#回傳錯誤訊息
1752
			return $result;
1753
 
1754
			}#if end
1755
 
1756
		#建立資料表的語法
1757
		$sql="create table ".$conf["selectedDataBaseName"].".".$conf["newDataTableName"];
1758
 
1759
		#加上指定欄位內容的開頭
1760
		$sql=$sql."(";
1761
 
1762
		#針對每個欄位
1763
		for($i=0;$i<count($conf["newDataTableColmunName"]);$i++){
1764
 
1765
			#接上欄位名稱
1766
			$sql=$sql.$conf["newDataTableColmunName"][$i];
1767
 
1768
			#接上欄位儲存型態
1769
			$sql=$sql." ".$conf["newDataTableColmunType"][$i];
1770
 
1771
			#如果有設定資料長度
1772
			if($conf["newDataTableColmunLength"][$i]!=""){
1773
 
1774
				#接上欄位儲存長度
1775
				$sql=$sql." (".$conf["newDataTableColmunLength"][$i].")";
1776
 
1777
				}#if end
1778
 
1779
			#如果有設定值
1780
			if($conf["newDataTableColmunDefault"][$i]!=""){
1781
 
1782
				switch($conf["newDataTableColmunDefault"][$i]){
1783
 
1784
					#如果設為 currentTime
1785
					case "currentTime":
1786
 
1787
						#設定語法
1788
						$sql=$sql." default CURRENT_TIMESTAMP";
1789
 
1790
						#跳出switch
1791
						break;
1792
 
1793
					#如果設為updatedCurrentTime
1794
					case "updatedCurrentTime":
1795
 
1796
						#設定語法
1797
						$sql=$sql." default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP";
1798
 
1799
						#跳出switch
1800
						break;
1801
 
1802
					#如果設為 null
1803
					case "null":
1804
 
1805
						#設定語法
1806
						$sql=$sql." default null";
1807
 
1808
						#跳出switch
1809
						break;
1810
 
1811
					#如果不為以上數值
1812
					default :
1813
 
1814
						#設定語法
1815
						$sql=$sql." default ".$conf["newDataTableColmunDefault"][$i];
1816
 
1817
						#跳出switch
1818
						break;
1819
 
1820
					}#switch end
1821
 
1822
				}#if end
1823
 
1824
			#如果有設定不能為NULL
1825
			if($conf["newDataTableColmunNull"][$i]=="no"){
1826
 
1827
				$sql=$sql." NOT NULL";
1828
 
1829
				}#if end
1830
 
1831
			#如果有設定要自動加1
1832
			if($conf["newDataTableColmunAutoAdd"][$i]=="true"){
1833
 
1834
				#加上自動加1的語句
1835
				$sql=$sql." auto_increment";
1836
 
1837
				}#if end
1838
 
1839
			#如果有設定鍵的屬性
1840
			if($conf["newDataTableColmunKeyType"][$i]!=""){
1841
 
1842
				$sql=$sql." ".$conf["newDataTableColmunKeyType"][$i];
1843
 
1844
				}#if end
1845
 
1846
			#如果不是最後一個欄位
1847
			if($i!=count($conf["newDataTableColmunName"])-1){
1848
 
1849
				#加上逗號
1850
				$sql=$sql.",";					
1851
 
1852
				}#if end
1853
 
1854
			}#for end
1855
 
1856
		#加上指定欄位內容的結束
1857
		$sql=$sql.") DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ;";
1858
 
1859
		#取得sql語法
1860
		$result["sql"]=$sql;
1861
 
1862
		#var_dump($sql);
1863
 
1864
		#函式說明:
1865
		#回傳結果::
1866
		#$result["status"],"true"為執行成功;"false"為執行失敗。
1867
		#$result["error"],錯誤訊息的陣列
1868
		#查詢號的解果,需要解析。
1869
		#必填參數:
1870
		$conf["db"]["execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
1871
		$conf["db"]["execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
1872
		$conf["db"]["execMysqlQuery"]["dbSql"]=$sql;#要執行sql語法
1873
		#可省略參數: 
1874
 
1875
		#如果有設定密碼
1876
		if(isset($conf["dbPassword"])){
1877
 
1878
			$conf["db"]["execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
1879
 
1880
			}#if end
1881
 
1882
		#如果 $conf["dbPort"] 有設定
1883
		if(isset($conf["dbPort"])){
1884
 
1885
			#$conf["dbPort"],字串,為連線到mysql-Server時對應的port,可省略,預設為3306.
1886
			$conf["db"]["execMysqlQuery"]["dbPort"]=$conf["dbPort"];
1887
 
1888
			}#if end
1889
 
1890
		$queryResult=db::execMysqlQuery($conf["db"]["execMysqlQuery"]);
1891
		unset($conf["db"]["execMysqlQuery"]);
1892
 
1893
		#如果執行 sql 失敗
1894
		if($queryResult["status"]=="false"){
1895
 
1896
			#設置執行失敗訊息
1897
			$result["status"]="false";
1898
 
1899
			#設置錯誤訊息
1900
			$result["error"]=$queryResult["error"];
1901
 
1902
			#回傳結果				
1903
			return $result;
1904
 
1905
			}#if end
1906
 
1907
		#設置執成功訊息
1908
		$result["status"]="true";
1909
 
1910
		#回傳結果
1911
		return $result;
1912
 
1913
		}#function createDataTable end
1914
 
1915
	/*
1916
	#函式說明:
1917
	#新增資料表的欄位
1918
	#回傳結果:
1919
	#$result["status"],"true",代表執行成功;"false"代表執行失敗
1920
	#$result["error"],錯誤訊息陣列
1921
	#$result["sql"],執行的sql內容
1922
	#$result["function"],當前執行的函數名稱
1923
	#必填參數:
1924
	#$conf["dbAddress"],字串,爲mysql-Server的位置.
1925
	$conf["dbAddress"]=$dbAddress;
1926
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號.
1927
	$conf["dbAccount"]=$dbAccount;#爲用於連入mysql-Server時要使用的帳號.
1928
	#$conf["selectedDataBaseName"],字串,爲目標資料表所屬的資料庫.
1929
	$conf["selectedDataBaseName"]="";
1930
	#$conf["selectedDataTableName"],字串,爲目標資料表所屬的資料庫.
1931
	$conf["selectedDataTableName"]="";
1932
	#$conf["addedColumnName"],字串,要增加的欄位名稱.
1933
	$conf["addedColumnName"]="";
1934
	#$conf["newDataTableColmunType"],字串,為新資料表的欄位儲存的型態,常見的有:#int,用來儲存整數.#double,用來儲存有小數點的數值.#timestamp,用來儲存時間.#varchar,最多可以儲存65535個字元,請記得使用$conf["newDataTableColmunLength"]參數指定長度.#char,用來儲存任何東西,儲存成字元,最大長限制為255.#tinytext,儲存長度限制為255,根據實際使用大小來調整儲存大小.#text,儲存大量文字,不能當索引鍵.
1935
	$conf["newDataTableColmunType"]="char";
1936
	#可省略參數: 
1937
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
1938
	#$conf["dbPassword"]=$dbPassword;
1939
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,預設為3306.
1940
	#$conf["dbPort"]="3306";
1941
	#$conf["newDataTableColmunLength"],字串,為新資料表的欄位儲存的長度.
1942
	#$conf["newDataTableColmunLength"]="";
1943
	#$conf["newDataTableColmunDefault"],字串,為該欄位的預設值.#currentTime,當前時間.#updatedCurrentTime,初始為當前時間,之後每更動一次就更新為當次時間.#null,代表空值.#以外的內容視為指定的數值.
1944
	#$conf["newDataTableColmunDefault"]="";
1945
	#$conf["newDataTableColmunNotNull"],字串,為新資料表的欄位不可為NULL.#"true"代表不能為null.#"false"代表可以為null.
1946
	#$conf["newDataTableColmunNotNull"]="true";#
1947
	#$conf["newDataTableColmunAutoAdd"],字串,為新資料表的欄位是否自動+1
1948
	#$conf["newDataTableColmunAutoAdd"]="true";
1949
	#$conf["newDataTableColmunKeyType"],字串,為該欄位的鍵屬性:"primary key"爲主鍵、"index"爲索引鍵、"foreign key"爲外鍵
1950
	#$conf["newDataTableColmunKeyType"]="primary key";
1951
	#$conf["foreignDb"]="";#外鍵參考的資料庫,預設為$conf["selectedDataBaseName"].
1952
	#$conf["foreignDb"]=$conf["selectedDataBaseName"];
1953
	#$conf["foreignTable"],字串,外鍵參考的資料表
1954
	#$conf["foreignTable"]="";
1955
	#$conf["foreignTableColumn"],字串,外鍵參考的資料表欄位
1956
	#$conf["foreignTableColumn"]="";
1957
	#$conf["onUpdateAction"],字串,當外鍵參考的欄位資料修改時,外鍵要如何回應?"CASCADE"會將有所關聯的紀錄行也會進行刪除或修改。"SET NULL"代表會將有所關聯的紀錄行設定成 NULL。"NO ACTION"代表有存在的關聯紀錄行時,會禁止父資料表的刪除或修改動作。
1958
	#$conf["onUpdateAction"]="CASCADE";#
1959
	#$conf["onDeleteAction"],字串,當外鍵參考的欄位資料移除時,外鍵要如何回應?"CASCADE"會將有所關聯的紀錄行也會進行刪除或修改。"SET NULL"代表會將有所關聯的紀錄行設定成 NULL。"NO ACTION"代表有存在的關聯紀錄行時,會禁止父資料表的刪除或修改動作。
1960
	#$conf["onDeleteAction"]="SET NULL";	
1961
	#$conf["comment"],字串,欄位的註解,預設不使用.
1962
	#$conf["comment"]="";
1963
	#參考資料:
1964
	#儲存型態=>https://mariadb.com/kb/en/data-types/
1965
	#備註:
1966
	#無.
1967
	*/
1968
	public static function addColumn(&$conf){
1969
 
1970
		#初始化要回傳的結果
1971
		$result=array();
1972
 
1973
		#記錄當前執行的函數名稱
1974
		$result["function"]=__FUNCTION__;
1975
 
1976
		#如果 $conf 不為陣列
1977
		if(gettype($conf)!="array"){
1978
 
1979
			#設置執行失敗
1980
			$result["status"]="false";
1981
 
1982
			#設置執行錯誤訊息
1983
			$result["error"][]="\$conf變數須為陣列形態";
1984
 
1985
			#如果傳入的參數為 null
1986
			if($conf==null){
1987
 
1988
				#設置執行錯誤訊息
1989
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
1990
 
1991
				}#if end
1992
 
1993
			#回傳結果
1994
			return $result;
1995
 
1996
			}#if end
1997
 
1998
		#檢查參數
1999
		#函式說明:
2000
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
2001
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2002
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
2003
		#$result["function"],當前執行的函式名稱.
2004
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
2005
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
2006
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
2007
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
2008
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
2009
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
2010
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
2011
		#必填參數:
2012
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
2013
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
2014
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
2015
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("dbAddress","dbAccount","selectedDataBaseName","selectedDataTableName","addedColumnName");
2016
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
2017
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string","string","string");
2018
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
2019
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
2020
		#可省略參數:
2021
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
2022
		#$conf["canBeEmptyString"]="false";
2023
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
2024
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("dbPassword","dbPort","newDataTableColmunType","newDataTableColmunLength","newDataTableColmunDefault","newDataTableColmunNotNull","newDataTableColmunAutoAdd","newDataTableColmunKeyType","foreignDb","foreignTable","foreignTableColumn","onUpdateAction","onDeleteAction","comment");
2025
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
2026
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string","string","string","string","string","string","string","string","string","string","string","string");
2027
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
2028
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null,null,null,null,null,null,null,"\$conf[\"selectedDataBaseName\"]",null,null,null,null,null);
2029
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
2030
		#$conf["arrayCountEqualCheck"][]=array();
2031
		#參考資料:
2032
		#array_keys=>http://php.net/manual/en/function.array-keys.php
2033
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
2034
		unset($conf["variableCheck::checkArguments"]);
2035
 
2036
		#如果檢查過程有錯
2037
		if($checkResult["status"]=="false"){
2038
 
2039
			#設置執行失敗的訊息
2040
			$result["status"]="false";
2041
 
2042
			#設置錯誤訊息
2043
			$result["error"]=$checkResult;
2044
 
2045
			#回傳結果
2046
			return $result;
2047
 
2048
			}#if end
2049
 
2050
		#如果檢查不通過
2051
		if($checkResult["passed"]=="false"){
2052
 
2053
			#設置執行失敗的訊息
2054
			$result["status"]="false";
2055
 
2056
			#設置錯誤訊息
2057
			$result["error"]=$checkResult;
2058
 
2059
			#回傳結果
2060
			return $result;
2061
 
2062
			}#if end
2063
 
2064
		#組合sql語言
2065
		$sql="alter table `".$conf["selectedDataTableName"]."` add `".$conf["addedColumnName"]."`";
2066
 
2067
		#接上欄位儲存型態
2068
		$sql=$sql." ".$conf["newDataTableColmunType"];
2069
 
2070
		#如果資料形態爲 "double、float"
2071
		if($conf["newDataTableColmunType"]=="double" || $conf["newDataTableColmunType"]=="float" ){
2072
 
2073
			#則取消資料長度的限制
2074
			unset($conf["newDataTableColmunLength"]);
2075
 
2076
			}#if end	
2077
 
2078
		#如果有設定資料長度,且資料儲存型態不為 tinytext 與 text
2079
		if(isset($conf["newDataTableColmunLength"]) && $conf["newDataTableColmunType"]!="tinytext" && $conf["newDataTableColmunType"]!="text"){
2080
 
2081
			#接上欄位儲存長度
2082
			$sql=$sql." (".$conf["newDataTableColmunLength"].")";
2083
 
2084
			}#if end
2085
 
2086
		#如果資料形態不爲 "double、float、"
2087
		if($conf["newDataTableColmunType"]!="double" && $conf["newDataTableColmunType"]!="float" && $conf["newDataTableColmunType"]!="int"){
2088
 
2089
			#指定欄CHARACTER SET爲utf8,COLLATE爲utf8_unicode_ci
2090
			$sql=$sql." CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci'";
2091
 
2092
			}#if end
2093
 
2094
		#如果有設定預設值
2095
		if(isset($conf["newDataTableColmunDefault"])){
2096
 
2097
			#如果 $conf["newDataTableColmunType"] 不等於 "tinytext" 也不等於 "text"
2098
			if($conf["newDataTableColmunType"]!="tinytext" && $conf["newDataTableColmunType"]!="text"){
2099
 
2100
				#根據 $conf["newDataTableColmunDefault"] 的數值內容
2101
				switch($conf["newDataTableColmunDefault"]){
2102
 
2103
					#如果設為 currentTime
2104
					case "currentTime":
2105
 
2106
						#設定語法
2107
						$sql=$sql." default CURRENT_TIMESTAMP";
2108
 
2109
						#跳出switch
2110
						break;
2111
 
2112
					#如果設為updatedCurrentTime
2113
					case "updatedCurrentTime":
2114
 
2115
						#設定語法
2116
						$sql=$sql." default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP";
2117
 
2118
						#跳出switch
2119
						break;
2120
 
2121
					#如果設為 null
2122
					case "null":
2123
 
2124
						#設定語法
2125
						$sql=$sql." default null";
2126
 
2127
						#跳出switch
2128
						break;
2129
 
2130
					#如果不為以上數值
2131
					default :
2132
 
2133
						#設定語法
2134
						$sql=$sql." default '".$conf["newDataTableColmunDefault"]."'";
2135
 
2136
						#跳出switch
2137
						break;
2138
 
2139
					}#switch end
2140
 
2141
				}#if end
2142
 
2143
			}#if end
2144
 
2145
		#如果有設定不能為NUL
2146
		if(isset($conf["newDataTableColmunNotNull"])){
2147
 
2148
			#如果 $conf["newDataTableColmunNotNull"] 等於 "true"
2149
			if($conf["newDataTableColmunNotNull"]=="true"){
2150
 
2151
				$sql=$sql." NOT NULL";
2152
 
2153
				}#if end
2154
 
2155
			}#if end
2156
 
2157
			#如果有設定要自動加1
2158
			if(isset($conf["newDataTableColmunAutoAdd"])){
2159
 
2160
				#如果 $conf["newDataTableColmunAutoAdd"] 設為 "true"
2161
				if($conf["newDataTableColmunAutoAdd"]=="true"){
2162
 
2163
					#加上自動加1的語句
2164
					$sql=$sql." auto_increment";
2165
 
2166
					}#if end
2167
 
2168
				}#if end
2169
 
2170
		#如果有設定註解
2171
		if(isset($conf["comment"])){
2172
 
2173
			#設定其註解
2174
			$sql=$sql." COMMENT '".$conf["comment"]."' ";
2175
 
2176
			}#if end		
2177
 
2178
		#如果有設定鍵的屬性
2179
		if(isset($conf["newDataTableColmunKeyType"])){
2180
 
2181
			#如果爲 primary key 
2182
			if($conf["newDataTableColmunKeyType"]=="primary key"){
2183
 
2184
				#設定其鍵值
2185
				$sql=$sql." ".$conf["newDataTableColmunKeyType"];
2186
 
2187
				}#if end
2188
 
2189
			}#if end
2190
 
2191
		#執行sql語法
2192
		#函式說明:
2193
		#執行mysql指令
2194
		#回傳結果::
2195
		#$result["status"],"true"為執行成功;"false"為執行失敗。
2196
		#$result["error"],錯誤訊息的陣列
2197
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
2198
		#$result["queryString"],mysql查詢的語言
2199
		#查詢號的解果,需要解析。
2200
		#必填參數:
2201
		$conf["db"]["execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
2202
		$conf["db"]["execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
2203
		$conf["db"]["execMysqlQuery"]["dbSql"]=$sql.";";#要執行sql語法
2204
		#可省略參數:
2205
 
2206
		#如果 $conf["dbPassword"] 有設定
2207
		if(isset($conf["dbPassword"])){
2208
 
2209
			#設定其密碼
2210
			$conf["db"]["execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
2211
 
2212
			}#if end
2213
 
2214
		$conf["db"]["execMysqlQuery"]["dbName"]=$conf["selectedDataBaseName"];#為是否要指定資料庫,預設不指定.
2215
 
2216
		#如果有設定 $conf["dbPort"]	
2217
		if(isset($conf["dbPort"])){
2218
 
2219
			#設定 $conf["dbPort"]
2220
			$conf["db"]["execMysqlQuery"]["dbPort"]=$conf["dbPort"];
2221
 
2222
			}#if end			
2223
 
2224
		$queryResult=db::execMysqlQuery($conf["db"]["execMysqlQuery"]);
2225
		unset($conf["db"]["execMysqlQuery"]);
2226
 
2227
		#如果有錯誤
2228
		if($queryResult["status"]=="false"){
2229
 
2230
			#設置錯誤訊息
2231
			$result["status"]="false";
2232
 
2233
			#設置錯誤提示
2234
			$result["error"]=$queryResult;
2235
 
2236
			#回傳結果
2237
			return $result;
2238
 
2239
			}#if end
2240
 
2241
		#取得執行的sql語法
2242
		$result["sql"][]=$queryResult["queryString"];
2243
 
2244
		#如果 $conf["newDataTableColmunKeyType"] 存在
2245
		if(isset($conf["newDataTableColmunKeyType"])){
2246
 
2247
			#如果爲 index
2248
			if($conf["newDataTableColmunKeyType"]=="index"){
2249
 
2250
				#函式說明:
2251
				#新增資料表的欄位
2252
				#回傳結果:
2253
				#$result["status"],"true",代表執行成功;"false"代表執行失敗.
2254
				#$result["function"],當前執行的函數名稱.
2255
				#$result["error"],錯誤訊息陣列.
2256
				#$result["sql"],執行的sql字串.
2257
				#必填參數:
2258
				$conf["db::setColumnIndex"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
2259
				$conf["db::setColumnIndex"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
2260
				$conf["db::setColumnIndex"]["selectedDataBaseName"]=$conf["selectedDataBaseName"];#爲目標資料表所屬的資料庫
2261
				$conf["db::setColumnIndex"]["selectedDataTableName"]=$conf["selectedDataTableName"];#爲目標資料表所屬的資料庫
2262
				$conf["db::setColumnIndex"]["indexedColumnName"]=$conf["addedColumnName"];#要設爲index的欄位名稱
2263
				#可省略參數:
2264
 
2265
				#如果 $conf["dbPassword"] 有設定
2266
				if(isset($conf["dbPassword"])){
2267
 
2268
					$conf["db::setColumnIndex"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
2269
 
2270
					}#if end
2271
 
2272
				#如果有設定 $conf["dbPort"]	
2273
				if(isset($conf["dbPort"])){
2274
 
2275
					#設定 $conf["dbPort"]
2276
					$conf["db::setColumnIndex"]["dbPort"]=$conf["dbPort"];
2277
 
2278
					}#if end	
2279
 
2280
				$setColumnIndex=db::setColumnIndex($conf["db::setColumnIndex"]);
2281
				unset($conf["db::setColumnIndex"]);
2282
 
2283
				#如果建立index失敗
2284
				if($setColumnIndex["status"]=="false"){
2285
 
2286
					#設置執行失敗
2287
					$result["status"]="false";
2288
 
2289
					#設置錯誤訊息
2290
					$result["error"]=$setColumnIndex;
2291
 
2292
					#回傳結果
2293
					return $result;
2294
 
2295
					}#if end
2296
 
2297
				#取得執行的sql語法
2298
				$result["sql"][]=$setColumnIndex["sql"];
2299
 
2300
				}#if end
2301
 
2302
			}#if end
2303
 
2304
		#如果 $conf["newDataTableColmunKeyType"] 有設定
2305
		if(isset($conf["newDataTableColmunKeyType"])){	
2306
 
2307
			#如果爲 foreign key
2308
			if($conf["newDataTableColmunKeyType"]=="foreign key"){
2309
 
2310
				#函式說明:
2311
				#修改資料表的欄位
2312
				#回傳結果:
2313
				#$result["status"],"true",代表執行成功;"false"代表執行失敗.
2314
				#$result["error"],錯誤訊息陣列.
2315
				#$result["function"],當前執行的函數名稱.
2316
				#$result["sql"][$i],第$i+1個執行的sql語法字串陣列.
2317
				#必填參數:
2318
				$conf["db::editColumn"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
2319
				$conf["db::editColumn"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
2320
				$conf["db::editColumn"]["selectedDataBaseName"]=$conf["selectedDataBaseName"];#爲目標資料表所屬的資料庫
2321
				$conf["db::editColumn"]["selectedDataTableName"]=$conf["selectedDataTableName"];#爲目標資料表所屬的資料表
2322
				$conf["db::editColumn"]["editedColumnName"]=$conf["addedColumnName"];#要修改的欄位名稱
2323
				#可省略參數: 
2324
 
2325
				#如果 $conf["dbPassword"] 有設定
2326
				if(isset($conf["dbPassword"])){
2327
 
2328
					$conf["db::editColumn"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
2329
 
2330
					}#if end
2331
 
2332
				#$conf["newColumnName"]="";#要修改成的欄位名稱,預設與$conf["dbInformation"]["editedColumnName"]一樣。
2333
				#$conf["newDataTableColmunType"]="";#為新資料表的欄位儲存的型態,常見的有:
2334
					#int,用來儲存整數.
2335
					#double,用來儲存有小數點的數值.
2336
					#timestamp,用來儲存時間.
2337
					#varchar,可以儲存65536個字元.
2338
					#char,用來儲存任何東西,儲存成字元,長度限制為255.
2339
					#tinytest,來儲存大量的文字,會更據使用量調整儲存大小,長度限制跟char一樣.
2340
					#text,用來儲存大量的文字,不能作為索引值
2341
				#$conf["newDataTableColmunLength"]="";#為新資料表的欄位儲存的長度,""代表不限制長度
2342
				#$conf["newDataTableColmunDefault"]="";#為該欄位的預設值
2343
					#"",代表不指定預設值
2344
					#currentTime,當前時間;
2345
					#updatedCurrentTime,初始為當前時間,之後每更動一次就更新為當次時間
2346
					#null,代表空值
2347
					#以外的內容視為指定的數值
2348
				#$conf["newDataTableColmunNotNull"]="";#為新資料表的欄位不可為NULL否:
2349
					#true代表不能為null,
2350
					#false代表可以為null。
2351
				#$conf["newDataTableColmunAutoAdd"]="true";#為新資料表的欄位是否自動+1
2352
				$conf["db::editColumn"]["newDataTableColmunKeyType"]="foreign key";#為該欄位的鍵屬性:""為移除鍵的設定、"primary key"爲主鍵、"index"爲索引鍵、"foreign key"為外鍵
2353
				$conf["db::editColumn"]["foreignKeyDb"]=$conf["foreignDb"];#若要設定foreign key的話,則要提供參考的資料庫,預設為$conf["selectedDataBaseName"].
2354
				$conf["db::editColumn"]["foreignKeyReferenceTable"]=$conf["foreignTable"];#若要設定foreign key的話,則要提供參考的資料表
2355
				$conf["db::editColumn"]["foreignKeyReferenceColumn"]=$conf["foreignTableColumn"];#若要設定foreign key的話,則要提供參考的資料表欄位
2356
 
2357
				#如果有設定 $conf["onUpdateAction"]
2358
				if(isset($conf["onUpdateAction"])){
2359
 
2360
					$conf["db::editColumn"]["foreignKeyUpdateAction"]=$conf["onUpdateAction"];#若要設定foreign key的話,可以指定參考的資料表欄位更新時該欄位該怎麼處理,預設為"CASCADE",會將有所關聯的紀錄行也會進行刪除或修改。"SET NULL"代表會將有所關聯的紀錄行設定成 NULL。"NO ACTION"代表有存在的關聯紀錄行時,會禁止父資料表的刪除或修改動作。
2361
 
2362
					}#if end
2363
 
2364
				#如果有設定 $conf["onDeleteAction"]
2365
				if(isset($conf["onDeleteAction"])){
2366
 
2367
					$conf["db::editColumn"]["foreignKeyDeleteAction"]=$conf["onDeleteAction"];#若要設定foreign key的話,可以指定參考的資料表欄位移除時該欄位該怎麼處理,預設為"SET NULL",會將有所關聯的紀錄行設定成 NULL。"NO ACTION"代表有存在的關聯紀錄行時,會禁止父資料表的刪除或修改動作。
2368
 
2369
					}#if end
2370
 
2371
				#如果有設定 $conf["dbPort"]	
2372
				if(isset($conf["dbPort"])){
2373
 
2374
					#設定 $conf["dbPort"]
2375
					$conf["db::editColumn"]["dbPort"]=$conf["dbPort"];
2376
 
2377
					}#if end
2378
 
2379
				$editColumn=db::editColumn($conf["db::editColumn"]);
2380
				unset($conf["db::editColumn"]);
2381
 
2382
				#如果設置為foreign失敗
2383
				if($editColumn["status"]=="false"){
2384
 
2385
					#設置執行失敗
2386
					$result["status"]="false";
2387
 
2388
					#設置錯誤訊息
2389
					$result["error"]=$editColumn;
2390
 
2391
					#回傳結果
2392
					return $result;
2393
 
2394
					}#if end	
2395
 
2396
				#有幾個執行的sql語法就執行幾次
2397
				for($i=0;$i<count($editColumn["sql"]);$i++){
2398
 
2399
					#取得執行的sql語法
2400
					$result["sql"][]=$editColumn["sql"][$i];
2401
 
2402
					}#for end
2403
 
2404
				}#if end
2405
 
2406
			}#if end
2407
 
2408
		#執行到這邊代表執行成功
2409
 
2410
		#設置成功訊息
2411
		$result["status"]="true";
2412
 
2413
		#回傳結果
2414
		return $result;
2415
 
2416
		}#function addColumn end
2417
 
2418
	/*
2419
	#函式說明:
2420
	#修改資料表的欄位
2421
	#回傳結果:
2422
	#$result["status"],"true",代表執行成功;"false"代表執行失敗.
2423
	#$result["error"],錯誤訊息陣列.
2424
	#$result["function"],當前執行的函數名稱.
2425
	#$result["sql"][$i],第$i+1個執行的sql語法字串陣列.
2426
	#必填參數:
2427
	#$conf["dbAddress"],字串,爲mysql-Server的位置.
2428
	$conf["dbAddress"]=$dbAddress;
2429
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號.
2430
	$conf["dbAccount"]=$dbAccount;
2431
	#$conf["selectedDataBaseName"],字串,爲目標資料表所屬的資料庫.
2432
	$conf["selectedDataBaseName"]="";
2433
	#$conf["selectedDataTableName"],字串,爲目標資料表所屬的資料表.
2434
	$conf["selectedDataTableName"]="";
2435
	#$conf["editedColumnName"],字串,要修改的欄位名稱.
2436
	$conf["editedColumnName"]="";
2437
	#可省略參數: 
2438
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼.
2439
	#$conf["dbPassword"]=$dbPassword;
2440
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,預設為3306.
2441
	#$conf["dbPort"]="3306";
2442
	#$conf["newColumnName"],字串,要修改成的欄位名稱,預設與$conf["editedColumnName"]一樣。
2443
	#$conf["newColumnName"]=$conf["editedColumnName"];
2444
	#$conf["newDataTableColmunType"],字串,為新資料表的欄位儲存的型態,常見的有:int,用來儲存整數;double,用來儲存有小數點的數值;timestamp,用來儲存時間;varchar,可以儲存65536個字元;char,用來儲存任何東西,儲存成字元,長度限制為255;tinytest,來儲存大量的文字,會更據使用量調整儲存大小,長度限制跟char一樣;text,用來儲存大量的文字,不能作為索引值
2445
	#$conf["newDataTableColmunType"]="";
2446
	#$conf["newDataTableColmunLength"]=,字串,為新資料表的欄位儲存的長度,""代表不限制長度.
2447
	#$conf["newDataTableColmunLength"]="";
2448
	#$conf["newDataTableColmunDefault"],字串,為該欄位的預設值:"",代表不指定預設值;currentTime,當前時間;updatedCurrentTime,初始為當前時間,之後每更動一次就更新為當次時間;null,代表空值;以外的內容視為指定的數值.
2449
	#$conf["newDataTableColmunDefault"]="";
2450
	#$conf["newDataTableColmunNotNull"],字串,為新資料表的欄位不可為NULL否:true代表不能為null;false代表可以為null.
2451
	#$conf["newDataTableColmunNotNull"]="";
2452
	#$conf["newDataTableColmunComment"],字串,欄位的註解.
2453
	#$conf["newDataTableColmunComment"]="";
2454
	#$conf["newDataTableColmunAutoAdd"],字串,為新資料表的欄位是否自動+1
2455
	#$conf["newDataTableColmunAutoAdd"]="true";
2456
	#$conf["newDataTableColmunKeyType"],字串,為該欄位的鍵屬性:""為移除鍵的設定、"primary key"爲主鍵、"index"爲索引鍵、"foreign key"為外鍵.
2457
	#$conf["newDataTableColmunKeyType"]="";
2458
	#$conf["foreignKeyDb"],字串,若要設定foreign key的話,則要提供參考的資料庫,預設為$conf["selectedDataBaseName"].
2459
	#$conf["foreignKeyDb"]="";
2460
	#$conf["foreignKeyReferenceTable"],字串,若要設定foreign key的話,則要提供參考的資料表.
2461
	#$conf["foreignKeyReferenceTable"]="";
2462
	#$conf["foreignKeyReferenceColumn"],字串,若要設定foreign key的話,則要提供參考的資料表欄位.
2463
	#$conf["foreignKeyReferenceColumn"]="";
2464
	#$conf["foreignKeyUpdateAction"],字串,若要設定foreign key的話,可以指定參考的資料表欄位更新時該欄位該怎麼處理,預設為"CASCADE",會將有所關聯的紀錄行也會進行刪除或修改。"SET NULL"代表會將有所關聯的紀錄行設定成 NULL。"NO ACTION"代表有存在的關聯紀錄行時,會禁止父資料表的刪除或修改動作。
2465
	#$conf["foreignKeyUpdateAction"]="";
2466
	#$conf["foreignKeyDeleteAction"],字串,若要設定foreign key的話,可以指定參考的資料表欄位移除時該欄位該怎麼處理,預設為"SET NULL",會將有所關聯的紀錄行設定成 NULL。"NO ACTION"代表有存在的關聯紀錄行時,會禁止父資料表的刪除或修改動作。
2467
	#$conf["foreignKeyDeleteAction"]="SET NULL";
2468
	#參考資料:
2469
	#無.
2470
	#備註:
2471
	#無.
2472
	*/
2473
	public static function editColumn(&$conf){
2474
 
2475
		#初始化要回傳的內容
2476
		$result=array();
2477
 
2478
		#取得當前執行的函數名稱
2479
		$result["function"]=__FUNCTION__;
2480
 
2481
		#如果 $conf 不為陣列
2482
		if(gettype($conf)!="array"){
2483
 
2484
			#設置執行失敗
2485
			$result["status"]="false";
2486
 
2487
			#設置執行錯誤訊息
2488
			$result["error"][]="\$conf變數須為陣列形態";
2489
 
2490
			#如果傳入的參數為 null
2491
			if($conf==null){
2492
 
2493
				#設置執行錯誤訊息
2494
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
2495
 
2496
				}#if end
2497
 
2498
			#回傳結果
2499
			return $result;
2500
 
2501
			}#if end
2502
 
2503
		#檢查參數
2504
		#函式說明:
2505
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
2506
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2507
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
2508
		#$result["function"],當前執行的函式名稱.
2509
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
2510
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
2511
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
2512
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
2513
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
2514
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
2515
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
2516
		#必填參數:
2517
		#$conf["db::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
2518
		$conf["db::checkArguments"]["varInput"]=&$conf;
2519
		#$conf["db::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
2520
		$conf["db::checkArguments"]["mustBeFilledVariableName"]=array("dbAddress","dbAccount","selectedDataBaseName","selectedDataTableName","editedColumnName");
2521
		#$conf["db::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
2522
		$conf["db::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string","string","string");
2523
		#$conf["db::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
2524
		$conf["db::checkArguments"]["referenceVarKey"]="db::checkArguments";
2525
		#可省略參數:
2526
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
2527
		#$conf["canBeEmptyString"]="false";
2528
		#$conf["db::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
2529
		$conf["db::checkArguments"]["skipableVariableName"]=array("dbPassword","dbPort","newColumnName","newDataTableColmunType","newDataTableColmunLength","newDataTableColmunDefault","newDataTableColmunNotNull","newDataTableColmunAutoAdd","newDataTableColmunKeyType","foreignKeyDb","foreignKeyReferenceTable","foreignKeyReferenceColumn","foreignKeyUpdateAction","foreignKeyDeleteAction","newDataTableColmuComment");
2530
		#$conf["db::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
2531
		$conf["db::checkArguments"]["skipableVariableType"]=array("string","string","string","string","string","string","string","string","string","string","string","string","string","string","string");
2532
		#$conf["db::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
2533
		$conf["db::checkArguments"]["skipableVarDefaultValue"]=array(null,null,$conf["editedColumnName"],null,null,null,null,null,null,"\$conf[\"selectedDataBaseName\"]",null,null,null,null,null);
2534
		#$conf["db::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
2535
		#$conf["db::checkArguments"]["arrayCountEqualCheck"][]=array();
2536
		#參考資料:
2537
		#array_keys=>http://php.net/manual/en/function.array-keys.php
2538
		$checkResult=variableCheck::checkArguments($conf["db::checkArguments"]);
2539
		unset($conf["db::checkArguments"]);
2540
 
2541
		#如果檢查有誤
2542
		if($checkResult["status"]=="false"){
2543
 
2544
			#設置執行失敗的訊息
2545
			$result["status"]="false";
2546
 
2547
			#設置錯誤訊息
2548
			$result["error"]=$checkResult;
2549
 
2550
			#回傳結果
2551
			return $result;
2552
 
2553
			}#if end
2554
 
2555
		#如果檢查不通過
2556
		if($checkResult["passed"]=="false"){
2557
 
2558
			#設置執行失敗的訊息
2559
			$result["status"]="false";
2560
 
2561
			#設置錯誤訊息
2562
			$result["error"]=$checkResult;
2563
 
2564
			#回傳結果
2565
			return $result;
2566
 
2567
			}#if end
2568
 
2569
		#取得目標資料表的所有資訊
2570
		#函式說明:
2571
		#取得資料表所有欄位的詳細資訊
2572
		#回傳的內容:
2573
		#$result["status"],執行結果,"true"代表執行成功;"false"代表執行失敗
2574
		#$result["error"],錯誤訊息陣列
2575
		#$result["sql"],執行的sql語法
2576
		#$result["oriInput"],原始的資料表欄位資訊
2577
		#$result["everyLine"],逐行的欄位資訊
2578
		#$result["tableName"],當前查詢的資料表名稱
2579
		#$result["engine"],資料表使用的儲存引擎
2580
		#$result["charset"],資料表預設的編碼
2581
		#$result["columnName"][$i],各欄位的名稱陣列,$i爲0開始的數字,也可以使用欄位的名稱。
2582
		#$result["columnVarTypeAndLengthLimit"][$i],各欄位儲存的變數形態與長度限制,$i爲0開始的數字,也可以使用欄位的名稱。
2583
		#$result["columnVarType"][$i],各欄位變數儲存的型態,$i爲0開始的數字,也可以使用欄位的名稱.
2584
		#$result["columnVarLengthLimit"][$i],個欄位變數的長度限制,若不存在其限制,則為"",$i爲0開始的數字,也可以使用欄位的名稱.
2585
		#$result["columnNull"][$i],各欄位是否可以爲null,"true"爲可以爲null;"false"爲可不以爲"null",$i爲0開始的數字,也可以使用欄位的名稱。
2586
		#$result["columnAutoIncrement"][$i],各欄位是否會自動加1,"true"爲會;"false"爲不會,$i爲0開始的數字,也可以使用欄位的名稱。
2587
		#$result["columnDefault"][$i],各欄位的預設內容,若無則爲"沒有指定",$i爲0開始的數字,也可以使用欄位的名稱。
2588
		#$result["columnOnUpdateAction"][$i],當資料有修改時,該欄位的內容要怎麼因應,$i爲0開始的數字,也可以使用欄位的名稱。
2589
		#$result["columnCharacterSet"][$i],各欄位使用的CharacterSet,$i爲0開始的數字,也可以使用欄位的名稱。
2590
		#$result["columnCollate"][$i],各欄位使用的Collate,$i爲0開始的數字,也可以使用欄位的名稱。
2591
		#$result["columnComment"][$i],各欄位的註解,$i爲1開始的數字,也可以使用欄位的名稱。
2592
		#$result["key"]["exist"],該資料表是否有索引鍵,"true"代表有;"false"代表沒有。
2593
		#$result["key"][$j],該資料表的索引鍵陣列,$j爲0開始的數字,也可以使用欄位的名稱。
2594
		#$result["keyConstraintName"][$j],該資料表用於識別索引鍵的CONSTRAINT名稱陣列,$j爲0開始的數字,也可以使用欄位的名稱。
2595
		#$result["primaryKey"],該資料表的主鍵
2596
		#$result["foreignKey"]["exist"],該資料表是否有foreign key,"true"代表有;"fasle"代表沒有。
2597
		#$result["foreignKey"]["constraintName"][$k],用來識別外鍵的CONSTRAINT名稱陣列,$k爲0開始的數字,也可以使用欄位的名稱。
2598
		#$result["foreignKey"]["columnName"][$k],外鍵的名稱陣列,$k爲0開始的數字,也可以使用欄位的名稱。
2599
		#$result["foreignKey"]["referencesTable"][$k],外鍵參照的欄位,$k爲0開始的數字,,也可用欄位的名稱來找value.
2600
		#$result["foreignKey"]["referencesColumn"][$k],外鍵參照的欄位屬於哪個資料表,$k爲0開始的數字,也可用欄位的名稱來找value.
2601
		#$result["foreignKey"]["onUpdateAction"][$i],當參照的欄位資料更新時,會怎麼同步,$i爲0開始的數字,也可用欄位的名稱來找value.
2602
		#$result["foreignKey"]["onDeleteAction"][$i],當參照的欄位資料移除時,會怎麼同步,$i爲0開始的數字,也可用欄位的名稱來找value.
2603
		#必填參數:
2604
		$conf["db"]["getTableColumnDetailInfo"]["dbAddress"]=$conf["dbAddress"];#資料庫的網路位置
2605
		$conf["db"]["getTableColumnDetailInfo"]["dbAccount"]=$conf["dbAccount"];#連線到資料庫要用的帳號
2606
		$conf["db"]["getTableColumnDetailInfo"]["selectedDataBase"]=$conf["selectedDataBaseName"];#連線到資料庫要選擇的資料庫
2607
		$conf["db"]["getTableColumnDetailInfo"]["selectedDataTable"]=$conf["selectedDataTableName"];#連線到資料庫要檢視的資料表
2608
		#可省略參數:
2609
 
2610
		#如果有設定連線密碼
2611
		if(isset($conf["dbPassword"])){
2612
 
2613
			$conf["db"]["getTableColumnDetailInfo"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
2614
 
2615
			}#if end
2616
 
2617
		#如果有設定 $conf["dbPort"]	
2618
		if(isset($conf["dbPort"])){
2619
 
2620
			#設定 $conf["dbPort"]
2621
			$conf["db"]["getTableColumnDetailInfo"]["dbPort"]=$conf["dbPort"];
2622
 
2623
			}#if end	
2624
 
2625
		$oriColumnInfo=db::getTableColumnDetailInfo($conf["db"]["getTableColumnDetailInfo"]);
2626
		unset($conf["db"]["getTableColumnDetailInfo"]);
2627
 
2628
		#debug
2629
		#var_dump($oriColumnInfo);
2630
		#exit;
2631
 
2632
		#如果查詢資料表資訊失敗
2633
		if($oriColumnInfo["status"]=="false"){
2634
 
2635
			#設定執行失敗的識別
2636
			$result["status"]="false";
2637
 
2638
			#設定錯誤訊息
2639
			$result["error"]=$oriColumnInfo;
2640
 
2641
			#回傳結果
2642
			return $result;
2643
 
2644
			}#if end
2645
 
2646
		#檢視目標欄位的鍵屬性
2647
		#var_dump($oriColumnInfo);
2648
 
2649
		#如果沒有定新的欄位明稱
2650
		if(!isset($conf["newColumnName"])){
2651
 
2652
			#則設定為原始欄位的名稱
2653
			$conf["newColumnName"]=$oriColumnInfo["columnName"][$conf["editedColumnName"]];
2654
 
2655
			}#if end
2656
 
2657
		#如果 $conf["newDataTableColmunType"] 沒有設定 
2658
		if(!isset($conf["newDataTableColmunType"])){
2659
 
2660
			#$oriColumnInfo["columnVarTypeAndLengthLimit"][$conf["editedColumnName"]];
2661
 
2662
			#則設定為原始欄位的儲存型態
2663
			$conf["newDataTableColmunType"]=$oriColumnInfo["columnVarType"][$conf["editedColumnName"]];
2664
 
2665
			}#if end
2666
 
2667
		#以下要檢查
2668
 
2669
		#如果新資料型態不等於 "tinytext" 跟 "text"
2670
		if($conf["newDataTableColmunType"]!="tinytext" && $conf["newDataTableColmunType"]!="text"){
2671
 
2672
			#如果沒有設定 $conf["newDataTableColmunLength"]
2673
			if(!isset($conf["newDataTableColmunLength"])){
2674
 
2675
				#則設定為原始欄位的儲存長度
2676
				$conf["newDataTableColmunLength"]=$oriColumnInfo["columnVarLengthLimit"][$conf["editedColumnName"]];
2677
 
2678
				}#if end
2679
 
2680
			#如果 $conf["newDataTableColmunLength"] 不為 ""
2681
			if($conf["newDataTableColmunLength"]!=""){
2682
 
2683
				#則加上 「(」與「)」
2684
				$conf["newDataTableColmunLength"]="(".$conf["newDataTableColmunLength"].")";
2685
 
2686
				#屬性後面加上長度
2687
				$conf["newDataTableColmunType"]=$conf["newDataTableColmunType"].$conf["newDataTableColmunLength"];
2688
 
2689
				}#if end
2690
 
2691
			}#if end
2692
 
2693
		#如果 $conf["newDataTableColmunDefault"] 不存在
2694
		if(!isset($conf["newDataTableColmunDefault"])){
2695
 
2696
			#則設定為原始欄位的預設數值
2697
			$conf["newDataTableColmunDefault"]="default \"".$oriColumnInfo["columnDefault"][$conf["editedColumnName"]]."\"";
2698
 
2699
			#如果 $oriColumnInfo["columnDefault"][$conf["editedColumnName"]] 為 ""
2700
			if($oriColumnInfo["columnDefault"][$conf["editedColumnName"]]==""){
2701
 
2702
				#則將 $conf["newDataTableColmunDefault"] 設為
2703
				$conf["newDataTableColmunDefault"]="";
2704
 
2705
				}#if end
2706
 
2707
			#如果 $oriColumnInfo["columnDefault"][$conf["editedColumnName"]] 為 "NULL"
2708
			if($oriColumnInfo["columnDefault"][$conf["editedColumnName"]]=="NULL"){
2709
 
2710
				#則將 $conf["newDataTableColmunDefault"] 設為
2711
				$conf["newDataTableColmunDefault"]="";
2712
 
2713
				}#if end
2714
 
2715
			#如果 $oriColumnInfo["columnDefault"][$conf["editedColumnName"]] 為 "沒有指定"
2716
			if($oriColumnInfo["columnDefault"][$conf["editedColumnName"]]=="沒有指定"){
2717
 
2718
				#則將 $conf["newDataTableColmunDefault"] 設為
2719
				$conf["newDataTableColmunDefault"]="";
2720
 
2721
				}#if end
2722
 
2723
			}#if end
2724
 
2725
		#反之有設定 $conf["newDataTableColmunDefault"]
2726
		else{
2727
 
2728
			#當 $conf["newDataTableColmunType"] 不等於 "text" 與 "tinytest" 時,才能用預設值。
2729
			if($conf["newDataTableColmunType"]!="text" && $conf["newDataTableColmunType"]!="tinytest" ){
2730
 
2731
				#判斷 $conf["newDataTableColmunDefault"] 的數值
2732
				#currentTime,當前時間;
2733
				#updatedCurrentTime,初始為當前時間,之後每更動一次就更新為當次時間
2734
				#null,代表空值
2735
				#以外的內容視為指定的數值
2736
				switch($conf["newDataTableColmunDefault"]){
2737
 
2738
					#如果是
2739
					case "currentTime":
2740
 
2741
						#則將 $conf["newDataTableColmunDefault"] 設為 " default CURRENT_TIMESTAMP "
2742
						$conf["newDataTableColmunDefault"]=" default CURRENT_TIMESTAMP ";
2743
 
2744
						#跳出 switch 
2745
						break;
2746
 
2747
					#如果是 "updatedCurrentTime"
2748
					case "updatedCurrentTime":
2749
 
2750
						#則將 $conf["newDataTableColmunDefault"] 設為 " default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP "
2751
						$conf["newDataTableColmunDefault"]=" default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP ";
2752
 
2753
						#跳出 switch 
2754
						break;
2755
 
2756
					#如果是 "null"
2757
					case "null":
2758
 
2759
						#則將 $conf["newDataTableColmunDefault"] 設為 " default null "
2760
						$conf["newDataTableColmunDefault"]=" default null ";
2761
 
2762
						#跳出 switch 
2763
						break;
2764
 
2765
					#如果是 "NULL"
2766
					case "NULL":
2767
 
2768
						#則將 $conf["newDataTableColmunDefault"] 設為 " default null "
2769
						$conf["newDataTableColmunDefault"]=" default NULL ";
2770
 
2771
						#跳出 switch 
2772
						break;
2773
 
2774
					#如果是 ""
2775
					case "":
2776
 
2777
						#則代表不設定預設值
2778
						$conf["newDataTableColmunDefault"]="";
2779
 
2780
						break;
2781
 
2782
					#如果為其他內容	
2783
					default :
2784
 
2785
						#套用自訂的預設值
2786
						$conf["newDataTableColmunDefault"]=" default '".$conf["newDataTableColmunDefault"]."'";		
2787
 
2788
					}#switch end
2789
 
2790
				}#if end
2791
 
2792
			}#else end
2793
 
2794
		#如果 $conf["newDataTableColmunNotNull"] 沒有設定
2795
		if(!isset($conf["newDataTableColmunNotNull"])){
2796
 
2797
			#則按照原始欄位的設定
2798
 
2799
			#如果 $oriColumnInfo["columnNotNull"][$conf["editedColumnName"]] 等於 "true"
2800
			if($oriColumnInfo["columnNotNull"][$conf["editedColumnName"]]=="true"){
2801
 
2802
				#則代表不能為 null
2803
				$conf["newDataTableColmunNotNull"]=" not null";
2804
 
2805
				}#if end
2806
 
2807
			#反之 $oriColumnInfo["columnNotNull"][$conf["editedColumnName"]] 等於 "false"
2808
			else{
2809
 
2810
				#則代表可以為 null
2811
				#將 $conf["newDataTableColmunNotNull"] 置換為 ""
2812
				$conf["newDataTableColmunNotNull"]="";
2813
 
2814
				}#if end
2815
 
2816
			}#if end
2817
 
2818
		#反之 如果 $conf["newDataTableColmunNotNull"] 有設定
2819
		else{
2820
 
2821
			#如果 $conf["newDataTableColmunNotNull"] 為 "true"
2822
			if($conf["newDataTableColmunNotNull"]=="true"){
2823
 
2824
				#則置換為 "not null"
2825
				$conf["newDataTableColmunNotNull"]="not null";
2826
 
2827
				}#if end
2828
 
2829
			#如果 $conf["newDataTableColmunNotNull"] 為 "false"
2830
			if($conf["newDataTableColmunNotNull"]=="false"){
2831
 
2832
				#則置換為 ""
2833
				$conf["newDataTableColmunNotNull"]="";
2834
 
2835
				}#if end
2836
 
2837
			}#else end
2838
 
2839
		#如果 $conf["newDataTableColmunAutoAdd"] 沒有設定
2840
		if(!isset($conf["newDataTableColmunAutoAdd"])){
2841
 
2842
			#原始欄位的設定為 true 的話
2843
			if($oriColumnInfo["columnAutoIncrement"][$conf["editedColumnName"]]=="true"){
2844
 
2845
				#則按照原始欄位的設定
2846
				$conf["newDataTableColmunAutoAdd"]="auto_increment";
2847
 
2848
				}#if end
2849
 
2850
			#反之代表沒有設定
2851
			else{
2852
 
2853
				#設為 ""
2854
				$conf["newDataTableColmunAutoAdd"]="";
2855
 
2856
				}#else end
2857
 
2858
			}#if end
2859
 
2860
		#反之代表 $conf["newDataTableColmunAutoAdd"] 有設定
2861
		else{
2862
 
2863
			#如果 $conf["newDataTableColmunAutoAdd"] 等於 "true"
2864
			if($conf["newDataTableColmunAutoAdd"]=="true"){
2865
 
2866
				#則將 $conf["newDataTableColmunAutoAdd"] 設為 auto_increment
2867
				$conf["newDataTableColmunAutoAdd"]="auto_increment";
2868
 
2869
				}#if end
2870
 
2871
			#反之 $conf["newDataTableColmunAutoAdd"] 不等於 "true"
2872
			else{
2873
 
2874
				#則將 $conf["newDataTableColmunAutoAdd"] 設為 ""
2875
				$conf["newDataTableColmunAutoAdd"]="";
2876
 
2877
				}#else end				
2878
 
2879
			}#else end
2880
 
2881
		#如果 $conf["newDataTableColmunType"] 為 "char" 或 "text"	
2882
		if($conf["newDataTableColmunType"]=="char" || $conf["newDataTableColmunType"]=="text"){
2883
 
2884
			#CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci',設定為utf8
2885
			$utf8="CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci'";
2886
 
2887
			}#if end
2888
 
2889
		#反之不是字元或文字
2890
		else{
2891
 
2892
			#則設為""
2893
			$utf8="";
2894
 
2895
			}#else end	
2896
 
2897
		#如果有設定 $conf["newDataTableColmunComment"]
2898
		if(isset($conf["newDataTableColmunComment"])){
2899
 
2900
			#如果 $conf["newDataTableColmunComment"] 等於 ""
2901
			if($conf["newDataTableColmunComment"]==""){
2902
 
2903
				#設置為"沒有註解"
2904
				$comment=" COMMENT '沒有註解'";
2905
 
2906
				}#if end
2907
 
2908
			#反之設置指定的註解字串
2909
			else{
2910
 
2911
				#設置註解
2912
				$comment=" COMMENT '".$conf["newDataTableColmunComment"]."'";
2913
 
2914
				}#else end
2915
 
2916
			}#if end
2917
 
2918
		#反之
2919
		else{
2920
 
2921
			#如果原始沒有註解
2922
			if(!isset($oriColumnInfo["colmunComment"][$conf["editedColumnName"]])){
2923
 
2924
				#設為空字串
2925
				$comment="";
2926
 
2927
				}#if end
2928
 
2929
			#反之
2930
			else{
2931
 
2932
				#設為原始的註解
2933
				$comment=" COMMENT '".$oriColumnInfo["colmunComment"][$conf["editedColumnName"]]."'";
2934
 
2935
				}#else end
2936
 
2937
			}#else end	
2938
 
2939
		#組合sql語法
2940
		$sql="alter table ".$conf["selectedDataBaseName"].".".$conf["selectedDataTableName"]." change `".$conf["editedColumnName"]."` `".$conf["newColumnName"]."` ".$conf["newDataTableColmunType"]." ".$utf8." ".$conf["newDataTableColmunDefault"]." ".$conf["newDataTableColmunNotNull"]." ".$conf["newDataTableColmunAutoAdd"]." ".$comment." ;";
2941
 
2942
		#執行 sql 語法
2943
		#函式說明:
2944
		#執行mysql指令
2945
		#回傳結果::
2946
		#$result["status"],"true"為執行成功;"false"為執行失敗。
2947
		#$result["error"],錯誤訊息的陣列
2948
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
2949
		#$result["queryString"],mysql查詢的語言
2950
		#查詢號的解果,需要解析。
2951
		#必填參數:
2952
		$conf["db"]["execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
2953
		$conf["db"]["execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
2954
		$conf["db"]["execMysqlQuery"]["dbSql"]=$sql;#要執行sql語法
2955
		#可省略參數: 
2956
 
2957
		#如果有設定連線密碼
2958
		if(isset($conf["dbPassword"])){
2959
 
2960
			$conf["db"]["execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
2961
 
2962
			}#if end
2963
 
2964
		#如果有設定 $conf["dbPort"]	
2965
		if(isset($conf["dbPort"])){
2966
 
2967
			#設定 $conf["dbPort"]
2968
			$conf["db"]["execMysqlQuery"]["dbPort"]=$conf["dbPort"];
2969
 
2970
			}#if end	
2971
 
2972
		$sqlExecResult=db::execMysqlQuery($conf["db"]["execMysqlQuery"]);
2973
		unset($conf["db"]["execMysqlQuery"]);
2974
 
2975
		#如果執行 sql 語法錯誤
2976
		if($sqlExecResult["status"]=="false"){
2977
 
2978
			#設定執行失敗的識別
2979
			$result["status"]="false";
2980
 
2981
			#設定錯誤訊息
2982
			$result["error"]=$sqlExecResult;
2983
 
2984
			#回傳結果
2985
			return $result;
2986
 
2987
			}#if end
2988
 
2989
		#取得執行的sql語法
2990
		$result["sql"][]=$sqlExecResult["queryString"];
2991
 
2992
		#如果 $conf["newDataTableColmunKeyType"] 有設定
2993
		if(isset($conf["newDataTableColmunKeyType"])){
2994
 
2995
			#取得其key為何種
2996
			#函式說明:
2997
			#取得資料表所有欄位的詳細資訊
2998
			#回傳的內容:
2999
			#$result["status"],執行結果,"true"代表執行成功;"false"代表執行失敗
3000
			#$result["error"],錯誤訊息陣列
3001
			#$result["sql"],執行的sql語法
3002
			#$result["oriInput"],原始的資料表欄位資訊
3003
			#$result["everyLine"],逐行的欄位資訊
3004
			#$result["tableName"],當前查詢的資料表名稱
3005
			#$result["engine"],資料表使用的儲存引擎
3006
			#$result["charset"],資料表預設的編碼
3007
			#$result["columnName"][$i],各欄位的名稱陣列,$i爲0開始的數字,也可以使用欄位的名稱。
3008
			#$result["columnVarTypeAndLengthLimit"][$i],各欄位儲存的變數形態與長度限制,$i爲0開始的數字,也可以使用欄位的名稱。
3009
			#$result["columnNotNull"][$i],各欄位是否可以不爲null,"true"爲可以不爲null;"false"爲可以爲"null",$i爲0開始的數字,也可以使用欄位的名稱。
3010
			#$result["columnAutoIncrement"][$i],各欄位是否會自動加1,"true"爲會;"false"爲不會,$i爲0開始的數字,也可以使用欄位的名稱。
3011
			#$result["columnDefault"][$i],各欄位的預設內容,若無則爲"沒有指定",$i爲0開始的數字,也可以使用欄位的名稱。
3012
			#$result["columnOnUpdateAction"][$i],當資料有修改時,該欄位的內容要怎麼因應,$i爲0開始的數字,也可以使用欄位的名稱。
3013
			#$result["columnCharacterSet"][$i],各欄位使用的CharacterSet,$i爲0開始的數字,也可以使用欄位的名稱。
3014
			#$result["columnCollate"][$i],各欄位使用的Collate,$i爲0開始的數字,也可以使用欄位的名稱。
3015
			#$result["key"]["exist"],該資料表是否有索引鍵,"true"代表有;"false"代表沒有。
3016
			#$result["key"][$j],該資料表的索引鍵陣列,$j爲0開始的數字,也可以使用欄位的名稱。
3017
			#$result["primaryKey"],該資料表的主鍵
3018
			#$result["foreignKey"]["exist"],該資料表是否有foreign key,"true"代表有;"fasle"代表沒有。
3019
			#$result["foreignKey"]["constraintName"][$k],用來識別外鍵的CONSTRAINT名稱陣列,$k爲0開始的數字,也可以使用欄位的名稱。
3020
			#$result["foreignKey"]["columnName"][$k],外鍵的名稱陣列
3021
			#$result["foreignKey"]["referencesTable"][$k],外鍵參照的欄位,$k爲0開始的數字
3022
			#$result["foreignKey"]["referencesColumn"][$k],外鍵參照的欄位屬於哪個資料表,$k爲0開始的數字
3023
			#$result["foreignKey"]["OnUpdateAction"][$l],當參照的欄位資料更新時,會怎麼同步,$l爲0開始的數字
3024
			#$result["foreignKey"]["OnDeleteAction"][$m],當參照的欄位資料移除時,會怎麼同步,$m爲0開始的數字
3025
			#必填參數:
3026
			$conf["db"]["getTableColumnDetailInfo"]["dbAddress"]=$conf["dbAddress"];
3027
			$conf["db"]["getTableColumnDetailInfo"]["dbAccount"]=$conf["dbAccount"];
3028
			$conf["db"]["getTableColumnDetailInfo"]["selectedDataBase"]=$conf["selectedDataBaseName"];
3029
			$conf["db"]["getTableColumnDetailInfo"]["selectedDataTable"]=$conf["selectedDataTableName"];
3030
			#可省略參數:
3031
 
3032
			#如果 $conf["dbPassword"] 有設定
3033
			if(isset($conf["dbPassword"])){
3034
 
3035
				#套用連限時的密碼
3036
				$conf["db"]["getTableColumnDetailInfo"]["dbPassword"]=$conf["dbPassword"];
3037
 
3038
				}#if end
3039
 
3040
			#如果有設定 $conf["dbPort"]	
3041
			if(isset($conf["dbPort"])){
3042
 
3043
				#設定 $conf["dbPort"]
3044
				$conf["db"]["getTableColumnDetailInfo"]["dbPort"]=$conf["dbPort"];
3045
 
3046
				}#if end	
3047
 
3048
			$tableColumnDetial=db::getTableColumnDetailInfo($conf["db"]["getTableColumnDetailInfo"]);
3049
			unset($conf["db"]["getTableColumnDetailInfo"]);#卸除變數,避免錯誤產生.
3050
 
3051
			#如果取得資料表結構失敗
3052
			if($tableColumnDetial["status"]=="false"){
3053
 
3054
				#設置執行不正常
3055
				$result["status"]="false";
3056
 
3057
				#設置執行錯誤訊息
3058
				$result["error"]=$tableColumnDetial;
3059
 
3060
				#回傳結果
3061
				return $result;
3062
 
3063
				}#if end
3064
 
3065
			#判斷 $conf["newDataTableColmunKeyType"] 來進行處理
3066
			#"index"爲索引鍵,"foreign key"為外鍵,""為將鍵屬性取消。
3067
			switch($conf["newDataTableColmunKeyType"]){
3068
 
3069
				#如果 $conf["newDataTableColmunKeyType"] 是 ""
3070
				case "":
3071
 
3072
					#檢查目標欄位是主鍵或是索引鍵或是外鍵
3073
 
3074
					#debug	
3075
					#var_dump($tableColumnDetial);
3076
 
3077
					#如果 $tableColumnDetial["foreignKey"]["exist"] 等於 "true",代表有外鍵
3078
					if($tableColumnDetial["foreignKey"]["exist"]=="true"){
3079
 
3080
						#如果 $tableColumnDetial["foreignKey"]["columnName"][$conf["dbInformation"]["newColumnName"]] 存在,則代表該欄位為索引鍵
3081
						if(isset($tableColumnDetial["foreignKey"]["columnName"][$conf["newColumnName"]])){
3082
 
3083
							#移除外鍵
3084
							#函式說明:
3085
							#移除資料表單1欄位的外鍵
3086
							#回傳結果:
3087
							#$result["status"],"true",代表執行成功;"false"代表執行失敗
3088
							#$result["error"],錯誤訊息陣列
3089
							#$result["sql"],執行的sql字串.
3090
							#必填參數:
3091
							$conf["db"]["eraseForeignKey"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
3092
							$conf["db"]["eraseForeignKey"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
3093
							$conf["db"]["eraseForeignKey"]["selectedDataBaseName"]=$conf["selectedDataBaseName"];#爲目標資料表所屬的資料庫
3094
							$conf["db"]["eraseForeignKey"]["selectedDataTableName"]=$conf["selectedDataTableName"];#爲目標資料表所屬的資料庫
3095
							$conf["db"]["eraseForeignKey"]["erasedForeignKeyColumnConstraintName"]=$tableColumnDetial["foreignKey"]["constraintName"][$conf["newColumnName"]];#要移除外鍵欄位的CONSTRAINT名稱
3096
							#可省略參數: 
3097
 
3098
							#如果 $conf["dbPassword"] 存在
3099
							if(isset($conf["dbPassword"])){
3100
 
3101
								#則設定連線的密碼
3102
								$conf["db"]["eraseForeignKey"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
3103
 
3104
								}#if end
3105
 
3106
							#如果有設定 $conf["dbPort"]	
3107
							if(isset($conf["dbPort"])){
3108
 
3109
								#設定 $conf["dbPort"]
3110
								$conf["db"]["eraseForeignKey"]["dbPort"]=$conf["dbPort"];
3111
 
3112
								}#if end	
3113
 
3114
							$eraseForeignKeyResult=db::eraseForeignKey($conf["db"]["eraseForeignKey"]);
3115
							unset($conf["db"]["eraseForeignKey"]);
3116
 
3117
							#取得執行的sql字串
3118
							$result["sql"][]=$eraseForeignKeyResult["sql"];
3119
 
3120
							#如果 $eraseForeignKeyResult["status"]等於"fasle"
3121
							if($eraseForeignKeyResult["status"]=="false"){
3122
 
3123
								#設置出錯的識別
3124
								$result["status"]="fasle";
3125
 
3126
								#設置錯誤訊息
3127
								$result["error"]=$eraseForeignKeyResult;
3128
 
3129
								#回傳結果
3130
								return $result;
3131
 
3132
								}#if end
3133
 
3134
							}#if end
3135
 
3136
						}#if end
3137
 
3138
					#如果 $tableColumnDetial["key"]["exist"] 等於 "true",代表有索引鍵
3139
					if($tableColumnDetial["key"]["exist"]=="true"){
3140
 
3141
						#如果 $tableColumnDetial["key"][$conf["newColumnName"]] 存在,則代表該欄位為索引鍵
3142
						if(isset($tableColumnDetial["key"][$conf["newColumnName"]])){
3143
 
3144
							#移除索引鍵
3145
							#函式說明:
3146
							#移除資料表單1欄位的索引鍵
3147
							#回傳結果:
3148
							#$result["status"],"true",代表執行成功;"false"代表執行失敗
3149
							#$result["error"],錯誤訊息陣列
3150
							#$result["sql"],執行的sql字串.
3151
							#必填參數:
3152
							$conf["db"]["eraseIndexKey"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
3153
							$conf["db"]["eraseIndexKey"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
3154
							$conf["db"]["eraseIndexKey"]["selectedDataBaseName"]=$conf["selectedDataBaseName"];#爲目標資料表所屬的資料庫
3155
							$conf["db"]["eraseIndexKey"]["selectedDataTableName"]=$conf["selectedDataTableName"];#爲目標資料表所屬的資料表
3156
							$conf["db"]["eraseIndexKey"]["erasedIndexKeyColumnConstraintName"]=$tableColumnDetial["keyConstraintName"][$conf["newColumnName"]];#要移除外鍵欄位的CONSTRAINT名稱
3157
							#可省略參數:
3158
 
3159
							#如果 $conf["dbPassword"] 存在
3160
							if(isset($conf["dbPassword"])){
3161
 
3162
								#則設定連線的密碼
3163
								$conf["db"]["eraseIndexKey"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
3164
 
3165
								}#if end
3166
 
3167
							#如果有設定 $conf["dbPort"]	
3168
							if(isset($conf["dbPort"])){
3169
 
3170
								#設定 $conf["dbPort"]
3171
								$conf["db"]["eraseIndexKey"]["dbPort"]=$conf["dbPort"];
3172
 
3173
								}#if end	
3174
 
3175
							$eraseIndexKeyResult=db::eraseIndexKey($conf["db"]["eraseIndexKey"]);
3176
							#var_dump($conf["db"]["eraseIndexKey"]);
3177
							unset($conf["db"]);
3178
 
3179
							#debug
3180
							#var_dump($eraseIndexKeyResult);
3181
 
3182
							#取得執行的sql語言
3183
							$result["sql"][]=$eraseIndexKeyResult["sql"];
3184
 
3185
							#如果 $eraseIndexKeyResult["status"]等於"fasle"
3186
							if($eraseIndexKeyResult["status"]=="false"){
3187
 
3188
								#設置出錯的識別
3189
								$result["status"]="false";
3190
 
3191
								#設置錯誤訊息
3192
								$result["error"]=$eraseIndexKeyResult;
3193
 
3194
								#回傳結果
3195
								return $result;
3196
 
3197
								}#if end
3198
 
3199
							}#if end
3200
 
3201
						}#if end
3202
 
3203
					#中斷switch
3204
					break;
3205
 
3206
				#如果 $conf["newDataTableColmunKeyType"] 是 "index"
3207
				case "index":
3208
 
3209
					#如果 $tableColumnDetial["foreignKey"]["exist"] 等於 "true",代表有外鍵
3210
					if($tableColumnDetial["foreignKey"]["exist"]=="true"){
3211
 
3212
						#echo "have foreign key";
3213
 
3214
						#如果 $tableColumnDetial["foreignKey"]["columnName"][$conf["newColumnName"]] 存在,則代表該欄位為索引鍵
3215
						if(isset($tableColumnDetial["foreignKey"]["columnName"][$conf["newColumnName"]])){
3216
 
3217
							#移除外鍵
3218
							#函式說明:
3219
							#移除資料表單1欄位的外鍵
3220
							#回傳結果:
3221
							#$result["status"],"true",代表執行成功;"false"代表執行失敗
3222
							#$result["error"],錯誤訊息陣列
3223
							#必填參數:
3224
							$conf["db"]["eraseForeignKey"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
3225
							$conf["db"]["eraseForeignKey"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
3226
							$conf["db"]["eraseForeignKey"]["selectedDataBaseName"]=$conf["selectedDataBaseName"];#爲目標資料表所屬的資料庫
3227
							$conf["db"]["eraseForeignKey"]["selectedDataTableName"]=$conf["selectedDataTableName"];#爲目標資料表所屬的資料庫
3228
							$conf["db"]["eraseForeignKey"]["erasedForeignKeyColumnConstraintName"]=$tableColumnDetial["foreignKey"]["constraintName"][$conf["newColumnName"]];#要移除外鍵欄位的CONSTRAINT名稱
3229
							#可省略參數: 
3230
 
3231
							#如果 $conf["dbPassword"] 存在
3232
							if(isset($conf["dbPassword"])){
3233
 
3234
								#則設定連線的密碼
3235
								$conf["db"]["eraseForeignKey"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
3236
 
3237
								}#if end
3238
 
3239
							#如果有設定 $conf["dbPort"]	
3240
							if(isset($conf["dbPort"])){
3241
 
3242
								#設定 $conf["dbPort"]
3243
								$conf["db"]["eraseForeignKey"]["dbPort"]=$conf["dbPort"];
3244
 
3245
								}#if end			
3246
 
3247
							$eraseForeignKeyResult=db::eraseForeignKey($conf["db"]["eraseForeignKey"]);
3248
							unset($conf["db"]["eraseForeignKey"]);
3249
 
3250
							#執行的sql字串
3251
							$result["sql"][]=$eraseForeignKeyResult["sql"];
3252
 
3253
							#如果 $eraseForeignKeyResult["status"]等於"fasle"
3254
							if($eraseForeignKeyResult["status"]=="false"){
3255
 
3256
								#設置出錯的識別
3257
								$result["status"]="false";
3258
 
3259
								#設置錯誤訊息
3260
								$result["error"]=$eraseForeignKeyResult;
3261
 
3262
								#回傳結果
3263
								return $result;
3264
 
3265
								}#if end
3266
 
3267
							}#if end
3268
 
3269
						}#if end
3270
 
3271
					#如果 $tableColumnDetial["key"]["exist"] 等於 "true",代表有索引鍵
3272
					if($tableColumnDetial["key"]["exist"]=="true"){
3273
 
3274
						#檢查目標欄位是否為索引鍵
3275
						if(!isset($tableColumnDetial["index"][$conf["newColumnName"]])){
3276
 
3277
							#代表目標欄位不為索引鍵
3278
 
3279
							#建立索引鍵
3280
							#函式說明:
3281
							#新增資料表的欄位
3282
							#回傳結果:
3283
							#$result["status"],"true",代表執行成功;"false"代表執行失敗.
3284
							#$result["function"],當前執行的函數名稱.
3285
							#$result["error"],錯誤訊息陣列.
3286
							#$result["warning"],警告訊息.
3287
							#$result["sql"],執行的sql字串.
3288
							#必填參數:
3289
							$conf["db"]["setColumnIndex"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
3290
							$conf["db"]["setColumnIndex"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
3291
							$conf["db"]["setColumnIndex"]["selectedDataBaseName"]=$conf["selectedDataBaseName"];#爲目標資料表所屬的資料庫
3292
							$conf["db"]["setColumnIndex"]["selectedDataTableName"]=$conf["selectedDataTableName"];#爲目標資料表所屬的資料庫
3293
							$conf["db"]["setColumnIndex"]["indexedColumnName"]=$conf["newColumnName"];#要設爲index的欄位名稱
3294
							#可省略參數:
3295
 
3296
							#如果 $conf["dbPassword"] 存在
3297
							if(isset($conf["dbPassword"])){
3298
 
3299
								#則設定連線的密碼
3300
								$conf["db"]["setColumnIndex"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
3301
 
3302
								}#if end
3303
 
3304
							#如果有設定 $conf["dbPort"]	
3305
							if(isset($conf["dbPort"])){
3306
 
3307
								#設定 $conf["dbPort"]
3308
								$conf["db"]["setColumnIndex"]["dbPort"]=$conf["dbPort"];
3309
 
3310
								}#if end	
3311
 
3312
							$setColumnIndexResult=db::setColumnIndex($conf["db"]["setColumnIndex"]);
3313
							unset($conf["db"]["setColumnIndex"]);
3314
 
3315
							#如果設置 column index 失敗
3316
							if($setColumnIndexResult["status"]==="false"){
3317
 
3318
								#設置出錯的識別
3319
								$result["status"]="false";
3320
 
3321
								#設置錯誤訊息
3322
								$result["error"]=$setColumnIndexResult;
3323
 
3324
								#回傳結果
3325
								return $result;
3326
 
3327
								}#if end
3328
 
3329
							#如果有執行 sql
3330
							if(isset($setColumnIndexResult["sql"])){
3331
 
3332
								#取得執行的sql字串
3333
								$result["sql"][]=$setColumnIndexResult["sql"];
3334
 
3335
								}#if end
3336
 
3337
							#如果 $setColumnIndexResult["status"] 為 "fasle"
3338
							if($setColumnIndexResult["status"]=="fasle"){
3339
 
3340
								#設置出錯的識別
3341
								$result["status"]="false";
3342
 
3343
								#設置錯誤訊息
3344
								$result["error"]=$setColumnIndexResult;
3345
 
3346
								#回傳結果
3347
								return $result;
3348
 
3349
								}#if end
3350
 
3351
							}#if end
3352
 
3353
						}#if end
3354
 
3355
					#如果 $tableColumnDetial["key"]["exist"] 等於 "fasle",代表沒有索引鍵
3356
					if($tableColumnDetial["key"]["exist"]=="false"){
3357
 
3358
						#建立索引鍵
3359
						#函式說明:
3360
						#新增資料表的欄位
3361
						#回傳結果:
3362
						#$result["status"],"true",代表執行成功;"false"代表執行失敗
3363
						#$result["error"],錯誤訊息陣列
3364
						#必填參數:
3365
						$conf["db"]["setColumnIndex"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
3366
						$conf["db"]["setColumnIndex"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
3367
						$conf["db"]["setColumnIndex"]["selectedDataBaseName"]=$conf["selectedDataBaseName"];#爲目標資料表所屬的資料庫
3368
						$conf["db"]["setColumnIndex"]["selectedDataTableName"]=$conf["selectedDataTableName"];#爲目標資料表所屬的資料庫
3369
						$conf["db"]["setColumnIndex"]["indexedColumnName"]=$conf["newColumnName"];#要設爲index的欄位名稱
3370
						#可省略參數:
3371
 
3372
						#如果 $conf["dbPassword"] 存在
3373
						if(isset($conf["dbPassword"])){
3374
 
3375
							#則設定連線的密碼
3376
							$conf["db"]["setColumnIndex"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
3377
 
3378
							}#if end
3379
 
3380
						#如果有設定 $conf["dbPort"]	
3381
						if(isset($conf["dbPort"])){
3382
 
3383
							#設定 $conf["dbPort"]
3384
							$conf["db"]["setColumnIndex"]["dbPort"]=$conf["dbPort"];
3385
 
3386
							}#if end	
3387
 
3388
						$setColumnIndexResult=db::setColumnIndex($conf["db"]["setColumnIndex"]);
3389
						unset($conf["db"]["setColumnIndex"]);
3390
 
3391
						#取得執行的sql字串.
3392
						$result["sql"][]=$setColumnIndexResult["sql"];
3393
 
3394
						#如果 $setColumnIndexResult["status"] 為 "fasle"
3395
						if($setColumnIndexResult["status"]=="fasle"){
3396
 
3397
							#設置出錯的識別
3398
							$result["status"]="false";
3399
 
3400
							#設置錯誤訊息
3401
							$result["error"]=$setColumnIndexResult;
3402
 
3403
							#回傳結果
3404
							return $result;
3405
 
3406
							}#if end
3407
 
3408
						}#if end
3409
 
3410
					#中斷switch
3411
					break;
3412
 
3413
				#如果是 foreign key
3414
				case "foreign key":
3415
 
3416
					#echo "enter foreign key";
3417
 
3418
					#檢查該欄位是否為foreign key
3419
					#如果 $tableColumnDetial["foreignKey"]["exist"] 等於 "true",代表有外鍵
3420
					if($tableColumnDetial["foreignKey"]["exist"]=="true"){
3421
 
3422
						#echo "have foreig key";
3423
 
3424
						#如果 $tableColumnDetial["foreignKey"]["columnName"][$conf["dbInformation"]["newColumnName"]] 存在,則代表該欄位為索引鍵
3425
						if(isset($tableColumnDetial["foreignKey"]["columnName"][$conf["newColumnName"]])){
3426
 
3427
							#移除外鍵
3428
							#函式說明:
3429
							#移除資料表單1欄位的外鍵
3430
							#回傳結果:
3431
							#$result["status"],"true",代表執行成功;"false"代表執行失敗
3432
							#$result["error"],錯誤訊息陣列
3433
							#必填參數:
3434
							$conf["db"]["eraseForeignKey"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
3435
							$conf["db"]["eraseForeignKey"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
3436
							$conf["db"]["eraseForeignKey"]["selectedDataBaseName"]=$conf["selectedDataBaseName"];#爲目標資料表所屬的資料庫
3437
							$conf["db"]["eraseForeignKey"]["selectedDataTableName"]=$conf["selectedDataTableName"];#爲目標資料表所屬的資料庫
3438
							$conf["db"]["eraseForeignKey"]["erasedForeignKeyColumnConstraintName"]=$tableColumnDetial["foreignKey"]["constraintName"][$conf["newColumnName"]];#要移除外鍵欄位的CONSTRAINT名稱
3439
							#可省略參數: 
3440
 
3441
							#如果 $conf["dbPassword"] 存在
3442
							if(isset($conf["dbPassword"])){
3443
 
3444
								#則設定連線的密碼
3445
								$conf["db"]["eraseForeignKey"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
3446
 
3447
								}#if end
3448
 
3449
							#如果有設定 $conf["dbPort"]	
3450
							if(isset($conf["dbPort"])){
3451
 
3452
								#設定 $conf["dbPort"]
3453
								$conf["db"]["eraseForeignKey"]["dbPort"]=$conf["dbPort"];
3454
 
3455
								}#if end
3456
 
3457
							$eraseForeignKeyResult=db::eraseForeignKey($conf["db"]["eraseForeignKey"]);
3458
							unset($conf["db"]["eraseForeignKey"]);
3459
 
3460
							#取得執行的sql字串
3461
							$result["sql"][]=$eraseForeignKeyResult["sql"];
3462
 
3463
							#如果 $eraseForeignKeyResult["status"]等於"fasle"
3464
							if($eraseForeignKeyResult["status"]=="false"){
3465
 
3466
								#設置出錯的識別
3467
								$result["status"]="false";
3468
 
3469
								#設置錯誤訊息
3470
								$result["error"]=$eraseForeignKeyResult;
3471
 
3472
								#回傳結果
3473
								return $result;
3474
 
3475
								}#if end
3476
 
3477
							}#if end
3478
 
3479
						}#if end
3480
 
3481
					#檢查該欄位是否為index
3482
					#如果 $tableColumnDetial["key"]["exist"] 等於 "false",代表沒有索引鍵
3483
					if($tableColumnDetial["key"]["exist"]=="false"){
3484
 
3485
						#echo "have no index";
3486
 
3487
						#建立索引鍵
3488
						#函式說明:
3489
						#新增資料表的欄位
3490
						#回傳結果:
3491
						#$result["status"],"true",代表執行成功;"false"代表執行失敗
3492
						#$result["error"],錯誤訊息陣列
3493
						#必填參數:
3494
						$conf["db"]["setColumnIndex"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
3495
						$conf["db"]["setColumnIndex"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
3496
						$conf["db"]["setColumnIndex"]["selectedDataBaseName"]=$conf["selectedDataBaseName"];#爲目標資料表所屬的資料庫
3497
						$conf["db"]["setColumnIndex"]["selectedDataTableName"]=$conf["selectedDataTableName"];#爲目標資料表所屬的資料庫
3498
						$conf["db"]["setColumnIndex"]["indexedColumnName"]=$conf["newColumnName"];#要設爲index的欄位名稱
3499
						#可省略參數:
3500
 
3501
						#如果 $conf["dbPassword"] 存在
3502
						if(isset($conf["dbPassword"])){
3503
 
3504
							#則設定連線的密碼
3505
							$conf["db"]["setColumnIndex"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
3506
 
3507
							}#if end
3508
 
3509
						#如果有設定 $conf["dbPort"]	
3510
						if(isset($conf["dbPort"])){
3511
 
3512
							#設定 $conf["dbPort"]
3513
							$conf["db"]["setColumnIndex"]["dbPort"]=$conf["dbPort"];
3514
 
3515
							}#if end	
3516
 
3517
						$setColumnIndexResult=db::setColumnIndex($conf["db"]["setColumnIndex"]);
3518
						unset($conf["db"]["setColumnIndex"]);
3519
 
3520
						#取得執行的sql字串
3521
						$result["sql"][]=$setColumnIndexResult["sql"];
3522
 
3523
						#如果 $setColumnIndexResult["status"] 為 "false"
3524
						if($setColumnIndexResult["status"]=="false"){
3525
 
3526
							#設置出錯的識別
3527
							$result["status"]="false";
3528
 
3529
							#設置錯誤訊息
3530
							$result["error"]=$setColumnIndexResult;
3531
 
3532
							#回傳結果
3533
							return $result;
3534
 
3535
							}#if end
3536
 
3537
						}#if end
3538
 
3539
					#反之有索引鍵	
3540
					#如果目標欄位不是索引鍵
3541
					else if(!isset($tableColumnDetial["key"][$conf["newColumnName"]])){
3542
 
3543
						#建立索引鍵
3544
						#函式說明:
3545
						#新增資料表的欄位
3546
						#回傳結果:
3547
						#$result["status"],"true",代表執行成功;"false"代表執行失敗
3548
						#$result["error"],錯誤訊息陣列
3549
						#必填參數:
3550
						$conf["db"]["setColumnIndex"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
3551
						$conf["db"]["setColumnIndex"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
3552
						$conf["db"]["setColumnIndex"]["selectedDataBaseName"]=$conf["selectedDataBaseName"];#爲目標資料表所屬的資料庫
3553
						$conf["db"]["setColumnIndex"]["selectedDataTableName"]=$conf["selectedDataTableName"];#爲目標資料表所屬的資料庫
3554
						$conf["db"]["setColumnIndex"]["indexedColumnName"]=$conf["newColumnName"];#要設爲index的欄位名稱
3555
						#可省略參數:
3556
 
3557
						#如果 $conf["dbPassword"] 存在
3558
						if(isset($conf["dbPassword"])){
3559
 
3560
							#則設定連線的密碼
3561
							$conf["db"]["setColumnIndex"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
3562
 
3563
							}#if end
3564
 
3565
						#如果有設定 $conf["dbPort"]	
3566
						if(isset($conf["dbPort"])){
3567
 
3568
							#設定 $conf["dbPort"]
3569
							$conf["db"]["setColumnIndex"]["dbPort"]=$conf["dbPort"];
3570
 
3571
							}#if end			
3572
 
3573
						$setColumnIndexResult=db::setColumnIndex($conf["db"]["setColumnIndex"]);
3574
						unset($conf["db"]["setColumnIndex"]);
3575
 
3576
						#取得執行的sql字串
3577
						$result["sql"][]=$setColumnIndexResult["sql"];
3578
 
3579
						#如果 $setColumnIndexResult["status"] 為 "false"
3580
						if($setColumnIndexResult["status"]=="false"){
3581
 
3582
							#設置出錯的識別
3583
							$result["status"]="false";
3584
 
3585
							#設置錯誤訊息
3586
							$result["error"]=$setColumnIndexResult;
3587
 
3588
							#回傳結果
3589
							return $result;
3590
 
3591
							}#if end					
3592
 
3593
						}#else end
3594
 
3595
					#檢查該欄位的foreign key設定參數是否存在
3596
					#函式說明:
3597
					#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
3598
					#回傳結果:
3599
					#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
3600
					#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
3601
					#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
3602
					#必填參數:
3603
					$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
3604
					$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("foreignKeyReferenceTable","foreignKeyReferenceColumn");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
3605
					#可省略參數:
3606
					#$conf["variableType"]=array();#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
3607
					#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
3608
					$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
3609
					unset($conf["variableCheck"]["isexistMuti"]);
3610
 
3611
					#如果檢查失敗
3612
					if($checkResult["status"]=="false"){
3613
 
3614
						#設置執行失敗的訊息
3615
						$result["status"]="false";
3616
 
3617
						#設置錯誤訊息
3618
						$result["error"]=$checkResult;
3619
 
3620
						#回傳結果
3621
						return $result;
3622
 
3623
						}#if end
3624
 
3625
					#如果檢查不通過
3626
					if($checkResult["passed"]=="false"){
3627
 
3628
						#設置執行失敗的訊息
3629
						$result["status"]="false";
3630
 
3631
						#設置錯誤訊息
3632
						$result["error"]=$checkResult;
3633
 
3634
						#回傳結果
3635
						return $result;
3636
 
3637
						}#if end
3638
 
3639
					#如果 $conf["foreignKeyUpdateAction"] 不存在
3640
					if(!isset($conf["foreignKeyUpdateAction"])){
3641
 
3642
						#則預設為"CASCADE"將有所關聯的紀錄行也會進行刪除或修改。
3643
						$conf["foreignKeyUpdateAction"]="CASCADE";#若要設定foreign key的話,可以指定參考的資料表欄位更新時該欄位該怎麼處理,預設為"CASCADE",會將有所關聯的紀錄行也會進行刪除或修改。"SET NULL"代表會將有所關聯的紀錄行設定成 NULL。"NO ACTION"代表有存在的關聯紀錄行時,會禁止父資料表的刪除或修改動作。
3644
 
3645
						}#if end
3646
 
3647
					#如果 $conf["foreignKeyDeleteAction"] 沒有設定
3648
					if(!isset($conf["foreignKeyDeleteAction"])){
3649
 
3650
						#預設為"SET NULL",會將有所關聯的紀錄行設定成 NULL。
3651
						$conf["foreignKeyDeleteAction"]="SET NULL";#若要設定foreign key的話,可以指定參考的資料表欄位移除時該欄位該怎麼處理,預設為"SET NULL",會將有所關聯的紀錄行設定成 NULL。"NO ACTION"代表有存在的關聯紀錄行時,會禁止父資料表的刪除或修改動作。
3652
 
3653
						}#if end
3654
 
3655
					#檢查目標欄位的 key constraint 名稱
3656
					#取得其key為何種
3657
					#函式說明:
3658
					#取得資料表所有欄位的詳細資訊
3659
					#回傳的內容:
3660
					#$result["status"],執行結果,"true"代表執行成功;"false"代表執行失敗
3661
					#$result["error"],錯誤訊息陣列
3662
					#$result["sql"],執行的sql語法
3663
					#$result["oriInput"],原始的資料表欄位資訊
3664
					#$result["everyLine"],逐行的欄位資訊
3665
					#$result["tableName"],當前查詢的資料表名稱
3666
					#$result["engine"],資料表使用的儲存引擎
3667
					#$result["charset"],資料表預設的編碼
3668
					#$result["columnName"][$i],各欄位的名稱陣列,$i爲0開始的數字,也可以使用欄位的名稱。
3669
					#$result["columnVarTypeAndLengthLimit"][$i],各欄位儲存的變數形態與長度限制,$i爲0開始的數字,也可以使用欄位的名稱。
3670
					#$result["columnNotNull"][$i],各欄位是否可以不爲null,"true"爲可以不爲null;"false"爲可以爲"null",$i爲0開始的數字,也可以使用欄位的名稱。
3671
					#$result["columnAutoIncrement"][$i],各欄位是否會自動加1,"true"爲會;"false"爲不會,$i爲0開始的數字,也可以使用欄位的名稱。
3672
					#$result["columnDefault"][$i],各欄位的預設內容,若無則爲"沒有指定",$i爲0開始的數字,也可以使用欄位的名稱。
3673
					#$result["columnOnUpdateAction"][$i],當資料有修改時,該欄位的內容要怎麼因應,$i爲0開始的數字,也可以使用欄位的名稱。
3674
					#$result["columnCharacterSet"][$i],各欄位使用的CharacterSet,$i爲0開始的數字,也可以使用欄位的名稱。
3675
					#$result["columnCollate"][$i],各欄位使用的Collate,$i爲0開始的數字,也可以使用欄位的名稱。
3676
					#$result["key"]["exist"],該資料表是否有索引鍵,"true"代表有;"false"代表沒有。
3677
					#$result["key"][$j],該資料表的索引鍵陣列,$j爲0開始的數字,也可以使用欄位的名稱。
3678
					#$result["primaryKey"],該資料表的主鍵
3679
					#$result["foreignKey"]["exist"],該資料表是否有foreign key,"true"代表有;"fasle"代表沒有。
3680
					#$result["foreignKey"]["constraintName"][$k],用來識別外鍵的CONSTRAINT名稱陣列,$k爲0開始的數字,也可以使用欄位的名稱。
3681
					#$result["foreignKey"]["columnName"][$k],外鍵的名稱陣列
3682
					#$result["foreignKey"]["referencesTable"][$k],外鍵參照的欄位,$k爲0開始的數字
3683
					#$result["foreignKey"]["referencesColumn"][$k],外鍵參照的欄位屬於哪個資料表,$k爲0開始的數字
3684
					#$result["foreignKey"]["OnUpdateAction"][$l],當參照的欄位資料更新時,會怎麼同步,$l爲0開始的數字
3685
					#$result["foreignKey"]["OnDeleteAction"][$m],當參照的欄位資料移除時,會怎麼同步,$m爲0開始的數字
3686
					#必填參數:
3687
					$conf["db"]["getTableColumnDetailInfo"]["dbAddress"]=$conf["dbAddress"];
3688
					$conf["db"]["getTableColumnDetailInfo"]["dbAccount"]=$conf["dbAccount"];
3689
					$conf["db"]["getTableColumnDetailInfo"]["selectedDataBase"]=$conf["selectedDataBaseName"];
3690
					$conf["db"]["getTableColumnDetailInfo"]["selectedDataTable"]=$conf["selectedDataTableName"];
3691
					#可省略參數:
3692
 
3693
					#如果 $conf["dbPassword"] 有設定
3694
					if(isset($conf["dbPassword"])){
3695
 
3696
						#套用連限時的密碼
3697
						$conf["db"]["getTableColumnDetailInfo"]["dbPassword"]=$conf["dbPassword"];
3698
 
3699
						}#if end
3700
 
3701
					#如果有設定 $conf["dbPort"]	
3702
					if(isset($conf["dbPort"])){
3703
 
3704
						#設定 $conf["dbPort"]
3705
						$conf["db"]["getTableColumnDetailInfo"]["dbPort"]=$conf["dbPort"];
3706
 
3707
						}#if end			
3708
 
3709
					$tableColumnDetial=db::getTableColumnDetailInfo($conf["db"]["getTableColumnDetailInfo"]);
3710
					unset($conf["db"]["getTableColumnDetailInfo"]);#卸除變數,避免錯誤產生.
3711
 
3712
					#如果取得資料表結構失敗
3713
					if($tableColumnDetial["status"]=="false"){
3714
 
3715
						#設置執行不正常
3716
						$result["status"]="false";
3717
 
3718
						#設置執行錯誤訊息
3719
						$result["error"]=$tableColumnDetial;
3720
 
3721
						#回傳結果
3722
						return $result;
3723
 
3724
						}#if end	
3725
 
3726
					#依據設定將該欄位設定為foreign key
3727
 
3728
					#設定其參照的資料表與欄位的sql語法
3729
					$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"];
3730
 
3731
					#執行 sql 語法
3732
					#函式說明:
3733
					#執行mysql指令
3734
					#回傳結果::
3735
					#$result["status"],"true"為執行成功;"false"為執行失敗。
3736
					#$result["error"],錯誤訊息的陣列
3737
					#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
3738
					#$result["queryString"],mysql查詢的語言
3739
					#查詢號的解果,需要解析。
3740
					#必填參數:
3741
					$conf["db"]["execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
3742
					$conf["db"]["execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
3743
					$conf["db"]["execMysqlQuery"]["dbSql"]=$sql;#要執行sql語法
3744
					#可省略參數: 
3745
 
3746
					#如果有設定連線密碼
3747
					if(isset($conf["dbPassword"])){
3748
 
3749
						$conf["db"]["execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
3750
 
3751
						}#if end
3752
 
3753
					#$conf["db"]["execMysqlQuery"]["dbName"]=$conf["selectedDataBaseName"];#為是否要指定資料庫,預設不指定.
3754
 
3755
					#如果有設定 $conf["dbPort"]	
3756
					if(isset($conf["dbPort"])){
3757
 
3758
						#設定 $conf["dbPort"]
3759
						$conf["db"]["execMysqlQuery"]["dbPort"]=$conf["dbPort"];
3760
 
3761
						}#if end	
3762
 
3763
					$sqlExecResult=db::execMysqlQuery($conf["db"]["execMysqlQuery"]);
3764
					unset($conf["db"]["execMysqlQuery"]);
3765
 
3766
					#var_dump($sqlExecResult);
3767
 
3768
					#取得執行的sql語法
3769
					$result["sql"][]=$sqlExecResult["queryString"];
3770
 
3771
					#如果執行 sql 語法錯誤
3772
					if($sqlExecResult["status"]=="false"){
3773
 
3774
						#echo "fasle";
3775
 
3776
						#設定執行失敗的識別
3777
						$result["status"]="false";
3778
 
3779
						#設定錯誤訊息
3780
						$result["error"]=$sqlExecResult;
3781
 
3782
						#回傳結果
3783
						return $result;
3784
 
3785
						}#if end					
3786
 
3787
					#跳出 foreign key
3788
					break;
3789
 
3790
				#如果不是以上參數
3791
				default:
3792
 
3793
					#設定執行錯誤的識別
3794
					$result["status"]="false";
3795
 
3796
					#設定錯誤訊息
3797
					$result["error"]="可用的鍵型為index、foregin key、primary key";
3798
 
3799
					#回傳結果
3800
					return $result;
3801
 
3802
				}#switch end
3803
 
3804
			}#if end
3805
 
3806
		#執行到這邊代表執行成功
3807
		#設定執行成功的識別
3808
		$result["status"]="true";
3809
 
3810
		#回傳結果
3811
		return $result;
3812
 
3813
		}#function editColumn end
3814
 
3815
	/*
3816
	#函式說明:
3817
	#新增資料表的欄位
3818
	#回傳結果:
3819
	#$result["status"],"true",代表執行成功;"false"代表執行失敗.
3820
	#$result["function"],當前執行的函數名稱.
3821
	#$result["error"],錯誤訊息陣列.
3822
	#$result["warning"],警告訊息.
3823
	#$result["sql"],執行的sql字串.
3824
	#必填參數:
3825
	$conf["dbAddress"],字串,爲mysql-Server的位置.
3826
	$conf["dbAddress"]=$dbAddress;
3827
	$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號.
3828
	$conf["dbAccount"]=$dbAccount;
3829
	$conf["selectedDataBaseName"],字串,爲目標資料表所屬的資料庫.
3830
	$conf["selectedDataBaseName"]="";
3831
	$conf["selectedDataTableName"],字串,爲目標資料表所屬的資料庫.
3832
	$conf["selectedDataTableName"]="";
3833
	$conf["indexedColumnName"],字串,要設爲index的欄位名稱.
3834
	$conf["indexedColumnName"]="";
3835
	#可省略參數:
3836
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
3837
	#$conf["dbPassword"]=$dbPassword;
3838
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,預設為3306.
3839
	#$conf["dbPort"]="3306";
3840
	#參考資料:
3841
	#無.
3842
	#備註:
3843
	#無.
3844
	*/
3845
	public static function setColumnIndex($conf){
3846
 
3847
		#初始化要回傳的內容
3848
		$result=array();
3849
 
3850
		#取得當前執行的函數名稱
3851
		$result["function"]=__FUNCTION__;
3852
 
3853
		#如果 $conf 不為陣列
3854
		if(gettype($conf)!="array"){
3855
 
3856
			#設置執行失敗
3857
			$result["status"]="false";
3858
 
3859
			#設置執行錯誤訊息
3860
			$result["error"][]="\$conf變數須為陣列形態";
3861
 
3862
			#如果傳入的參數為 null
3863
			if($conf==null){
3864
 
3865
				#設置執行錯誤訊息
3866
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
3867
 
3868
				}#if end
3869
 
3870
			#回傳結果
3871
			return $result;
3872
 
3873
			}#if end
3874
 
3875
		#函式說明:
3876
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
3877
		#回傳結果:
3878
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
3879
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
3880
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
3881
		#必填參數:
3882
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
3883
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("dbAddress","dbAccount","selectedDataBaseName","selectedDataTableName","indexedColumnName");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
3884
		#可省略參數:
3885
		#$conf["variableType"]=array();#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
3886
		#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
3887
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
3888
		unset($conf["variableCheck"]["isexistMuti"]);
3889
 
3890
		#如果檢查不通過
3891
		if($checkResult["passed"]=="false"){
3892
 
3893
			#設置執行失敗的訊息
3894
			$result["status"]="false";
3895
 
3896
			#設置錯誤訊息
3897
			$result["error"]=$checkResult;
3898
 
3899
			#回傳結果
3900
			return $result;
3901
 
3902
			}#if end
3903
 
3904
		#查詢該欄位是否已經是index了
3905
		#函式說明:
3906
		#取得資料表所有欄位的詳細資訊
3907
		#回傳的內容:
3908
		#$result["status"],執行結果,"true"代表執行成功;"false"代表執行失敗
3909
		#$result["error"],錯誤訊息陣列
3910
		#$result["function"],當前執行的函數名稱.
3911
		#$result["sql"],執行的sql語法
3912
		#$result["oriInput"],原始的資料表欄位資訊
3913
		#$result["everyLine"],逐行的欄位資訊
3914
		#$result["tableName"],當前查詢的資料表名稱
3915
		#$result["engine"],資料表使用的儲存引擎
3916
		#$result["charset"],資料表預設的編碼
3917
		#$result["columnName"][$i],各欄位的名稱陣列,$i爲1開始的數字,也可以使用欄位的名稱。
3918
		#$result["columnVarTypeAndLengthLimit"][$i],各欄位儲存的變數形態與長度限制,$i爲1開始的數字,也可以使用欄位的名稱。
3919
		#$result["columnVarType"][$i],各欄位變數儲存的型態,$i爲1開始的數字,也可以使用欄位的名稱.
3920
		#$result["columnVarLengthLimit"][$i],個欄位變數的長度限制,若不存在其限制,則為"",$i爲1開始的數字,也可以使用欄位的名稱.
3921
		#$result["columnNotNull"][$i],各欄位是否不可爲null,"true"爲不可以爲null;"false"爲可爲"null",$i爲1開始的數字,也可以使用欄位的名稱。
3922
		#$result["columnAutoIncrement"][$i],各欄位是否會自動加1,"true"爲會;"false"爲不會,$i爲1開始的數字,也可以使用欄位的名稱。
3923
		#$result["columnDefault"][$i],各欄位的預設內容,若無則爲"沒有指定",$i爲1開始的數字,也可以使用欄位的名稱。
3924
		#$result["columnOnUpdateAction"][$i],當資料有修改時,該欄位的內容要怎麼因應,$i爲1開始的數字,也可以使用欄位的名稱。
3925
		#$result["columnCharacterSet"][$i],各欄位使用的CharacterSet,$i爲1開始的數字,也可以使用欄位的名稱。
3926
		#$result["columnCollate"][$i],各欄位使用的Collate,$i爲1開始的數字,也可以使用欄位的名稱。
3927
		#$result["key"]["exist"],該資料表是否有索引鍵,"true"代表有;"false"代表沒有。
3928
		#$result["key"][$j],該資料表的索引鍵陣列,$j爲0開始的數字,也可以使用欄位的名稱。
3929
		#$result["keyConstraintName"][$j],該資料表用於識別索引鍵的CONSTRAINT名稱陣列,$j爲1開始的數字,也可以使用欄位的名稱。
3930
		#$result["primaryKey"],該資料表的主鍵
3931
		#$result["foreignKey"]["exist"],該資料表是否有foreign key,"true"代表有;"fasle"代表沒有。
3932
		#$result["foreignKey"]["constraintName"][$k],用來識別外鍵的CONSTRAINT名稱陣列,$k爲1開始的數字,也可以使用欄位的名稱。
3933
		#$result["foreignKey"]["columnName"][$k],外鍵的名稱陣列,$k爲1開始的數字,也可以使用欄位的名稱。
3934
		#$result["foreignKey"]["referencesTable"][$k],外鍵參照的欄位,$k爲1開始的數字,,也可用欄位的名稱來找value.
3935
		#$result["foreignKey"]["referencesColumn"][$k],外鍵參照的欄位屬於哪個資料表,$k爲1開始的數字,也可用欄位的名稱來找value.
3936
		#$result["foreignKey"]["onUpdateAction"][$i],當參照的欄位資料更新時,會怎麼同步,$i爲1開始的數字,也可用欄位的名稱來找value.
3937
		#$result["foreignKey"]["onDeleteAction"][$i],當參照的欄位資料移除時,會怎麼同步,$i爲1開始的數字,也可用欄位的名稱來找value.
3938
		#必填參數:
3939
		$conf["db::getTableColumnDetailInfo"]["dbAddress"]=$conf["dbAddress"];#資料庫的網路位置
3940
		$conf["db::getTableColumnDetailInfo"]["dbAccount"]=$conf["dbAccount"];#連線到資料庫要用的帳號
3941
		$conf["db::getTableColumnDetailInfo"]["selectedDataBase"]=$conf["selectedDataBaseName"];#連線到資料庫要選擇的資料庫
3942
		$conf["db::getTableColumnDetailInfo"]["selectedDataTable"]=$conf["selectedDataTableName"];#連線到資料庫要檢視的資料表
3943
		#可省略參數:
3944
 
3945
		#如果 $conf["dbPassword"] 有設定
3946
		if(isset($conf["dbPassword"])){
3947
 
3948
			#設定其密碼
3949
			$conf["db::getTableColumnDetailInfo"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
3950
 
3951
			}#if end
3952
 
3953
		#如果有設定 $conf["dbPort"]	
3954
		if(isset($conf["dbPort"])){
3955
 
3956
			#設定 $conf["dbPort"]
3957
			$conf["db::getTableColumnDetailInfo"]["dbPort"]=$conf["dbPort"];
3958
 
3959
			}#if end
3960
 
3961
		#備註:
3962
		#如果forign key參照的是別的資料庫,將無法取得參照的資料庫名稱?
3963
		$getTableColumnDetailInfo=db::getTableColumnDetailInfo($conf["db::getTableColumnDetailInfo"]);
3964
		unset($conf["db::getTableColumnDetailInfo"]);	
3965
 
3966
		#如果取得資料表資訊失敗
3967
		if($getTableColumnDetailInfo["status"]=="false"){
3968
 
3969
			#設置錯誤訊息
3970
			$result["status"]="false";
3971
 
3972
			#設置錯誤提示
3973
			$result["error"]=$getTableColumnDetailInfo;
3974
 
3975
			#回傳結果
3976
			return $result;
3977
 
3978
			}#if end	
3979
 
3980
		#如果該欄位已經是index了
3981
		if(isset($getTableColumnDetailInfo["key"][$conf["indexedColumnName"]])){
3982
 
3983
			#設置執行正常
3984
			$result["status"]="true";
3985
 
3986
			#設置警告提示
3987
			$result["warning"][]="已經是index key了";
3988
 
3989
			#回傳結果
3990
			return $result;
3991
 
3992
			}#if end
3993
 
3994
		#組合sql語言
3995
		$sql="alter table ".$conf["selectedDataBaseName"].".".$conf["selectedDataTableName"]." add index(`".$conf["indexedColumnName"]."`)";
3996
 
3997
		#執行sql語法
3998
		#函式說明:
3999
		#執行mysql指令
4000
		#回傳結果::
4001
		#$result["status"],"true"為執行成功;"false"為執行失敗。
4002
		#$result["error"],錯誤訊息的陣列
4003
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
4004
		#$result["queryString"],mysql查詢的語言
4005
		#查詢號的解果,需要解析。
4006
		#必填參數:
4007
		$conf["db"]["execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
4008
		$conf["db"]["execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
4009
		$conf["db"]["execMysqlQuery"]["dbSql"]=$sql;#要執行sql語法
4010
		#可省略參數:
4011
 
4012
		#如果 $conf["dbPassword"] 有設定
4013
		if(isset($conf["dbPassword"])){
4014
 
4015
			#設定其密碼
4016
			$conf["db"]["execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
4017
 
4018
			}#if end
4019
 
4020
		#如果有設定 $conf["dbPort"]	
4021
		if(isset($conf["dbPort"])){
4022
 
4023
			#設定 $conf["dbPort"]
4024
			$conf["db"]["execMysqlQuery"]["dbPort"]=$conf["dbPort"];
4025
 
4026
			}#if end
4027
 
4028
		$queryResult=db::execMysqlQuery($conf["db"]["execMysqlQuery"]);
4029
		unset($conf["db"]["execMysqlQuery"]);
4030
 
4031
		#取得執行的sql語法
4032
		$result["sql"]=$queryResult["queryString"];
4033
 
4034
		#如果有錯誤
4035
		if($queryResult["status"]=="false"){
4036
 
4037
			#設置錯誤訊息
4038
			$result["status"]="false";
4039
 
4040
			#設置錯誤提示
4041
			$result["error"]=$queryResult;
4042
 
4043
			#回傳結果
4044
			return $result;
4045
 
4046
			}#if end
4047
 
4048
		#執行到這邊代表執行成功
4049
 
4050
		#設置成功訊息
4051
		$result["status"]="true";
4052
 
4053
		#回傳結果
4054
		return $result;
4055
 
4056
		}#function setColumnIndex end
4057
 
4058
	/*
4059
	#函式說明:
4060
	#取得資料表所有欄位的詳細資訊
4061
	#回傳的內容:
4062
	#$result["status"],執行結果,"true"代表執行成功;"false"代表執行失敗
4063
	#$result["error"],錯誤訊息陣列
4064
	#$result["function"],當前執行的函數名稱.
4065
	#$result["sql"],執行的sql語法
4066
	#$result["oriInput"],原始的資料表欄位資訊
4067
	#$result["everyLine"],逐行的欄位資訊
4068
	#$result["tableName"],當前查詢的資料表名稱
4069
	#$result["engine"],資料表使用的儲存引擎
4070
	#$result["charset"],資料表預設的編碼
4071
	#$result["columnName"][$i],各欄位的名稱陣列,$i爲1開始的數字,也可以使用欄位的名稱。
4072
	#$result["columnVarTypeAndLengthLimit"][$i],各欄位儲存的變數形態與長度限制,$i爲1開始的數字,也可以使用欄位的名稱。
4073
	#$result["columnVarType"][$i],各欄位變數儲存的型態,$i爲1開始的數字,也可以使用欄位的名稱.
4074
	#$result["columnVarLengthLimit"][$i],個欄位變數的長度限制,若不存在其限制,則為"",$i爲1開始的數字,也可以使用欄位的名稱.
4075
	#$result["columnNotNull"][$i],各欄位是否不可爲null,"true"爲不可以爲null;"false"爲可爲"null",$i爲1開始的數字,也可以使用欄位的名稱。
4076
	#$result["columnAutoIncrement"][$i],各欄位是否會自動加1,"true"爲會;"false"爲不會,$i爲1開始的數字,也可以使用欄位的名稱。
4077
	#$result["columnDefault"][$i],各欄位的預設內容,若無則爲"沒有指定",$i爲1開始的數字,也可以使用欄位的名稱。
4078
	#$result["columnOnUpdateAction"][$i],當資料有修改時,該欄位的內容要怎麼因應,$i爲1開始的數字,也可以使用欄位的名稱。
4079
	#$result["columnCharacterSet"][$i],各欄位使用的CharacterSet,$i爲1開始的數字,也可以使用欄位的名稱。
4080
	#$result["columnCollate"][$i],各欄位使用的Collate,$i爲1開始的數字,也可以使用欄位的名稱。
4081
	#$result["columnComment"][$i],各欄位的註解,$i爲1開始的數字,也可以使用欄位的名稱。
4082
	#$result["key"]["exist"],該資料表是否有索引鍵,"true"代表有;"false"代表沒有。
4083
	#$result["key"][$j],該資料表的索引鍵陣列,$j爲0開始的數字,也可以使用欄位的名稱。
4084
	#$result["keyConstraintName"][$j],該資料表用於識別索引鍵的CONSTRAINT名稱陣列,$j爲1開始的數字,也可以使用欄位的名稱。
4085
	#$result["primaryKey"],該資料表的主鍵
4086
	#$result["foreignKey"]["exist"],該資料表是否有foreign key,"true"代表有;"fasle"代表沒有。
4087
	#$result["foreignKey"]["constraintName"][$k],用來識別外鍵的CONSTRAINT名稱陣列,$k爲1開始的數字,也可以使用欄位的名稱。
4088
	#$result["foreignKey"]["columnName"][$k],外鍵的名稱陣列,$k爲1開始的數字,也可以使用欄位的名稱。
4089
	#$result["foreignKey"]["referencesTable"][$k],外鍵參照的欄位,$k爲1開始的數字,,也可用欄位的名稱來找value.
4090
	#$result["foreignKey"]["referencesColumn"][$k],外鍵參照的欄位屬於哪個資料表,$k爲1開始的數字,也可用欄位的名稱來找value.
4091
	#$result["foreignKey"]["onUpdateAction"][$i],當參照的欄位資料更新時,會怎麼同步,$i爲1開始的數字,也可用欄位的名稱來找value.
4092
	#$result["foreignKey"]["onDeleteAction"][$i],當參照的欄位資料移除時,會怎麼同步,$i爲1開始的數字,也可用欄位的名稱來找value.
4093
	#必填參數:
4094
	#$conf["dbAddress"],字串,資料庫的網路位置
4095
	$conf["dbAddress"]="";
4096
	#$conf["dbAccount"],字串,連線到資料庫要用的帳號
4097
	$conf["dbAccount"]="";連線到資料庫要用的帳號
4098
	#$conf["selectedDataBase"]字串,連線到資料庫要選擇的資料庫
4099
	$conf["selectedDataBase"]=$dbName;
4100
	#$conf["selectedDataTable"],字串,連線到資料庫要檢視的資料表
4101
	$conf["selectedDataTable"]="";
4102
	#可省略參數:
4103
	#$conf["dbPassword"],字串,連線到資料庫要用的密碼
4104
	#$conf["dbPassword"]=$dbPassword;
4105
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,預設為3306.
4106
	#$conf["dbPort"]="3306";
4107
	#參考資料:
4108
	#無.
4109
	#備註:
4110
	#如果forign key參照的是別的資料庫,將無法取得參照的資料庫名稱?
4111
	*/
4112
	public static function getTableColumnDetailInfo(&$conf){
4113
 
4114
		#初始化要回傳的內容
4115
		$result=array();
4116
 
4117
		#取得當前執行的函數名稱
4118
		$result["function"]=__FUNCTION__;
4119
 
4120
		#如果 $conf 不為陣列
4121
		if(gettype($conf)!="array"){
4122
 
4123
			#設置執行失敗
4124
			$result["status"]="false";
4125
 
4126
			#設置執行錯誤訊息
4127
			$result["error"][]="\$conf變數須為陣列形態";
4128
 
4129
			#如果傳入的參數為 null
4130
			if($conf==null){
4131
 
4132
				#設置執行錯誤訊息
4133
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
4134
 
4135
				}#if end
4136
 
4137
			#回傳結果
4138
			return $result;
4139
 
4140
			}#if end
4141
 
4142
		#檢查參數設定是否正確
4143
		#函式說明:
4144
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
4145
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4146
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
4147
		#$result["function"],當前執行的函式名稱.
4148
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
4149
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
4150
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
4151
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
4152
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
4153
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
4154
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
4155
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
4156
		#必填參數:
4157
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
4158
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
4159
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
4160
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("dbAddress","dbAccount","selectedDataBase","selectedDataTable");
4161
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
4162
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string","string");
4163
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
4164
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
4165
		#可省略參數:
4166
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
4167
		#$conf["canBeEmptyString"]="false";
4168
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或集合.
4169
		#$conf["skipableVariableCanNotBeEmpty"]=array();
4170
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
4171
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("dbPassword","dbPort");
4172
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
4173
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
4174
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
4175
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null);
4176
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
4177
		#$conf["arrayCountEqualCheck"][]=array();
4178
		#參考資料:
4179
		#array_keys=>http://php.net/manual/en/function.array-keys.php
4180
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
4181
		unset($conf["variableCheck::checkArguments"]);
4182
 
4183
		#如果檢查失敗
4184
		if($checkArguments["passed"]=="false"){
4185
 
4186
			#設置執行失敗識別
4187
			$result["status"]="false";
4188
 
4189
			#設置錯誤訊息陣列
4190
			$result["error"]=$checkArguments;
4191
 
4192
			#回傳結果
4193
			return $result;
4194
 
4195
			}#if end
4196
 
4197
		#如果檢查不通過
4198
		if($checkArguments["passed"]=="false"){
4199
 
4200
			#設置執行失敗識別
4201
			$result["status"]="false";
4202
 
4203
			#設置錯誤訊息陣列
4204
			$result["error"]=$checkArguments;
4205
 
4206
			#回傳結果
4207
			return $result;
4208
 
4209
			}#if end
4210
 
4211
		#設置要執行的sql語法
4212
		$sql="SHOW CREATE TABLE ".$conf["selectedDataBase"].".".$conf["selectedDataTable"].";";
4213
 
4214
		#執行sql語法
4215
		#函式說明:
4216
		#執行mysql指令
4217
		#回傳結果::
4218
		#$result["status"],"true"為執行成功;"false"為執行失敗。
4219
		#$result["error"],錯誤訊息的陣列
4220
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
4221
		#$result["queryString"],mysql查詢的語言
4222
		#查詢號的解果,需要解析。
4223
		#必填參數:
4224
		$conf["db"]["execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
4225
		$conf["db"]["execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
4226
		$conf["db"]["execMysqlQuery"]["dbSql"]=$sql;#要執行sql語法
4227
		#可省略參數:
4228
 
4229
		#如果 $conf["dbPassword"] 有設定
4230
		if(isset($conf["dbPassword"])){
4231
 
4232
			#設定其密碼
4233
			$conf["db"]["execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
4234
 
4235
			}#if end
4236
 
4237
		#如果有設定 $conf["dbPort"]	
4238
		if(isset($conf["dbPort"])){
4239
 
4240
			#設定 $conf["dbPort"]
4241
			$conf["db"]["execMysqlQuery"]["dbPort"]=$conf["dbPort"];
4242
 
4243
			}#if end			
4244
 
4245
		$queryResult=db::execMysqlQuery($conf["db"]["execMysqlQuery"]);
4246
		unset($conf["db"]["execMysqlQuery"]);
4247
 
4248
		#如果有錯誤
4249
		if($queryResult["status"]=="false"){
4250
 
4251
			#設置錯誤訊息
4252
			$result["status"]="false";
4253
 
4254
			#設置錯誤提示
4255
			$result["error"]=$queryResult;
4256
 
4257
			#回傳結果
4258
			return $result;
4259
 
4260
			}#if end
4261
 
4262
		#解析mysql resource
4263
 
4264
		#初始化暫存的變數
4265
		$temp="";
4266
 
4267
		#將讀取到的資料一次只讀取一列
4268
		while($row = mysqli_fetch_array($queryResult["queryResource"])){
4269
 
4270
			#$i筆項列資料,則運行$i次。
4271
			foreach($row as $key=>$value){		
4272
 
4273
				#如果key爲"Create Table"
4274
				if($key=="Create Table"){
4275
 
4276
					#將解析的資料內容結果放進$temp變數裏面
4277
					$temp=$value;	
4278
 
4279
					}#if end
4280
 
4281
				}#foreach end
4282
 
4283
			}#while end
4284
 
4285
		#逐行解析$temp
4286
		#函式說明:
4287
		#將多行內容的字串,依行切割
4288
		#回傳的參數:
4289
		#$result["status"],執行成功與否,若爲"true",代表執行成功,若爲"false"代表執失敗。
4290
		#$result["error"],錯誤訊息陣列.
4291
		#$result["function"],當前執行的函數名稱.#$result["oriStr"],要分割的原始字串內容
4292
		#$result["oriStr"],要分割的原始字串內容
4293
		#$result["dataArray"],爲以行分割好的字串陣列內容,$result["dataArray"][$i]爲第($i+1)行的內容。
4294
		#$result["dataCounts"],爲總共分成幾行
4295
		#必填參數:
4296
		$conf["stringProcess"]["spiltMutiLineString"]["stringIn"]=$temp;#要處理的多行文字字串。
4297
		#參考資料來源:
4298
		#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 換行字元
4299
		$everyLine=stringProcess::spiltMutiLineString($conf["stringProcess"]["spiltMutiLineString"]);
4300
		unset($conf["stringProcess"]["spiltMutiLineString"]);
4301
 
4302
		#如果 逐行解析$temp 失敗
4303
		if($everyLine["status"]==="false"){
4304
 
4305
			#設置錯誤訊息
4306
			$result["status"]="false";
4307
 
4308
			#設置錯誤提示
4309
			$result["error"]=$everyLine;
4310
 
4311
			#回傳結果
4312
			return $result;
4313
 
4314
			}#if end
4315
 
4316
		#針對每列內容
4317
		foreach($everyLine["dataArray"] as $no => $line){
4318
 
4319
			#函式說明:
4320
			#取得符合特定字首與字尾的字串
4321
			#回傳結果::
4322
			#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
4323
			#$result["function"],當前執行的函數名稱.
4324
			#$result["error"],錯誤訊息陣列.
4325
			#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
4326
			#$result["returnString"],爲符合字首條件的字串內容。
4327
			#$result["argu"],使用的參數.
4328
			#必填參數:
4329
			#$conf["checkString"],字串,要檢查的字串.
4330
			$conf["search::getMeetConditionsString"]["checkString"]=$line;
4331
			#可省略參數:
4332
			#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
4333
			$conf["search::getMeetConditionsString"]["frontWord"]="/*";
4334
			#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
4335
			#$conf["tailWord"]="";
4336
			#參考資料:
4337
			#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
4338
			$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
4339
			unset($conf["search::getMeetConditionsString"]);			
4340
 
4341
			#如果執行失敗
4342
			if($getMeetConditionsString["status"]==="false"){
4343
 
4344
				#設置錯誤訊息
4345
				$result["status"]="false";
4346
 
4347
				#設置錯誤提示
4348
				$result["error"]=$getMeetConditionsString;
4349
 
4350
				#回傳結果
4351
				return $result;
4352
 
4353
				}#if end
4354
 
4355
			#如果執行失敗
4356
			if($getMeetConditionsString["founded"]==="true"){
4357
 
4358
				#while loop
4359
				while(true){
4360
 
4361
					#移除 partion 描述 - start 
4362
 
4363
					#如果存在該列
4364
					if(isset($everyLine["dataArray"][$no])){
4365
 
4366
						#卸除之
4367
						unset($everyLine["dataArray"][$no]);
4368
 
4369
						#行數加1
4370
						$no++;
4371
 
4372
						}#if end
4373
 
4374
					#移除 partion 描述 - end
4375
 
4376
					#反之
4377
					else{
4378
 
4379
						//end while
4380
						break;
4381
 
4382
						}#else end						
4383
 
4384
					}#while loop end
4385
 
4386
				#end foreach
4387
				break;
4388
 
4389
				}#if end
4390
 
4391
			}#foreach end
4392
 
4393
		#重新更新總行數
4394
		$everyLine["dataCounts"]=count($everyLine["dataArray"]);
4395
 
4396
		#取得原始輸入的多行字串
4397
		$result["oriInput"]=$everyLine["oriStr"];
4398
 
4399
		#取得原始的每一行
4400
		$result["everyLine"]=$everyLine["dataArray"];
4401
 
4402
		#取得資料表名稱
4403
		#函式說明:
4404
		#將固定格式的字串分開,並回傳分開的結果。
4405
		#回傳的參數:
4406
		#$result["oriStr"],要分割的原始字串內容
4407
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
4408
		#$result["dataCounts"],爲總共分成幾段
4409
		#必填參數:
4410
		$conf["stringProcess"]["spiltString"]["stringIn"]=$everyLine["dataArray"][0];#要處理的字串。
4411
		$conf["stringProcess"]["spiltString"]["spiltSymbol"]="`";#爲以哪個符號作爲分割
4412
		$tableName=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
4413
		unset($conf["stringProcess"]["spiltString"]);
4414
 
4415
		#如果 取得資料表名稱 失敗
4416
		if($tableName["status"]=="false"){
4417
 
4418
			#設置錯誤訊息
4419
			$result["status"]="false";
4420
 
4421
			#設置錯誤提示
4422
			$result["error"]=$tableName;
4423
 
4424
			#回傳結果
4425
			return $result;
4426
 
4427
			}#if end
4428
 
4429
		#取得資料表名稱
4430
		$result["tableName"]=$tableName["dataArray"][1];
4431
 
4432
		#取得資料表用的 ENGINE 與 DEFAULT CHARSET",亦即最後一行的內容.
4433
		#函式說明:
4434
		#將固定格式的字串分開,並回傳分開的結果。
4435
		#回傳的參數:
4436
		#$result["oriStr"],要分割的原始字串內容
4437
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
4438
		#$result["dataCounts"],爲總共分成幾段
4439
		#必填參數:
4440
		$conf["stringProcess"]["spiltString"]["stringIn"]=$everyLine["dataArray"][$everyLine["dataCounts"]-1];#要處理的字串。
4441
		$conf["stringProcess"]["spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
4442
		$engineAndCharset=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
4443
		unset($conf["stringProcess"]["spiltString"]);
4444
 
4445
		#如果 取得資料表用的 ENGINE與DEFAULT CHARSET" 失敗
4446
		if($engineAndCharset["status"]=="false"){
4447
 
4448
			#設置錯誤訊息
4449
			$result["status"]="false";
4450
 
4451
			#設置錯誤提示
4452
			$result["error"]=$engineAndCharset;
4453
 
4454
			#回傳結果
4455
			return $result;
4456
 
4457
			}#if end
4458
 
4459
		#get engine string
4460
		$engine=$engineAndCharset["dataArray"][1];
4461
 
4462
		#函式說明:
4463
		#將固定格式的字串分開,並回傳分開的結果。
4464
		#回傳的參數:
4465
		#$result["oriStr"],要分割的原始字串內容
4466
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
4467
		#$result["dataCounts"],爲總共分成幾段
4468
		#必填參數:
4469
		$conf["stringProcess"]["spiltString"]["stringIn"]=$engine;#要處理的字串。
4470
		$conf["stringProcess"]["spiltString"]["spiltSymbol"]="=";#爲以哪個符號作爲分割
4471
		$engine=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
4472
		unset($conf["stringProcess"]["spiltString"]);
4473
 
4474
		#如果 取得資料表用的 ENGINE與DEFAULT CHARSET" 失敗
4475
		if($engine["status"]=="false"){
4476
 
4477
			#設置錯誤訊息
4478
			$result["status"]="false";
4479
 
4480
			#設置錯誤提示
4481
			$result["error"]=$engine;
4482
 
4483
			#回傳結果
4484
			return $result;
4485
 
4486
			}#if end
4487
 
4488
		#如果不存在 engine
4489
		if(!isset($engine["dataArray"][1])){
4490
 
4491
			#設置錯誤訊息
4492
			$result["status"]="false";
4493
 
4494
			#設置錯誤提示
4495
			$result["error"]=$engine;
4496
 
4497
			return $result;
4498
 
4499
			}#if end
4500
 
4501
		#get engine
4502
		$result["engine"]=$engine["dataArray"][1];
4503
 
4504
		#取得字元編碼
4505
		#函式說明:
4506
		#將固定格式的字串分開,並回傳分開的結果。
4507
		#回傳的參數:
4508
		#$result["oriStr"],要分割的原始字串內容
4509
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
4510
		#$result["dataCounts"],爲總共分成幾段
4511
		#必填參數:
4512
		$conf["stringProcess"]["spiltString"]["stringIn"]=$engineAndCharset["oriStr"];#要處理的字串。
4513
		$conf["stringProcess"]["spiltString"]["spiltSymbol"]="CHARSET=";#爲以哪個符號作爲分割
4514
		$charset=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
4515
		unset($conf["stringProcess"]["spiltString"]);
4516
 
4517
		#如果 取得字元編碼 失敗
4518
		if($charset["status"]=="false"){
4519
 
4520
			#設置錯誤訊息
4521
			$result["status"]="false";
4522
 
4523
			#設置錯誤提示
4524
			$result["error"]=$charset;
4525
 
4526
			#回傳結果
4527
			return $result;
4528
 
4529
			}#if end
4530
 
4531
		#取得字元編碼
4532
		#函式說明:
4533
		#將固定格式的字串分開,並回傳分開的結果。
4534
		#回傳的參數:
4535
		#$result["oriStr"],要分割的原始字串內容
4536
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
4537
		#$result["dataCounts"],爲總共分成幾段
4538
		#必填參數:
4539
		$conf["stringProcess"]["spiltString"]["stringIn"]=$charset["dataArray"][1];#要處理的字串。
4540
		$conf["stringProcess"]["spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
4541
		$charset=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
4542
		unset($conf["stringProcess"]["spiltString"]);
4543
 
4544
		#如果 取得字元編碼 失敗
4545
		if($charset["status"]=="false"){
4546
 
4547
			#設置錯誤訊息
4548
			$result["status"]="false";
4549
 
4550
			#設置錯誤提示
4551
			$result["error"]=$charset;
4552
 
4553
			#回傳結果
4554
			return $result;
4555
 
4556
			}#if end
4557
 
4558
		#取得字元編碼
4559
		$result["charset"]=$charset["dataArray"][0];
4560
 
4561
		#初始化,儲存鍵值定義的陣列變數
4562
		$keyDefine=array();
4563
 
4564
		#逐行取得各欄位詳細資料
4565
		for($i=1;$i<$everyLine["dataCounts"]-1;$i++){
4566
 
4567
			#檢查開頭是否爲 "  `"
4568
 			#函式說明:
4569
			#取得符合特定字首與字尾的字串
4570
			#回傳結果::
4571
			#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
4572
			#$result["function"],當前執行的函數名稱.
4573
			#$result["error"],錯誤訊息陣列.
4574
			#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
4575
			#$result["returnString"],爲符合字首條件的字串內容。
4576
			#必填參數:
4577
			#$conf["checkString"],字串,要檢查的字串.
4578
			$conf["search::getMeetConditionsString"]["checkString"]=$everyLine["dataArray"][$i];
4579
			#可省略參數:
4580
			#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
4581
			$conf["search::getMeetConditionsString"]["frontWord"]="  `";
4582
			#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
4583
			#$conf["tailWord"]="";
4584
			#參考資料:
4585
			#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
4586
			$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
4587
			unset($conf["search::getMeetConditionsString"]);
4588
 
4589
			#如果分割失敗
4590
			if($getMeetConditionsString["status"]==="false"){
4591
 
4592
				#設置錯誤訊息
4593
				$result["status"]="false";
4594
 
4595
				#設置錯誤提示
4596
				$result["error"]=$getMeetConditionsString;
4597
 
4598
				#回傳結果
4599
				return $result;
4600
 
4601
				}#if end
4602
 
4603
			#如果有符合的前戳
4604
			if($getMeetConditionsString["founded"]==="true"){
4605
 
4606
				#函式說明:
4607
				#將固定格式的字串分開,並回傳分開的結果。
4608
				#回傳的參數:
4609
				#$result["oriStr"],要分割的原始字串內容
4610
				#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
4611
				#$result["dataCounts"],爲總共分成幾段
4612
				#必填參數:
4613
				$conf["stringProcess"]["spiltString"]["stringIn"]=$everyLine["dataArray"][$i];#要處理的字串。
4614
				$conf["stringProcess"]["spiltString"]["spiltSymbol"]="`";#爲以哪個符號作爲分割
4615
				$columnString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
4616
				unset($conf["stringProcess"]["spiltString"]);
4617
 
4618
				#如果 分割字串失敗 失敗
4619
				if($columnString["status"]==="false"){
4620
 
4621
					#設置錯誤訊息
4622
					$result["status"]="false";
4623
 
4624
					#設置錯誤提示
4625
					$result["error"]=$columnString;
4626
 
4627
					#回傳結果
4628
					return $result;
4629
 
4630
					}#if end
4631
 
4632
				#取得欄位名稱
4633
				$result["columnName"][$i]=$columnString["dataArray"][1];
4634
				$result["columnName"][$result["columnName"][$i]]=$result["columnName"][$i];
4635
 
4636
				#函式說明:
4637
				#將固定格式的字串分開,並回傳分開的結果。
4638
				#回傳的參數:
4639
				#$result["oriStr"],要分割的原始字串內容
4640
				#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
4641
				#$result["dataCounts"],爲總共分成幾段
4642
				#必填參數:
4643
				$conf["stringProcess"]["spiltString"]["stringIn"]=$columnString["dataArray"][2];#要處理的字串。
4644
				$conf["stringProcess"]["spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
4645
				$columnString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
4646
				unset($conf["stringProcess"]["spiltString"]);
4647
 
4648
				#debug
4649
				#var_dump($columnString);
4650
 
4651
				#如果 分割字串失敗 失敗
4652
				if($columnString["status"]==="false"){
4653
 
4654
					#設置錯誤訊息
4655
					$result["status"]="false";
4656
 
4657
					#設置錯誤提示
4658
					$result["error"]=$columnString;
4659
 
4660
					#回傳結果
4661
					return $result;
4662
 
4663
					}#if end
4664
 
4665
				#取得欄位屬性與長度
4666
				$result["columnVarTypeAndLengthLimit"][$i]=$columnString["dataArray"][0];
4667
				$result["columnVarTypeAndLengthLimit"][$result["columnName"][$i]]=$columnString["dataArray"][0];
4668
 
4669
				}#if end
4670
 
4671
			#函式說明:
4672
			#將固定格式的字串分開,並回傳分開的結果。
4673
			#回傳的參數:
4674
			#$result["oriStr"],要分割的原始字串內容
4675
			#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
4676
			#$result["dataCounts"],爲總共分成幾段
4677
			#必填參數:
4678
			$conf["stringProcess"]["spiltString"]["stringIn"]=$everyLine["dataArray"][$i];#要處理的字串。
4679
			$conf["stringProcess"]["spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
4680
			$columnString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
4681
			unset($conf["stringProcess"]["spiltString"]);	
4682
 
4683
			#如果 分割字串失敗 失敗
4684
			if($columnString["status"]=="false"){
4685
 
4686
				#設置錯誤訊息
4687
				$result["status"]="false";
4688
 
4689
				#設置錯誤提示
4690
				$result["error"]=$columnString;
4691
 
4692
				#回傳結果
4693
				return $result;
4694
 
4695
				}#if end
4696
 
4697
			#如果分割字串失敗
4698
			if($columnString["status"]==="false"){
4699
 
4700
				#設置執行失敗
4701
				$reuslt["status"]="false";
4702
 
4703
				#設置錯誤訊息
4704
				$result["error"]=$columnString;
4705
 
4706
				#回傳結果
4707
				return $result;
4708
 
4709
				}#if end
4710
 
4711
			#debug
4712
			#var_dump($columnString);
4713
 
4714
			#判斷該 $columnString["dataArray"][2]是一般名稱,還是鍵值定義。
4715
			#函式說明:
4716
			#檢查字串裡面有無指定的關鍵字
4717
			#回傳結果::
4718
			#$result["status"],"true"代表執行成功,"false"代表執行失敗。
4719
			#$result["error"],錯誤訊息
4720
			#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
4721
			#必填參數:
4722
			$conf["search"]["findKeyWord"]["keyWord"]="`";#想要搜尋的關鍵字
4723
			$conf["search"]["findKeyWord"]["string"]=$columnString["dataArray"][2];#要被搜尋的字串內容
4724
			#可省略參數:
4725
			#$conf["search"]["findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
4726
			$searchResult=search::findKeyWord($conf["search"]["findKeyWord"]);
4727
			unset($conf["search"]["findKeyWord"]);
4728
 
4729
			#如果尋找失敗
4730
			if($searchResult["status"]==="false"){
4731
 
4732
				#設置執行失敗
4733
				$reuslt["status"]="false";
4734
 
4735
				#設置錯誤訊息
4736
				$result["error"]=$columnString;
4737
 
4738
				#回傳結果
4739
				return $result;
4740
 
4741
				}#if end
4742
 
4743
			#如果有找到,且沒有長度與形態資訊
4744
			if($searchResult["founded"]==="true" && !isset($result["columnVarTypeAndLengthLimit"][$i]) ){
4745
 
4746
				#代表是屬於鍵值的定義
4747
				$keyDefine[]=$everyLine["dataArray"][$i];
4748
 
4749
				#var_dump($keyDefine);
4750
 
4751
				#跳過該行內容
4752
				continue;
4753
 
4754
				}#if end
4755
 
4756
			#判斷該 $columnString["dataArray"][0]是否為 "CONSTRAINT" 或 "KEY"
4757
			if($columnString["dataArray"][0]==="CONSTRAINT" || $columnString["dataArray"][0]==="KEY"){
4758
 
4759
				#代表是屬於定義 外鍵 的 CONSTRAINT 定義
4760
				$keyDefine[]=$everyLine["dataArray"][$i];
4761
 
4762
				#跳過該行內容
4763
				continue;
4764
 
4765
				}#if end
4766
 
4767
			#函式說明:
4768
			#處理字串避免網頁出錯
4769
			#回傳結果::
4770
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4771
			#$result["function"],當前執行的函數.
4772
			#$result["content"],爲處理好的字串.
4773
			#$result["error"],錯誤訊息陣列.
4774
			#必填參數:
4775
			$conf["stringProcess"]["correctCharacter"]["stringIn"]=$columnString["dataArray"][0];#爲要處理的字串
4776
			#可省略參數:
4777
			$conf["stringProcess"]["correctCharacter"]["selectedCharacter"]=array("`");#爲被選擇要處理的字串/字元,須爲陣列值。
4778
			#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
4779
			#$conf["stringProcess"]["correctCharacter"]["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
4780
			$correctCharacterResult=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);
4781
			unset($conf["stringProcess"]);
4782
 
4783
			#如果處理字串失敗
4784
			if($correctCharacterResult["status"]==="false"){
4785
 
4786
				#設置執行失敗
4787
				$reuslt["status"]="false";
4788
 
4789
				#設置錯誤訊息
4790
				$result["error"]=$correctCharacterResult;
4791
 
4792
				#回傳結果
4793
				return $result;
4794
 
4795
				}#if end
4796
 
4797
			#如果不是 "CONSTRAINT" 且 存在 $result["columnVarTypeAndLengthLimit"][$i]
4798
			if($correctCharacterResult["content"]!=="CONSTRAINT" && isset($result["columnVarTypeAndLengthLimit"][$i])){
4799
 
4800
				#取得欄位名稱,遇到有空格的欄位名稱會出錯
4801
				#$result["columnName"][$i]=$correctCharacterResult["content"];
4802
				#$result["columnName"][$correctCharacterResult["content"]]=$correctCharacterResult["content"];
4803
 
4804
				#取得欄位變數形態與長度限制,遇到有空格的欄位名稱會出錯
4805
				#$result["columnVarTypeAndLengthLimit"][$i]=$columnString["dataArray"][1];
4806
				#$result["columnVarTypeAndLengthLimit"][$result["columnName"][$i]]=$columnString["dataArray"][1];
4807
 
4808
				#檢查是否有欄位的長度限制關鍵字 "(" ")"
4809
				#函式說明:
4810
				#檢查一個字串裡面是否有多個關鍵字
4811
				#回傳結果::
4812
				#$result["status"],"true"代表執行成功,"false"代表執行失敗。
4813
				#$result["error"],錯誤訊息
4814
				#$result["founded"],是否找到所有的關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
4815
				#必填參數:
4816
				$conf["search"]["findManyKeyWords"]["keyWords"]=array("(",")");#想要搜尋的關鍵字
4817
				$conf["search"]["findManyKeyWords"]["string"]=$result["columnVarTypeAndLengthLimit"][$i];#要被搜尋的字串內容
4818
				#可省略參數:
4819
				#$conf["search"]["findManyKeyWords"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
4820
				$lengthLimitKeyWordSearchResult=search::findManyKeyWords($conf["search"]["findManyKeyWords"]);
4821
				unset($conf["search"]["findManyKeyWords"]);
4822
 
4823
				#如果  檢查是否有欄位的長度限制關鍵字 "(" ")" 失敗
4824
				if($lengthLimitKeyWordSearchResult["status"]==="false"){
4825
 
4826
					#設置執行失敗
4827
					$reuslt["status"]="false";
4828
 
4829
					#設置錯誤訊息
4830
					$result["error"]=$lengthLimitKeyWordSearchResult;
4831
 
4832
					#回傳結果
4833
					return $result;
4834
 
4835
					}#if end
4836
 
4837
				#如果 $lengthLimitKeyWordSearchResult["founded"] 等於 "true"
4838
				if($lengthLimitKeyWordSearchResult["foundedAll"]==="true"){
4839
 
4840
					#代表有長度限制的字串
4841
 
4842
					#以"("為關鍵字進行分割
4843
					#函式說明:
4844
					#將固定格式的字串分開,並回傳分開的結果。
4845
					#回傳的參數:
4846
					#$result["oriStr"],要分割的原始字串內容
4847
					#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
4848
					#$result["dataCounts"],爲總共分成幾段
4849
					#必填參數:
4850
					$conf["stringProcess"]["spiltString"]["stringIn"]=$result["columnVarTypeAndLengthLimit"][$i];#要處理的字串。
4851
					$conf["stringProcess"]["spiltString"]["spiltSymbol"]="(";#爲以哪個符號作爲分割
4852
					$columnTypeAndLengthLimitSpiledStr=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
4853
					unset($conf["stringProcess"]["spiltString"]);
4854
 
4855
					#如果分割字串失敗
4856
					if($columnTypeAndLengthLimitSpiledStr["status"]==="false"){
4857
 
4858
						#設置執行失敗
4859
						$reuslt["status"]="false";
4860
 
4861
						#設置錯誤訊息
4862
						$result["error"]=$columnTypeAndLengthLimitSpiledStr;
4863
 
4864
						#回傳結果
4865
						return $result;
4866
 
4867
						}#if end
4868
 
4869
					#取得欄位變數型別
4870
					$result["columnVarType"][$i]=$columnTypeAndLengthLimitSpiledStr["dataArray"][0];
4871
					$result["columnVarType"][$result["columnName"][$i]]=$columnTypeAndLengthLimitSpiledStr["dataArray"][0];
4872
 
4873
					#以")"為關鍵字進行分割
4874
					#函式說明:
4875
					#將固定格式的字串分開,並回傳分開的結果。
4876
					#回傳的參數:
4877
					#$result["oriStr"],要分割的原始字串內容
4878
					#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
4879
					#$result["dataCounts"],爲總共分成幾段
4880
					#必填參數:
4881
					$conf["stringProcess"]["spiltString"]["stringIn"]=$columnTypeAndLengthLimitSpiledStr["dataArray"][1];#要處理的字串。
4882
					$conf["stringProcess"]["spiltString"]["spiltSymbol"]=")";#爲以哪個符號作爲分割
4883
					$columnTypeAndLengthLimitSpiledStr=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
4884
					unset($conf["stringProcess"]["spiltString"]);
4885
 
4886
					#如果分割字串失敗
4887
					if($columnTypeAndLengthLimitSpiledStr["status"]==="false"){
4888
 
4889
						#設置執行失敗
4890
						$reuslt["status"]="false";
4891
 
4892
						#設置錯誤訊息
4893
						$result["error"]=$columnTypeAndLengthLimitSpiledStr;
4894
 
4895
						#回傳結果
4896
						return $result;
4897
 
4898
						}#if end
4899
 
4900
					#取得欄位的長度限制
4901
					$result["columnVarLengthLimit"][$i]=$columnTypeAndLengthLimitSpiledStr["dataArray"][0];
4902
					$result["columnVarLengthLimit"][$result["columnName"][$i]]=$columnTypeAndLengthLimitSpiledStr["dataArray"][0];
4903
 
4904
					}#if end
4905
 
4906
				#反之代表沒有長度限制的字串
4907
				else{
4908
 
4909
					#取得欄位變數型別
4910
					$result["columnVarType"][$i]=$result["columnVarTypeAndLengthLimit"][$i];
4911
					$result["columnVarType"][$result["columnName"][$i]]=$result["columnVarTypeAndLengthLimit"][$i];
4912
 
4913
					#取得欄位變數長度限制
4914
					$result["columnVarLengthLimit"][$i]="";
4915
					$result["columnVarLengthLimit"][$result["columnName"][$i]]="";
4916
 
4917
					}#else
4918
 
4919
				#欄位是否不可為null
4920
				#函式說明:
4921
				#檢查字串裡面有無指定的關鍵字
4922
				#回傳結果::
4923
				#$result["status"],"true"代表執行成功,"false"代表執行失敗。
4924
				#$result["error"],錯誤訊息
4925
				#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
4926
				#必填參數:
4927
				$conf["search"]["findKeyWord"]["keyWord"]="NOT NULL";#想要搜尋的關鍵字
4928
				$conf["search"]["findKeyWord"]["string"]=$everyLine["dataArray"][$i];#要被搜尋的字串內容
4929
				#可省略參數:
4930
				#$conf["search"]["findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
4931
				$searchResult=search::findKeyWord($conf["search"]["findKeyWord"]);
4932
				unset($conf["search"]["findKeyWord"]);
4933
 
4934
				#如果取得 欄位是否不可為null 失敗
4935
				if($searchResult["status"]==="false"){
4936
 
4937
					#設置執行失敗
4938
					$reuslt["status"]="false";
4939
 
4940
					#設置錯誤訊息
4941
					$result["error"]=$searchResult;
4942
 
4943
					#回傳結果
4944
					return $result;
4945
 
4946
					}#if end
4947
 
4948
				#如果有找到 NOT NULL
4949
				if($searchResult["founded"]==="true"){
4950
 
4951
					$result["columnNotNull"][$i]="true";
4952
					$result["columnNotNull"][$result["columnName"][$i]]="true";
4953
 
4954
					}#if end
4955
 
4956
				#反之沒有找到 NOT NULL
4957
				else{
4958
 
4959
					$result["columnNotNull"][$i]="false";
4960
					$result["columnNotNull"][$result["columnName"][$i]]="false";
4961
 
4962
					}#else end
4963
 
4964
				#欄位是否會自動加1
4965
				#函式說明:
4966
				#檢查字串裡面有無指定的關鍵字
4967
				#回傳結果::
4968
				#$result["status"],"true"代表執行成功,"false"代表執行失敗。
4969
				#$result["error"],錯誤訊息
4970
				#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
4971
				#必填參數:
4972
				$conf["search"]["findKeyWord"]["keyWord"]="AUTO_INCREMENT";#想要搜尋的關鍵字
4973
				$conf["search"]["findKeyWord"]["string"]=$everyLine["dataArray"][$i];#要被搜尋的字串內容
4974
				#可省略參數:
4975
				#$conf["search"]["findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
4976
				$searchResult=search::findKeyWord($conf["search"]["findKeyWord"]);
4977
				unset($conf["search"]["findKeyWord"]);
4978
 
4979
				#如果取得 欄位是否會自動加1 失敗
4980
				if($searchResult["status"]==="false"){
4981
 
4982
					#設置執行失敗
4983
					$reuslt["status"]="false";
4984
 
4985
					#設置錯誤訊息
4986
					$result["error"]=$searchResult;
4987
 
4988
					#回傳結果
4989
					return $result;
4990
 
4991
					}#if end
4992
 
4993
				#如果有找到 AUTO_INCREMENT
4994
				if($searchResult["founded"]==="true"){
4995
 
4996
					$result["columnAutoIncrement"][$i]="true";
4997
					$result["columnAutoIncrement"][$result["columnName"][$i]]="true";
4998
 
4999
					}#if end
5000
 
5001
				#反之沒有 AUTO_INCREMENT
5002
				else{
5003
 
5004
					$result["columnAutoIncrement"][$i]="false";
5005
					$result["columnAutoIncrement"][$result["columnName"][$i]]="false";
5006
 
5007
					}#else end
5008
 
5009
				#欄位是否有預設內容
5010
 
5011
				#函式說明:
5012
				#檢查字串裡面有無指定的關鍵字
5013
				#回傳結果::
5014
				#$result["status"],"true"代表執行成功,"false"代表執行失敗。
5015
				#$result["error"],錯誤訊息
5016
				#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
5017
				#必填參數:
5018
				$conf["search"]["findKeyWord"]["keyWord"]="DEFAULT";#想要搜尋的關鍵字
5019
				$conf["search"]["findKeyWord"]["string"]=$everyLine["dataArray"][$i];#要被搜尋的字串內容
5020
				#可省略參數:
5021
				#$conf["search"]["findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
5022
				$searchResult=search::findKeyWord($conf["search"]["findKeyWord"]);
5023
				unset($conf["search"]["findKeyWord"]);
5024
 
5025
				#如果取得 欄位是否有預設內容 失敗
5026
				if($searchResult["status"]==="false"){
5027
 
5028
					#設置執行失敗
5029
					$reuslt["status"]="false";
5030
 
5031
					#設置錯誤訊息
5032
					$result["error"]=$searchResult;
5033
 
5034
					#回傳結果
5035
					return $result;
5036
 
5037
					}#if end
5038
 
5039
				#如果有找到 DEFAULT
5040
				if($searchResult["founded"]==="true"){
5041
 
5042
					#函式說明:
5043
					#將固定格式的字串分開,並回傳分開的結果。
5044
					#回傳的參數:
5045
					#$result["oriStr"],要分割的原始字串內容
5046
					#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
5047
					#$result["dataCounts"],爲總共分成幾段
5048
					#必填參數:
5049
					$conf["stringProcess"]["spiltString"]["stringIn"]=$everyLine["dataArray"][$i];#要處理的字串。
5050
					$conf["stringProcess"]["spiltString"]["spiltSymbol"]="DEFAULT ";#爲以哪個符號作爲分割
5051
					$defaultString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
5052
					unset($conf["stringProcess"]["spiltString"]);
5053
 
5054
					#如果分割字串失敗
5055
					if($defaultString["status"]=="false"){
5056
 
5057
						#設置執行失敗
5058
						$result["status"]="false";
5059
 
5060
						#設置執行錯誤訊息
5061
						$result["error"]=$defaultString;
5062
 
5063
						#回傳結果
5064
						return $result;
5065
 
5066
						}#if end
5067
 
5068
					#函式說明:
5069
					#將固定格式的字串分開,並回傳分開的結果。
5070
					#回傳的參數:
5071
					#$result["oriStr"],要分割的原始字串內容
5072
					#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
5073
					#$result["dataCounts"],爲總共分成幾段
5074
					#必填參數:
5075
					$conf["stringProcess"]["spiltString"]["stringIn"]=$defaultString["dataArray"][1];#要處理的字串。
5076
					$conf["stringProcess"]["spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
5077
					$defaultString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
5078
					unset($conf["stringProcess"]["spiltString"]);
5079
 
5080
					#如果分割字串失敗
5081
					if($defaultString["status"]=="false"){
5082
 
5083
						#設置執行失敗
5084
						$result["status"]="false";
5085
 
5086
						#設置執行錯誤訊息
5087
						$result["error"]=$defaultString;
5088
 
5089
						#回傳結果
5090
						return $result;
5091
 
5092
						}#if end
5093
 
5094
					#將「,」,「'」去掉 
5095
					#函式說明:
5096
					#處理字串避免網頁出錯
5097
					#回傳結果::
5098
					#$result,爲處理好的字串。
5099
					#必填參數:
5100
					$conf["stringProcess"]["correctCharacter"]["stringIn"]=$defaultString["dataArray"][0];#爲要處理的字串
5101
					#可省略參數:
5102
					$conf["stringProcess"]["correctCharacter"]["selectedCharacter"]=array(",","'");#爲被選擇要處理的字串/字元,須爲陣列值。
5103
					#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
5104
					#$conf["stringProcess"]["correctCharacter"]["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
5105
					$thisColumnDefaultValue=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);
5106
					unset($conf["stringProcess"]["correctCharacter"]);
5107
 
5108
					#如果處理字串失敗
5109
					if($thisColumnDefaultValue["status"]=="false"){
5110
 
5111
						#設置執行不正常
5112
						$result["status"]="false";
5113
 
5114
						#設置錯誤訊息
5115
						$result["error"]=$thisColumnDefaultValue;
5116
 
5117
						#回傳結果
5118
						return $result;
5119
 
5120
						}#if end
5121
 
5122
					#取得該欄位的預設內容
5123
					$result["columnDefault"][$i]=$thisColumnDefaultValue["content"];
5124
					$result["columnDefault"][$result["columnName"][$i]]=$thisColumnDefaultValue["content"];
5125
 
5126
					}#if end
5127
 
5128
				#反之沒有找到 DEFAULT	
5129
				else{
5130
 
5131
					$result["columnDefault"][$i]="沒有指定";
5132
					$result["columnDefault"][$result["columnName"][$i]]=$result["columnDefault"][$i];
5133
 
5134
					}#else end
5135
 
5136
				#如果有欄位內有 ON UPDATE 的字樣
5137
 
5138
				#函式說明:
5139
				#檢查字串裡面有無指定的關鍵字
5140
				#回傳結果::
5141
				#$result["status"],"true"代表執行成功,"false"代表執行失敗。
5142
				#$result["error"],錯誤訊息
5143
				#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
5144
				#必填參數:
5145
				$conf["search"]["findKeyWord"]["keyWord"]="ON UPDATE";#想要搜尋的關鍵字
5146
				$conf["search"]["findKeyWord"]["string"]=$everyLine["dataArray"][$i];#要被搜尋的字串內容
5147
				#可省略參數:
5148
				#$conf["search"]["findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
5149
				$searchResult=search::findKeyWord($conf["search"]["findKeyWord"]);
5150
				unset($conf["search"]["findKeyWord"]);
5151
 
5152
				#如果尋找 欄位內是否有 ON UPDATE 的字樣失敗
5153
				if($searchResult["status"]==="false"){
5154
 
5155
					#設置執行失敗
5156
					$result["status"]="false";
5157
 
5158
					#設置執行錯誤訊息
5159
					$result["error"]=$searchResult;
5160
 
5161
					#回傳結果
5162
					return $result;
5163
 
5164
					}#if end
5165
 
5166
				#如果有找到 ON UPDATE
5167
				if($searchResult["founded"]==="true"){ 
5168
 
5169
					#函式說明:
5170
					#將固定格式的字串分開,並回傳分開的結果。
5171
					#回傳的參數:
5172
					#$result["oriStr"],要分割的原始字串內容
5173
					#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
5174
					#$result["dataCounts"],爲總共分成幾段
5175
					#必填參數:
5176
					$conf["stringProcess"]["spiltString"]["stringIn"]=$everyLine["dataArray"][$i];#要處理的字串。
5177
					$conf["stringProcess"]["spiltString"]["spiltSymbol"]="ON UPDATE ";#爲以哪個符號作爲分割
5178
					$onUpdateString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
5179
					unset($conf["stringProcess"]["spiltString"]);
5180
 
5181
					#函式說明:
5182
					#將固定格式的字串分開,並回傳分開的結果。
5183
					#回傳的參數:
5184
					#$result["oriStr"],要分割的原始字串內容
5185
					#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
5186
					#$result["dataCounts"],爲總共分成幾段
5187
					#必填參數:
5188
					$conf["stringProcess"]["spiltString"]["stringIn"]=$onUpdateString["dataArray"][1];#要處理的字串。
5189
					$conf["stringProcess"]["spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
5190
					$onUpdateString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
5191
					unset($conf["stringProcess"]["spiltString"]);
5192
 
5193
					#如果分割字串失敗
5194
					if($onUpdateString["status"]=="false"){
5195
 
5196
						#設置執行不正常
5197
						$result["status"]="false";
5198
 
5199
						#設置錯誤訊息
5200
						$result["error"]=$onUpdateString;
5201
 
5202
						#回傳結果
5203
						return $result;
5204
 
5205
						}#if end
5206
 
5207
					#將「,」去掉 
5208
					#函式說明:
5209
					#處理字串避免網頁出錯
5210
					#回傳結果::
5211
					#$result,爲處理好的字串。
5212
					#必填參數:
5213
					$conf["stringProcess"]["correctCharacter"]["stringIn"]=$onUpdateString["dataArray"][0];#爲要處理的字串
5214
					#可省略參數:
5215
					$conf["stringProcess"]["correctCharacter"]["selectedCharacter"]=array(",");#爲被選擇要處理的字串/字元,須爲陣列值。
5216
					#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
5217
					#$conf["stringProcess"]["correctCharacter"]["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
5218
					$columnOnUpdateActionStr=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);
5219
					unset($conf["stringProcess"]["correctCharacter"]);
5220
 
5221
					#如果 處理字串失敗
5222
					if($columnOnUpdateActionStr["status"]=="false"){
5223
 
5224
						#設置執行不正常
5225
						$result["status"]="false";
5226
 
5227
						#設置錯誤訊息
5228
						$result["error"]=$columnOnUpdateActionStr;
5229
 
5230
						#回傳結果
5231
						return $result;
5232
 
5233
						}#if end
5234
 
5235
					#取得 ON UPDATE 的對應動作
5236
					$result["columnOnUpdateAction"][$result["columnName"][$i]]=$columnOnUpdateActionStr["content"];
5237
					$result["columnOnUpdateAction"][$i]=$columnOnUpdateActionStr["content"];
5238
 
5239
					}#if end
5240
 
5241
				#反之,沒有 ON UPDATE 的對應動作
5242
				else{
5243
 
5244
					$result["columnOnUpdateAction"][$i]="沒有指定";
5245
					$result["columnOnUpdateAction"][$result["columnName"][$i]]=$result["columnOnUpdateAction"][$i];
5246
 
5247
					}#else end
5248
 
5249
				}#if end
5250
 
5251
			#如果有欄位內有 CHARACTER SET 的字樣
5252
 
5253
			#函式說明:
5254
			#檢查字串裡面有無指定的關鍵字
5255
			#回傳結果::
5256
			#$result["status"],"true"代表執行成功,"false"代表執行失敗。
5257
			#$result["error"],錯誤訊息
5258
			#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
5259
			#必填參數:
5260
			$conf["search"]["findKeyWord"]["keyWord"]="CHARACTER SET";#想要搜尋的關鍵字
5261
			$conf["search"]["findKeyWord"]["string"]=$everyLine["dataArray"][$i];#要被搜尋的字串內容
5262
			#可省略參數:
5263
			#$conf["search"]["findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
5264
			$searchResult=search::findKeyWord($conf["search"]["findKeyWord"]);
5265
			unset($conf["search"]["findKeyWord"]);
5266
 
5267
			#如果尋找關鍵字失敗
5268
			if($searchResult["status"]==="false"){
5269
 
5270
				#設置執行不正常
5271
				$result["status"]="false";
5272
 
5273
				#設置錯誤訊息
5274
				$result["error"]=$searchResult;
5275
 
5276
				#回傳結果
5277
				return $result;
5278
 
5279
				}#if end
5280
 
5281
			#如果有找到 CHARACTER SET
5282
			if($searchResult["founded"]==="true"){ 
5283
 
5284
				#函式說明:
5285
				#將固定格式的字串分開,並回傳分開的結果。
5286
				#回傳的參數:
5287
				#$result["oriStr"],要分割的原始字串內容
5288
				#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
5289
				#$result["dataCounts"],爲總共分成幾段
5290
				#必填參數:
5291
				$conf["stringProcess"]["spiltString"]["stringIn"]=$everyLine["dataArray"][$i];#要處理的字串。
5292
				$conf["stringProcess"]["spiltString"]["spiltSymbol"]="CHARACTER SET ";#爲以哪個符號作爲分割
5293
				$characterSetString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
5294
				unset($conf["stringProcess"]["spiltString"]);
5295
 
5296
				#如果分割字串失敗
5297
				if($characterSetString["status"]==="false"){
5298
 
5299
					#設置執行不正常
5300
					$result["status"]="false";
5301
 
5302
					#設置錯誤訊息
5303
					$result["error"]=$characterSetString;
5304
 
5305
					#回傳結果
5306
					return $result;
5307
 
5308
					}#if end
5309
 
5310
				#函式說明:
5311
				#將固定格式的字串分開,並回傳分開的結果。
5312
				#回傳的參數:
5313
				#$result["oriStr"],要分割的原始字串內容
5314
				#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
5315
				#$result["dataCounts"],爲總共分成幾段
5316
				#必填參數:
5317
				$conf["stringProcess"]["spiltString"]["stringIn"]=$characterSetString["dataArray"][1];#要處理的字串。
5318
				$conf["stringProcess"]["spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
5319
				$characterSetString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
5320
				unset($conf["stringProcess"]["spiltString"]);
5321
 
5322
				#如果分割字串失敗
5323
				if($characterSetString["status"]==="false"){
5324
 
5325
					#設置執行不正常
5326
					$result["status"]="false";
5327
 
5328
					#設置錯誤訊息
5329
					$result["error"]=$characterSetString;
5330
 
5331
					#回傳結果
5332
					return $result;
5333
 
5334
					}#if end
5335
 
5336
				#將「,」去掉 
5337
				#函式說明:
5338
				#處理字串避免網頁出錯
5339
				#回傳結果::
5340
				#$result,爲處理好的字串。
5341
				#必填參數:
5342
				$conf["stringProcess"]["correctCharacter"]["stringIn"]=$characterSetString["dataArray"][0];#爲要處理的字串
5343
				#可省略參數:
5344
				$conf["stringProcess"]["correctCharacter"]["selectedCharacter"]=array(",");#爲被選擇要處理的字串/字元,須爲陣列值。
5345
				#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
5346
				#$conf["stringProcess"]["correctCharacter"]["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
5347
				$processedCharacterSetStr=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);
5348
				unset($conf["stringProcess"]["correctCharacter"]);
5349
 
5350
				#如果處理字串失敗
5351
				if($processedCharacterSetStr["status"]==="false"){
5352
 
5353
					#設置執行不正常
5354
					$result["status"]="false";
5355
 
5356
					#設置錯誤訊息
5357
					$result["error"]=$processedCharacterSetStr;
5358
 
5359
					#回傳結果
5360
					return $result;
5361
 
5362
					}#if end
5363
 
5364
				#取得CHARACTER SET的設定字串
5365
				$result["columnCharacterSet"][$i]=$processedCharacterSetStr["content"];
5366
				$result["columnCharacterSet"][$result["columnName"][$i]]=$processedCharacterSetStr["content"];
5367
 
5368
				}#if end
5369
 
5370
			#反之,沒有 CHARACTER SET 字樣
5371
			else{
5372
 
5373
				#如果存在該欄位
5374
				if(isset($result["columnName"][$i])){
5375
 
5376
					#採用預設的 $result["charset"]
5377
					$result["columnCharacterSet"][$i]=$result["charset"];
5378
					$result["columnCharacterSet"][$result["columnName"][$i]]=$result["columnCharacterSet"][$i];
5379
 
5380
					}#if end
5381
 
5382
				}#else end
5383
 
5384
			#檢查是否有 COLLATE 字樣...
5385
 
5386
			#函式說明:
5387
			#檢查字串裡面有無指定的關鍵字
5388
			#回傳結果::
5389
			#$result["status"],"true"代表執行成功,"false"代表執行失敗。
5390
			#$result["error"],錯誤訊息
5391
			#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
5392
			#必填參數:
5393
			$conf["search"]["findKeyWord"]["keyWord"]="COLLATE";#想要搜尋的關鍵字
5394
			$conf["search"]["findKeyWord"]["string"]=$everyLine["dataArray"][$i];#要被搜尋的字串內容
5395
			#可省略參數:
5396
			#$conf["search"]["findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
5397
			$searchResult=search::findKeyWord($conf["search"]["findKeyWord"]);
5398
			unset($conf["search"]["findKeyWord"]);
5399
 
5400
			#如果尋找關鍵字失敗
5401
			if($searchResult["status"]==="false"){
5402
 
5403
				#設置執行不正常
5404
				$result["status"]="false";
5405
 
5406
				#設置錯誤訊息
5407
				$result["error"]=$searchResult;
5408
 
5409
				#回傳結果
5410
				return $result;
5411
 
5412
				}#if end
5413
 
5414
			#如果有找到 CHARACTER SET
5415
			if($searchResult["founded"]==="true"){ 
5416
 
5417
				#函式說明:
5418
				#將固定格式的字串分開,並回傳分開的結果。
5419
				#回傳的參數:
5420
				#$result["oriStr"],要分割的原始字串內容
5421
				#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
5422
				#$result["dataCounts"],爲總共分成幾段
5423
				#必填參數:
5424
				$conf["stringProcess"]["spiltString"]["stringIn"]=$everyLine["dataArray"][$i];#要處理的字串。
5425
				$conf["stringProcess"]["spiltString"]["spiltSymbol"]="COLLATE ";#爲以哪個符號作爲分割
5426
				$collateString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
5427
				unset($conf["stringProcess"]["spiltString"]);
5428
 
5429
				#如果分割字串失敗
5430
				if($collateString["status"]=="false"){
5431
 
5432
					#設置執行不正常
5433
					$result["status"]="false";
5434
 
5435
					#設置錯誤訊息
5436
					$result["error"]=$searchResult;
5437
 
5438
					#回傳結果
5439
					return $result;
5440
 
5441
					}#if end
5442
 
5443
				#函式說明:
5444
				#將固定格式的字串分開,並回傳分開的結果。
5445
				#回傳的參數:
5446
				#$result["oriStr"],要分割的原始字串內容
5447
				#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
5448
				#$result["dataCounts"],爲總共分成幾段
5449
				#必填參數:
5450
				$conf["stringProcess"]["spiltString"]["stringIn"]=$collateString["dataArray"][1];#要處理的字串。
5451
				$conf["stringProcess"]["spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
5452
				$collateString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
5453
				unset($conf["stringProcess"]["spiltString"]);
5454
 
5455
				#如果分割字串失敗
5456
				if($collateString["status"]==="false"){
5457
 
5458
					#設置執行不正常
5459
					$result["status"]="false";
5460
 
5461
					#設置錯誤訊息
5462
					$result["error"]=$searchResult;
5463
 
5464
					#回傳結果
5465
					return $result;
5466
 
5467
					}#if end
5468
 
5469
				#將「,」去掉 
5470
				#函式說明:
5471
				#處理字串避免網頁出錯
5472
				#回傳結果::
5473
				#$result,爲處理好的字串。
5474
				#必填參數:
5475
				$conf["stringProcess"]["correctCharacter"]["stringIn"]=$collateString["dataArray"][0];#爲要處理的字串
5476
				#可省略參數:
5477
				$conf["stringProcess"]["correctCharacter"]["selectedCharacter"]=array(",");#爲被選擇要處理的字串/字元,須爲陣列值。
5478
				#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
5479
				#$conf["stringProcess"]["correctCharacter"]["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
5480
				$thisColumnCollate=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);
5481
				unset($conf["stringProcess"]["correctCharacter"]);
5482
 
5483
				#如果處理字串失敗
5484
				if($thisColumnCollate["status"]==="false"){
5485
 
5486
					#設置執行不正常
5487
					$result["status"]="false";
5488
 
5489
					#設置錯誤訊息
5490
					$result["error"]=$thisColumnCollate;
5491
 
5492
					#回傳結果
5493
					return $result;
5494
 
5495
					}#if end
5496
 
5497
				#儲存 COLLATE 資訊字串
5498
				$result["columnCollate"][$i]=$thisColumnCollate["content"];
5499
				$result["columnCollate"][$result["columnName"][$i]]=$thisColumnCollate["content"];
5500
 
5501
				}#if end
5502
 
5503
			#反之,沒有 COLLATE  字樣
5504
			else{
5505
				#如果存在該欄位
5506
				if(isset($result["columnName"][$i])){
5507
 
5508
					$result["columnCollate"][$i]="沒有指定";
5509
					$result["columnCollate"][$result["columnName"][$i]]=$result["columnCollate"][$i];
5510
 
5511
					}#if end
5512
 
5513
				}#else end
5514
 
5515
			#檢查是否有COMMENT字樣
5516
			#函式說明:
5517
			#檢查字串裡面有無指定的關鍵字
5518
			#回傳結果::
5519
			#$result["status"],"true"代表執行成功,"false"代表執行失敗。
5520
			#$result["error"],錯誤訊息
5521
			#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
5522
			#必填參數:
5523
			$conf["search"]["findKeyWord"]["keyWord"]="COMMENT";#想要搜尋的關鍵字
5524
			$conf["search"]["findKeyWord"]["string"]=$everyLine["dataArray"][$i];#要被搜尋的字串內容
5525
			#可省略參數:
5526
			#$conf["search"]["findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
5527
			$searchResult=search::findKeyWord($conf["search"]["findKeyWord"]);
5528
			unset($conf["search"]);
5529
 
5530
			#如果尋找關鍵字失敗
5531
			if($searchResult["status"]==="false"){
5532
 
5533
				#設置執行不正常
5534
				$result["status"]="false";
5535
 
5536
				#設置錯誤訊息
5537
				$result["error"]=$searchResult;
5538
 
5539
				#回傳結果
5540
				return $result;
5541
 
5542
				}#if end
5543
 
5544
			#如果有 COMMENT 字樣
5545
			if($searchResult["founded"]==="true"){
5546
 
5547
				#函式說明:
5548
				#將固定格式的字串分開,並回傳分開的結果。
5549
				#回傳的參數:
5550
				#$result["oriStr"],要分割的原始字串內容
5551
				#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
5552
				#$result["dataCounts"],爲總共分成幾段
5553
				#必填參數:
5554
				$conf["stringProcess"]["spiltString"]["stringIn"]=$everyLine["dataArray"][$i];#要處理的字串。
5555
				$conf["stringProcess"]["spiltString"]["spiltSymbol"]="COMMENT ";#爲以哪個符號作爲分割
5556
				$commentString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
5557
				unset($conf["stringProcess"]["spiltString"]);
5558
 
5559
				#如果分割字串失敗
5560
				if($commentString["status"]=="false"){
5561
 
5562
					#設置執行不正常
5563
					$result["status"]="false";
5564
 
5565
					#設置錯誤訊息
5566
					$result["error"]=$commentString;
5567
 
5568
					#回傳結果
5569
					return $result;
5570
 
5571
					}#if end
5572
 
5573
				#函式說明:
5574
				#將固定格式的字串分開,並回傳分開的結果。
5575
				#回傳的參數:
5576
				#$result["oriStr"],要分割的原始字串內容
5577
				#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
5578
				#$result["dataCounts"],爲總共分成幾段
5579
				#必填參數:
5580
				$conf["stringProcess"]["spiltString"]["stringIn"]=$commentString["dataArray"][1];#要處理的字串。
5581
				$conf["stringProcess"]["spiltString"]["spiltSymbol"]="'";#爲以哪個符號作爲分割
5582
				$commentString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
5583
				unset($conf["stringProcess"]["spiltString"]);
5584
 
5585
				#如果分割字串失敗
5586
				if($commentString["status"]==="false"){
5587
 
5588
					#設置執行不正常
5589
					$result["status"]="false";
5590
 
5591
					#設置錯誤訊息
5592
					$result["error"]=$commentString;
5593
 
5594
					#回傳結果
5595
					return $result;
5596
 
5597
					}#if end
5598
 
5599
				#取得該欄位的註解內容
5600
				$result["columnComment"][$i]=$commentString["dataArray"][0];
5601
				$result["columnComment"][$result["columnName"][$i]]=$commentString["dataArray"][0];
5602
 
5603
				}#if end
5604
 
5605
			#反之,沒有 COMMENT 字樣
5606
			else{
5607
				#如果存在該欄位
5608
				if(isset($result["columnName"][$i])){
5609
 
5610
					#設置該欄位沒有註解
5611
					$result["columnComment"][$i]="沒有註解";
5612
					$result["columnComment"][$result["columnName"][$i]]="沒有註解";
5613
 
5614
					}#if end
5615
 
5616
				}#else end
5617
 
5618
			}#for end
5619
 
5620
		#初始化索引鍵的陣列
5621
		$result["key"]=array();
5622
 
5623
		#依據有幾個鍵值的定義來執行
5624
		foreach($keyDefine as $unClassifyString){
5625
 
5626
			#依據第一個單字來進行判斷
5627
			#可能的有:
5628
			#PRIMARY KEY,主鍵
5629
			#KEY,索引鍵
5630
			#CONSTRAINT,外鍵
5631
 
5632
			#如果找到 PRIMARY KEY
5633
			#函式說明:
5634
			#檢查字串裡面有無指定的關鍵字
5635
			#回傳結果::
5636
			#$result["status"],"true"代表執行成功,"false"代表執行失敗。
5637
			#$result["error"],錯誤訊息
5638
			#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
5639
			#必填參數:
5640
			$conf["search"]["findKeyWord"]["keyWord"]="PRIMARY KEY";#想要搜尋的關鍵字
5641
			$conf["search"]["findKeyWord"]["string"]=$unClassifyString;#要被搜尋的字串內容
5642
			#可省略參數:
5643
			#$conf["search"]["findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
5644
			$searchResult=search::findKeyWord($conf["search"]["findKeyWord"]);
5645
			unset($conf["search"]["findKeyWord"]);
5646
 
5647
			#如果尋找關鍵字失敗
5648
			if($searchResult["status"]=="false"){
5649
 
5650
				#設置執行不正常
5651
				$result["status"]="false";
5652
 
5653
				#設置錯誤訊息
5654
				$result["error"]=$searchResult;
5655
 
5656
				#回傳結果
5657
				return $result;
5658
 
5659
				}#if end
5660
 
5661
			#如果有找到 PRIMARY KEY
5662
			if($searchResult["founded"]=="true"){ 
5663
 
5664
				#函式說明:
5665
				#將固定格式的字串分開,並回傳分開的結果。
5666
				#回傳的參數:
5667
				#$result["oriStr"],要分割的原始字串內容
5668
				#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
5669
				#$result["dataCounts"],爲總共分成幾段
5670
				#必填參數:
5671
				$conf["stringProcess"]["spiltString"]["stringIn"]=$unClassifyString;#要處理的字串。
5672
				$conf["stringProcess"]["spiltString"]["spiltSymbol"]="PRIMARY KEY ";#爲以哪個符號作爲分割
5673
				$primaryKeyString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
5674
				unset($conf["stringProcess"]["spiltString"]);
5675
 
5676
				#如果分割字串失敗
5677
				if($primaryKeyString["status"]=="false"){
5678
 
5679
					#設置執行不正常
5680
					$result["status"]="false";
5681
 
5682
					#設置錯誤訊息
5683
					$result["error"]=$primaryKeyString;
5684
 
5685
					#回傳結果
5686
					return $result;
5687
 
5688
					}#if end
5689
 
5690
				#取得主鍵的欄位名稱
5691
				$primaryKey=$primaryKeyString["dataArray"][1];
5692
 
5693
				#將「,」、「`」、「(」、「)」去掉 
5694
				#函式說明:
5695
				#處理字串避免網頁出錯
5696
				#回傳結果::
5697
				#$result,爲處理好的字串。
5698
				#必填參數:
5699
				$conf["stringProcess"]["correctCharacter"]["stringIn"]=$primaryKey;#爲要處理的字串
5700
				#可省略參數:
5701
				$conf["stringProcess"]["correctCharacter"]["selectedCharacter"]=array(",","`","(",")");#爲被選擇要處理的字串/字元,須爲陣列值。
5702
				#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
5703
				#$conf["stringProcess"]["correctCharacter"]["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
5704
				$getPrimaryKey=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);
5705
				unset($conf["stringProcess"]["correctCharacter"]);
5706
 
5707
				#如果 處理字串失敗
5708
				if($getPrimaryKey["status"]=="false"){
5709
 
5710
					#設置執行不正常
5711
					$result["status"]="false";
5712
 
5713
					#設置錯誤訊息
5714
					$result["error"]=$getPrimaryKey;
5715
 
5716
					#回傳結果
5717
					return $result;
5718
 
5719
					}#if end
5720
 
5721
				#取得主鍵欄位名稱
5722
				$result["primaryKey"]=$getPrimaryKey["content"];
5723
 
5724
				#後續省略
5725
				continue;
5726
 
5727
				}#if end
5728
 
5729
			#尋找是否有 KEY 關鍵字
5730
			#函式說明:
5731
			#檢查字串裡面有無指定的關鍵字
5732
			#回傳結果::
5733
			#$result["status"],"true"代表執行成功,"false"代表執行失敗。
5734
			#$result["error"],錯誤訊息
5735
			#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
5736
			#必填參數:
5737
			$conf["search"]["findKeyWord"]["keyWord"]="  KEY ";#想要搜尋的關鍵字
5738
			$conf["search"]["findKeyWord"]["string"]=$unClassifyString;#要被搜尋的字串內容
5739
			#可省略參數:
5740
			#$conf["search"]["findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
5741
			$searchResult=search::findKeyWord($conf["search"]["findKeyWord"]);
5742
			unset($conf["search"]["findKeyWord"]);
5743
 
5744
			#如果尋找關鍵字失敗
5745
			if($searchResult["status"]=="false"){
5746
 
5747
				#設置執行不正常
5748
				$result["status"]="false";
5749
 
5750
				#設置錯誤訊息
5751
				$result["error"]=$searchResult;
5752
 
5753
				#回傳結果
5754
				return $result;
5755
 
5756
				}#if end
5757
 
5758
			#如果有找到 "  KEY "
5759
			if($searchResult["founded"]=="true"){
5760
 
5761
				# 用 "  KEY " 來分割
5762
				#函式說明:
5763
				#將固定格式的字串分開,並回傳分開的結果。
5764
				#回傳的參數:
5765
				#$result["oriStr"],要分割的原始字串內容
5766
				#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
5767
				#$result["dataCounts"],爲總共分成幾段
5768
				#必填參數:
5769
				$conf["stringProcess"]["spiltString"]["stringIn"]=$unClassifyString;#要處理的字串。
5770
				$conf["stringProcess"]["spiltString"]["spiltSymbol"]="  KEY ";#爲以哪個符號作爲分割
5771
				$keyString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
5772
				unset($conf["stringProcess"]["spiltString"]);
5773
 
5774
				#如果分割字串失敗
5775
				if($keyString["status"]=="false"){
5776
 
5777
					#設置執行不正常
5778
					$result["status"]="false";
5779
 
5780
					#設置錯誤訊息
5781
					$result["error"]=$keyString;
5782
 
5783
					#回傳結果
5784
					return $result;
5785
 
5786
					}#if end
5787
 
5788
				#函式說明:
5789
				#將固定格式的字串分開,並回傳分開的結果。
5790
				#回傳的參數:
5791
				#$result["oriStr"],要分割的原始字串內容
5792
				#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
5793
				#$result["dataCounts"],爲總共分成幾段
5794
				#必填參數:
5795
				$conf["stringProcess"]["spiltString"]["stringIn"]=$keyString["dataArray"][0];#要處理的字串。
5796
				$conf["stringProcess"]["spiltString"]["spiltSymbol"]="`";#爲以哪個符號作爲分割
5797
				$keyString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
5798
				unset($conf["stringProcess"]["spiltString"]);
5799
 
5800
				#debug
5801
				#var_dump($keyString);
5802
 
5803
				#如果分割字串失敗
5804
				if($keyString["status"]=="false"){
5805
 
5806
					#設置執行不正常
5807
					$result["status"]="false";
5808
 
5809
					#設置錯誤訊息
5810
					$result["error"]=$keyString;
5811
 
5812
					#回傳結果
5813
					return $result;
5814
 
5815
					}#if end
5816
 
5817
				#取得索引的欄位名稱
5818
				$thisKeyColumnName=$keyString["dataArray"][2];
5819
 
5820
				#取得要回傳的key欄位名稱
5821
				$result["key"][]=$thisKeyColumnName;
5822
 
5823
				#用index key欄位的名稱來儲存index key的欄位
5824
				$result["key"][$thisKeyColumnName]=$thisKeyColumnName;
5825
 
5826
				#取得用於識別 key 的 Constraint
5827
				$keyConstraintName=$keyString["dataArray"][0];
5828
 
5829
				#將「`」去掉 
5830
				#函式說明:
5831
				#處理字串避免網頁出錯
5832
				#回傳結果::
5833
				#$result,爲處理好的字串。
5834
				#必填參數:
5835
				$conf["stringProcess"]["correctCharacter"]["stringIn"]=$keyConstraintName;#爲要處理的字串
5836
				#可省略參數:
5837
				$conf["stringProcess"]["correctCharacter"]["selectedCharacter"]=array("`");#爲被選擇要處理的字串/字元,須爲陣列值。
5838
				#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
5839
				#$conf["stringProcess"]["correctCharacter"]["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
5840
				$thisKeyConstraintName=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);
5841
				unset($conf["stringProcess"]["correctCharacter"]);
5842
 
5843
				#如果處理字串失敗
5844
				if($thisKeyConstraintName["status"]=="false"){
5845
 
5846
					#設置執行不正常
5847
					$result["status"]="false";
5848
 
5849
					#設置錯誤訊息
5850
					$result["error"]=$thisKeyConstraintName;
5851
 
5852
					#回傳結果
5853
					return $result;
5854
 
5855
					}#if end
5856
 
5857
				#儲存 key 的名稱
5858
				$result["keyConstraintName"][]=$thisKeyConstraintName["content"];
5859
 
5860
				#將 $result["keyConstraintName"] 用 欄位的名稱去儲存
5861
				$result["keyConstraintName"][$thisKeyColumnName]=$thisKeyConstraintName["content"];
5862
 
5863
				#後續省略
5864
				continue;
5865
 
5866
				}#if end
5867
 
5868
			#尋找是否有 CONSTRAINT 關鍵字
5869
			#函式說明:
5870
			#檢查字串裡面有無指定的關鍵字
5871
			#回傳結果::
5872
			#$result["status"],"true"代表執行成功,"false"代表執行失敗。
5873
			#$result["error"],錯誤訊息
5874
			#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
5875
			#必填參數:
5876
			$conf["search"]["findKeyWord"]["keyWord"]="CONSTRAINT";#想要搜尋的關鍵字
5877
			$conf["search"]["findKeyWord"]["string"]=$unClassifyString;#要被搜尋的字串內容
5878
			#可省略參數:
5879
			#$conf["search"]["findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
5880
			$searchResult=search::findKeyWord($conf["search"]["findKeyWord"]);
5881
			unset($conf["search"]["findKeyWord"]);
5882
 
5883
			#如果尋找關鍵字失敗
5884
			if($searchResult["status"]=="false"){
5885
 
5886
				#設置執行不正常
5887
				$result["status"]="false";
5888
 
5889
				#設置錯誤訊息
5890
				$result["error"]=$searchResult;
5891
 
5892
				#回傳結果
5893
				return $result;
5894
 
5895
				}#if end
5896
 
5897
			#如果有找到 "CONSTRAINT"
5898
			if($searchResult["founded"]=="true"){
5899
 
5900
				#取得 CONSTRAINT 的名稱
5901
 
5902
				#用 " " 來分割字串
5903
				#函式說明:
5904
				#將固定格式的字串分開,並回傳分開的結果。
5905
				#回傳的參數:
5906
				#$result["oriStr"],要分割的原始字串內容
5907
				#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
5908
				#$result["dataCounts"],爲總共分成幾段
5909
				#必填參數:
5910
				$conf["stringProcess"]["spiltString"]["stringIn"]=$unClassifyString;#要處理的字串。
5911
				$conf["stringProcess"]["spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
5912
				$foreignKeyConstraintString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
5913
				unset($conf["stringProcess"]["spiltString"]);
5914
 
5915
				#如果分割字串失敗
5916
				if($foreignKeyConstraintString["status"]=="false"){
5917
 
5918
					#設置執行不正常
5919
					$result["status"]="false";
5920
 
5921
					#設置錯誤訊息
5922
					$result["error"]=$foreignKeyConstraintString;
5923
 
5924
					#回傳結果
5925
					return $result;
5926
 
5927
					}#if end	
5928
 
5929
				#將 $foreignKeyString[0] 的非必要字元踢除
5930
				#將「,」、「`」、「(」、「)」去掉 
5931
				#函式說明:
5932
				#處理字串避免網頁出錯
5933
				#回傳結果::
5934
				#$result,爲處理好的字串。
5935
				#必填參數:
5936
				$conf["stringProcess"]["correctCharacter"]["stringIn"]=$foreignKeyConstraintString["dataArray"][1];#爲要處理的字串
5937
				#可省略參數:
5938
				$conf["stringProcess"]["correctCharacter"]["selectedCharacter"]=array("`");#爲被選擇要處理的字串/字元,須爲陣列值。
5939
				#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
5940
				#$conf["stringProcess"]["correctCharacter"]["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
5941
				$foreignConstraintName=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);
5942
				unset($conf["stringProcess"]["correctCharacter"]);		
5943
 
5944
				#如果處理 CONSTRAINT 字串失敗
5945
				if($foreignConstraintName["status"]=="false"){
5946
 
5947
					#設置執行不正常
5948
					$result["status"]="false";
5949
 
5950
					#設置錯誤訊息
5951
					$result["error"]=$foreignConstraintName;
5952
 
5953
					#回傳結果
5954
					return $result;
5955
 
5956
					}#if end	
5957
 
5958
				#儲存 foreignKey 的 CONSTRAINT 名稱
5959
				$result["foreignKey"]["constraintName"][]=$foreignConstraintName["content"];	
5960
 
5961
				#尋找 "FOREIGN KEY"
5962
				#函式說明:
5963
				#檢查字串裡面有無指定的關鍵字
5964
				#回傳結果::
5965
				#$result["status"],"true"代表執行成功,"false"代表執行失敗。
5966
				#$result["error"],錯誤訊息
5967
				#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
5968
				#必填參數:
5969
				$conf["search"]["findKeyWord"]["keyWord"]="FOREIGN KEY";#想要搜尋的關鍵字
5970
				$conf["search"]["findKeyWord"]["string"]=$unClassifyString;#要被搜尋的字串內容
5971
				#可省略參數:
5972
				#$conf["search"]["findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
5973
				$searchResult=search::findKeyWord($conf["search"]["findKeyWord"]);
5974
				unset($conf["search"]["findKeyWord"]);
5975
 
5976
				#如果尋找關鍵字失敗
5977
				if($searchResult["status"]=="false"){
5978
 
5979
					#設置執行不正常
5980
					$result["status"]="false";
5981
 
5982
					#設置錯誤訊息
5983
					$result["error"]=$searchResult;
5984
 
5985
					#回傳結果
5986
					return $result;
5987
 
5988
					}#if end
5989
 
5990
				#如果有找到 "FOREIGN KEY"
5991
				if($searchResult["founded"]=="true"){
5992
 
5993
					#用 "FOREIGN KEY " 來分割字串
5994
					#函式說明:
5995
					#將固定格式的字串分開,並回傳分開的結果。
5996
					#回傳的參數:
5997
					#$result["oriStr"],要分割的原始字串內容
5998
					#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
5999
					#$result["dataCounts"],爲總共分成幾段
6000
					#必填參數:
6001
					$conf["stringProcess"]["spiltString"]["stringIn"]=$unClassifyString;#要處理的字串。
6002
					$conf["stringProcess"]["spiltString"]["spiltSymbol"]="FOREIGN KEY ";#爲以哪個符號作爲分割
6003
					$foreignKeyString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
6004
					unset($conf["stringProcess"]["spiltString"]);
6005
 
6006
					#如果分割字串失敗
6007
					if($foreignKeyString["status"]=="false"){
6008
 
6009
						#設置執行不正常
6010
						$result["status"]="false";
6011
 
6012
						#設置錯誤訊息
6013
						$result["error"]=$foreignKeyString;
6014
 
6015
						#回傳結果
6016
						return $result;
6017
 
6018
						}#if end	
6019
 
6020
					#用 " " 來分割字串
6021
					#函式說明:
6022
					#將固定格式的字串分開,並回傳分開的結果。
6023
					#回傳的參數:
6024
					#$result["oriStr"],要分割的原始字串內容
6025
					#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
6026
					#$result["dataCounts"],爲總共分成幾段
6027
					#必填參數:
6028
					$conf["stringProcess"]["spiltString"]["stringIn"]=$foreignKeyString["dataArray"][1];#要處理的字串。
6029
					$conf["stringProcess"]["spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
6030
					$foreignKeyString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
6031
					unset($conf["stringProcess"]["spiltString"]);
6032
 
6033
					#如果分割字串失敗
6034
					if($foreignKeyString["status"]=="false"){
6035
 
6036
						#設置執行不正常
6037
						$result["status"]="false";
6038
 
6039
						#設置錯誤訊息
6040
						$result["error"]=$foreignKeyString;
6041
 
6042
						#回傳結果
6043
						return $result;
6044
 
6045
						}#if end	
6046
 
6047
					#將 $foreignKeyString[0] 的非必要字元踢除
6048
					#將「,」、「`」、「(」、「)」去掉 
6049
					#函式說明:
6050
					#處理字串避免網頁出錯
6051
					#回傳結果::
6052
					#$result,爲處理好的字串。
6053
					#必填參數:
6054
					$conf["stringProcess"]["correctCharacter"]["stringIn"]=$foreignKeyString["dataArray"][0];#爲要處理的字串
6055
					#可省略參數:
6056
					$conf["stringProcess"]["correctCharacter"]["selectedCharacter"]=array(",","`","(",")");#爲被選擇要處理的字串/字元,須爲陣列值。
6057
					#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
6058
					#$conf["stringProcess"]["correctCharacter"]["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
6059
					$thisForeignKeyColumnName=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);
6060
					unset($conf["stringProcess"]["correctCharacter"]);
6061
 
6062
					#如果 處理字串失敗
6063
					if($thisForeignKeyColumnName["status"]=="false"){
6064
 
6065
						#設置執行不正常
6066
						$result["status"]="false";
6067
 
6068
						#設置錯誤訊息
6069
						$result["error"]=$thisForeignKeyColumnName;
6070
 
6071
						#回傳結果
6072
						return $result;
6073
 
6074
						}#if end
6075
 
6076
					#儲存外鍵欄位的名稱
6077
					$result["foreignKey"]["columnName"][]=$thisForeignKeyColumnName["content"];
6078
 
6079
					#用該外鍵欄位的名稱,作為key來存放外鍵欄位的名稱
6080
					$result["foreignKey"]["columnName"][$thisForeignKeyColumnName["content"]]=$thisForeignKeyColumnName["content"];
6081
 
6082
					#用 "REFERENCES " 來分割字串
6083
					#函式說明:
6084
					#將固定格式的字串分開,並回傳分開的結果。
6085
					#回傳的參數:
6086
					#$result["oriStr"],要分割的原始字串內容
6087
					#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
6088
					#$result["dataCounts"],爲總共分成幾段
6089
					#必填參數:
6090
					$conf["stringProcess"]["spiltString"]["stringIn"]=$unClassifyString;#要處理的字串。
6091
					$conf["stringProcess"]["spiltString"]["spiltSymbol"]="REFERENCES ";#爲以哪個符號作爲分割
6092
					$foreignKeyReferencesString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
6093
					unset($conf["stringProcess"]["spiltString"]);
6094
 
6095
					#如果分割字串失敗
6096
					if($foreignKeyReferencesString["status"]=="false"){
6097
 
6098
						#設置執行不正常
6099
						$result["status"]="false";
6100
 
6101
						#設置錯誤訊息
6102
						$result["error"]=$foreignKeyReferencesString;
6103
 
6104
						#回傳結果
6105
						return $result;
6106
 
6107
						}#if end
6108
 
6109
					#用 " " 來分割字串
6110
					#函式說明:
6111
					#將固定格式的字串分開,並回傳分開的結果。
6112
					#回傳的參數:
6113
					#$result["oriStr"],要分割的原始字串內容
6114
					#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
6115
					#$result["dataCounts"],爲總共分成幾段
6116
					#必填參數:
6117
					$conf["stringProcess"]["spiltString"]["stringIn"]=$foreignKeyReferencesString["dataArray"][1];#要處理的字串。
6118
					$conf["stringProcess"]["spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
6119
					$foreignKeyReferencesString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
6120
					unset($conf["stringProcess"]["spiltString"]);
6121
 
6122
					#如果分割字串失敗
6123
					if($foreignKeyReferencesString["status"]=="false"){
6124
 
6125
						#設置執行不正常
6126
						$result["status"]="false";
6127
 
6128
						#設置錯誤訊息
6129
						$result["error"]=$foreignKeyReferencesString;
6130
 
6131
						#回傳結果
6132
						return $result;
6133
 
6134
						}#if end
6135
 
6136
					#將 $foreignKeyString[0] 的非必要字元踢除
6137
					#將「,」、「`」、「(」、「)」去掉 
6138
					#函式說明:
6139
					#處理字串避免網頁出錯
6140
					#回傳結果::
6141
					#$result,爲處理好的字串。
6142
					#必填參數:
6143
					$conf["stringProcess"]["correctCharacter"]["stringIn"]=$foreignKeyReferencesString["dataArray"][1];#爲要處理的字串
6144
					#可省略參數:
6145
					$conf["stringProcess"]["correctCharacter"]["selectedCharacter"]=array(",","`","(",")");#爲被選擇要處理的字串/字元,須爲陣列值。
6146
						#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
6147
					#$conf["stringProcess"]["correctCharacter"]["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
6148
					$tempReferencesColumn=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);
6149
					unset($conf["stringProcess"]["correctCharacter"]);
6150
 
6151
					#如果 處理字串失敗
6152
					if($tempReferencesColumn["status"]=="false"){
6153
 
6154
						#設置執行不正常
6155
						$result["status"]="false";
6156
 
6157
						#設置錯誤訊息
6158
						$result["error"]=$tempReferencesColumn;
6159
 
6160
						#回傳結果
6161
						return $result;
6162
 
6163
						}#if end
6164
 
6165
					#取得參照的欄位名稱
6166
					$result["foreignKey"]["referencesColumn"][]=$tempReferencesColumn["content"];
6167
 
6168
					#用欄位名稱來儲存參照的資料表
6169
					$result["foreignKey"]["referencesColumn"][$thisForeignKeyColumnName["content"]]=$tempReferencesColumn["content"];
6170
 
6171
					#將 $foreignKeyString[0] 的非必要字元踢除
6172
					#將「,」、「`」、「(」、「)」去掉 
6173
					#函式說明:
6174
					#處理字串避免網頁出錯
6175
					#回傳結果::
6176
					#$result,爲處理好的字串。
6177
					#必填參數:
6178
					$conf["stringProcess"]["correctCharacter"]["stringIn"]=$foreignKeyReferencesString["dataArray"][0];#爲要處理的字串
6179
					#可省略參數:
6180
					$conf["stringProcess"]["correctCharacter"]["selectedCharacter"]=array("`");#爲被選擇要處理的字串/字元,須爲陣列值。
6181
					#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
6182
					#$conf["stringProcess"]["correctCharacter"]["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
6183
					$tempReferencesTable=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);
6184
					unset($conf["stringProcess"]["correctCharacter"]);
6185
 
6186
					#如果處理字串失敗
6187
					if($tempReferencesTable["status"]=="false"){
6188
 
6189
						#設置執行不正常
6190
						$result["status"]="false";
6191
 
6192
						#設置錯誤訊息
6193
						$result["error"]=$tempReferencesTable;
6194
 
6195
						#回傳結果
6196
						return $result;
6197
 
6198
						}#if end	
6199
 
6200
					#取得參照的資料表
6201
					$result["foreignKey"]["referencesTable"][]=$tempReferencesTable["content"];
6202
 
6203
					#用欄位名稱來儲存參照的欄位
6204
					$result["foreignKey"]["referencesTable"][$thisForeignKeyColumnName["content"]]=$tempReferencesTable["content"];
6205
 
6206
					#如果有 "ON UPDATE" 存在
6207
					#函式說明:
6208
					#檢查字串裡面有無指定的關鍵字
6209
					#回傳結果::
6210
					#$result["status"],"true"代表執行成功,"false"代表執行失敗。
6211
					#$result["error"],錯誤訊息
6212
					#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
6213
					#必填參數:
6214
					$conf["search"]["findKeyWord"]["keyWord"]="ON UPDATE";#想要搜尋的關鍵字
6215
					$conf["search"]["findKeyWord"]["string"]=$unClassifyString;#要被搜尋的字串內容
6216
					#可省略參數:
6217
					#$conf["search"]["findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
6218
					$searchResult=search::findKeyWord($conf["search"]["findKeyWord"]);
6219
					unset($conf["search"]["findKeyWord"]);
6220
 
6221
					#如果尋找關鍵字失敗
6222
					if($searchResult["status"]=="false"){
6223
 
6224
						#設置執行不正常
6225
						$result["status"]="false";
6226
 
6227
						#設置錯誤訊息
6228
						$result["error"]=$searchResult;
6229
 
6230
						#回傳結果
6231
						return $result;
6232
 
6233
						}#if end
6234
 
6235
					#如果有找到 "ON UPDATE"
6236
					if($searchResult["founded"]=="true"){
6237
 
6238
						#用 "ON UPDATE " 來分割字串
6239
						#函式說明:
6240
						#將固定格式的字串分開,並回傳分開的結果。
6241
						#回傳的參數:
6242
						#$result["oriStr"],要分割的原始字串內容
6243
						#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
6244
						#$result["dataCounts"],爲總共分成幾段
6245
						#必填參數:
6246
						$conf["stringProcess"]["spiltString"]["stringIn"]=$unClassifyString;#要處理的字串。
6247
						$conf["stringProcess"]["spiltString"]["spiltSymbol"]="ON UPDATE ";#爲以哪個符號作爲分割
6248
						$foreignKeyOnUpdateString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
6249
						unset($conf["stringProcess"]["spiltString"]);
6250
 
6251
						#如果分割字串失敗
6252
						if($foreignKeyOnUpdateString["status"]=="false"){
6253
 
6254
							#設置執行不正常
6255
							$result["status"]="false";
6256
 
6257
							#設置錯誤訊息
6258
							$result["error"]=$searchResult;
6259
 
6260
							#回傳結果
6261
							return $result;
6262
 
6263
							}#if end
6264
 
6265
						#檢查裏面是否含有 " ON DELETE " 字樣
6266
						#函式說明:
6267
						#檢查字串裡面有無指定的關鍵字
6268
						#回傳結果::
6269
						#$result["status"],"true"代表執行成功,"false"代表執行失敗。
6270
						#$result["error"],錯誤訊息
6271
						#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
6272
						#必填參數:
6273
						$conf["search"]["findKeyWord"]["keyWord"]=" ON DELETE ";#想要搜尋的關鍵字
6274
						$conf["search"]["findKeyWord"]["string"]=$foreignKeyOnUpdateString["dataArray"][1];#要被搜尋的字串內容
6275
						#可省略參數:
6276
						#$conf["search"]["findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
6277
						$searchResult=search::findKeyWord($conf["search"]["findKeyWord"]);
6278
						unset($conf["search"]["findKeyWord"]);
6279
 
6280
						#如果尋找關鍵字失敗
6281
						if($searchResult["status"]=="false"){
6282
 
6283
							#設置執行不正常
6284
							$result["status"]="false";
6285
 
6286
							#設置錯誤訊息
6287
							$result["error"]=$searchResult;
6288
 
6289
							#回傳結果
6290
							return $result;
6291
 
6292
							}#if end
6293
 
6294
						#如果裏面含有 "ON DELETE " 字樣
6295
						if($searchResult["founded"]=="true"){
6296
 
6297
							#我們只要取得 "ON DELETE " 前面的內容
6298
							#用"ON UPDATE "來分割
6299
							#函式說明:
6300
							#將固定格式的字串分開,並回傳分開的結果。
6301
							#回傳的參數:
6302
							#$result["oriStr"],要分割的原始字串內容
6303
							#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
6304
							#$result["dataCounts"],爲總共分成幾段
6305
							#必填參數:
6306
							$conf["stringProcess"]["spiltString"]["stringIn"]=$foreignKeyOnUpdateString["dataArray"][1];#要處理的字串。
6307
							$conf["stringProcess"]["spiltString"]["spiltSymbol"]=" ON DELETE ";#爲以哪個符號作爲分割
6308
							$foreignKeyOnDeleteString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
6309
							unset($conf["stringProcess"]["spiltString"]);
6310
							#var_dump($foreignKeyOnDeleteString);
6311
 
6312
							#如果分割字串失敗
6313
							if($foreignKeyOnDeleteString["status"]=="false"){
6314
 
6315
								#設置執行不正常
6316
								$result["status"]="false";
6317
 
6318
								#設置錯誤訊息
6319
								$result["error"]=$foreignKeyOnDeleteString;
6320
 
6321
								#回傳結果
6322
								return $result;
6323
 
6324
								}#if end
6325
 
6326
							$foreignKeyOnUpdateString=$foreignKeyOnUpdateString["dataArray"][0];
6327
 
6328
							#將 $foreignKeyOnUpdateString 的非必要字元踢除
6329
							#將「,」、「`」、「(」、「)」去掉 
6330
							#函式說明:
6331
							#處理字串避免網頁出錯
6332
							#回傳結果::
6333
							#$result,爲處理好的字串。
6334
							#必填參數:
6335
							$conf["stringProcess"]["correctCharacter"]["stringIn"]=$foreignKeyOnUpdateString;#爲要處理的字串
6336
							#可省略參數:
6337
							$conf["stringProcess"]["correctCharacter"]["selectedCharacter"]=array(",");#爲被選擇要處理的字串/字元,須爲陣列值。
6338
								#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
6339
							#$conf["stringProcess"]["correctCharacter"]["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
6340
							$tempOnUpdateAction=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);
6341
							unset($conf["stringProcess"]["correctCharacter"]);
6342
 
6343
							#如果 處理字串 失敗
6344
							if($tempOnUpdateAction["status"]=="false"){
6345
 
6346
								#設置執行不正常
6347
								$result["status"]="false";
6348
 
6349
								#設置錯誤訊息
6350
								$result["error"]=$tempOnUpdateAction;
6351
 
6352
								#回傳結果
6353
								return $result;
6354
 
6355
								}#if end
6356
 
6357
							#紀錄 ON UPDATE 的動作字串
6358
							$result["foreignKey"]["onUpdateAction"][]=$tempOnUpdateAction["content"];
6359
 
6360
							#用 freign key 的名稱來紀錄外鍵更新的動作
6361
							$result["foreignKey"]["onUpdateAction"][$thisForeignKeyColumnName]=$tempOnUpdateAction["content"];
6362
 
6363
							}#if end
6364
 
6365
						#反之 沒有 "ON DELETE " 字樣
6366
						else{	
6367
 
6368
							#var_dump($foreignKeyOnUpdateString["dataArray"][1]);
6369
 
6370
							#將 $foreignKeyOnUpdateString 的非必要字元踢除
6371
							#將「,」、「`」、「(」、「)」去掉 
6372
							#函式說明:
6373
							#處理字串避免網頁出錯
6374
							#回傳結果::
6375
							#$result,爲處理好的字串。
6376
							#必填參數:
6377
							$conf["stringProcess"]["correctCharacter"]["stringIn"]=$foreignKeyOnUpdateString["dataArray"][1];#爲要處理的字串
6378
							#可省略參數:
6379
							$conf["stringProcess"]["correctCharacter"]["selectedCharacter"]=array(",");#爲被選擇要處理的字串/字元,須爲陣列值。
6380
								#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
6381
							#$conf["stringProcess"]["correctCharacter"]["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
6382
							$tempOnUpdateAction=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);
6383
							unset($conf["stringProcess"]["correctCharacter"]);
6384
 
6385
							#如果處理字串失敗
6386
							if($tempOnUpdateAction["status"]=="false"){
6387
 
6388
								#設置執行不正常
6389
								$result["status"]="false";
6390
 
6391
								#設置錯誤訊息
6392
								$result["error"]=$tempOnUpdateAction;
6393
 
6394
								#回傳結果
6395
								return $result;
6396
 
6397
								}#if end
6398
 
6399
							#紀錄外鍵更新的動作
6400
							$result["foreignKey"]["onUpdateAction"][]=$tempOnUpdateAction["content"];
6401
 
6402
							#用 freign key 的名稱來紀錄外鍵更新的動作
6403
							$result["foreignKey"]["onUpdateAction"][$thisForeignKeyColumnName["content"]]=$tempOnUpdateAction["content"];
6404
 
6405
							}#else end
6406
 
6407
						}#if end
6408
 
6409
					#如果有 "ON DELETE" 存在
6410
					#函式說明:
6411
					#檢查字串裡面有無指定的關鍵字
6412
					#回傳結果::
6413
					#$result["status"],"true"代表執行成功,"false"代表執行失敗。
6414
					#$result["error"],錯誤訊息
6415
					#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
6416
					#必填參數:
6417
					$conf["search"]["findKeyWord"]["keyWord"]="ON DELETE";#想要搜尋的關鍵字
6418
					$conf["search"]["findKeyWord"]["string"]=$unClassifyString;#要被搜尋的字串內容
6419
					#可省略參數:
6420
					#$conf["search"]["findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
6421
					$searchResult=search::findKeyWord($conf["search"]["findKeyWord"]);
6422
					unset($conf["search"]["findKeyWord"]);
6423
 
6424
					#如果尋找關鍵字失敗
6425
					if($searchResult["status"]=="false"){
6426
 
6427
						#設置執行不正常
6428
						$result["status"]="false";
6429
 
6430
						#設置錯誤訊息
6431
						$result["error"]=$searchResult;
6432
 
6433
						#回傳結果
6434
						return $result;
6435
 
6436
						}#if end
6437
 
6438
					#如果有找到 "ON DELETE"
6439
					if($searchResult["founded"]=="true"){							
6440
 
6441
						#用 "ON DELETE " 來分割字串
6442
						#函式說明:
6443
						#將固定格式的字串分開,並回傳分開的結果。
6444
						#回傳的參數:
6445
						#$result["oriStr"],要分割的原始字串內容
6446
						#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
6447
						#$result["dataCounts"],爲總共分成幾段
6448
						#必填參數:
6449
						$conf["stringProcess"]["spiltString"]["stringIn"]=$unClassifyString;#要處理的字串。
6450
						$conf["stringProcess"]["spiltString"]["spiltSymbol"]="ON DELETE ";#爲以哪個符號作爲分割
6451
						$foreignKeyOnDeleteString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
6452
						unset($conf["stringProcess"]["spiltString"]);
6453
 
6454
						#如果分割字串失敗
6455
						if($foreignKeyOnDeleteString["status"]=="false"){
6456
 
6457
							#設置執行不正常
6458
							$result["status"]="false";
6459
 
6460
							#設置錯誤訊息
6461
							$result["error"]=$foreignKeyOnDeleteString;
6462
 
6463
							#回傳結果
6464
							return $result;
6465
 
6466
							}#if end
6467
 
6468
						#檢查裏面是否含有 " ON UPDATE " 字樣
6469
						#函式說明:
6470
						#檢查字串裡面有無指定的關鍵字
6471
						#回傳結果::
6472
						#$result["status"],"true"代表執行成功,"false"代表執行失敗。
6473
						#$result["error"],錯誤訊息
6474
						#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
6475
						#必填參數:
6476
						$conf["search"]["findKeyWord"]["keyWord"]="ON UPDATE ";#想要搜尋的關鍵字
6477
						$conf["search"]["findKeyWord"]["string"]=$foreignKeyOnDeleteString["dataArray"][1];#要被搜尋的字串內容
6478
						#可省略參數:
6479
						#$conf["search"]["findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
6480
						$searchResult=search::findKeyWord($conf["search"]["findKeyWord"]);
6481
						unset($conf["search"]["findKeyWord"]);
6482
 
6483
						#如果分割字串失敗
6484
						if($searchResult["status"]=="false"){
6485
 
6486
							#設置執行不正常
6487
							$result["status"]="false";
6488
 
6489
							#設置錯誤訊息
6490
							$result["error"]=$searchResult;
6491
 
6492
							#回傳結果
6493
							return $result;
6494
 
6495
							}#if end
6496
 
6497
						#如果裏面含有 "ON UPDATE " 字樣
6498
						if($searchResult["founded"]=="true"){
6499
 
6500
							#我們只要取得 "ON UPDATE " 前面的內容
6501
							#用"ON UPDATE "來分割
6502
							#函式說明:
6503
							#將固定格式的字串分開,並回傳分開的結果。
6504
							#回傳的參數:
6505
							#$result["oriStr"],要分割的原始字串內容
6506
							#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
6507
							#$result["dataCounts"],爲總共分成幾段
6508
							#必填參數:
6509
							$conf["stringProcess"]["spiltString"]["stringIn"]=$foreignKeyOnDeleteString["dataArray"][1];#要處理的字串。
6510
							$conf["stringProcess"]["spiltString"]["spiltSymbol"]=" ON UPDATE ";#爲以哪個符號作爲分割
6511
							$foreignKeyOnDeleteString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
6512
							unset($conf["stringProcess"]["spiltString"]);
6513
 
6514
							#如果分割字串失敗
6515
							if($searchResult["status"]=="false"){
6516
 
6517
								#設置執行不正常
6518
								$result["status"]="false";
6519
 
6520
								#設置錯誤訊息
6521
								$result["error"]=$searchResult;
6522
 
6523
								#回傳結果
6524
								return $result;
6525
 
6526
								}#if end
6527
 
6528
							$foreignKeyOnDeleteString=$foreignKeyOnDeleteString["dataArray"][0];
6529
 
6530
							#將 $foreignKeyString[0] 的非必要字元踢除
6531
							#將「,」、「`」、「(」、「)」去掉 
6532
							#函式說明:
6533
							#處理字串避免網頁出錯
6534
							#回傳結果::
6535
							#$result,爲處理好的字串。
6536
							#必填參數:
6537
							$conf["stringProcess"]["correctCharacter"]["stringIn"]=$foreignKeyOnDeleteString;#爲要處理的字串
6538
							#可省略參數:
6539
							$conf["stringProcess"]["correctCharacter"]["selectedCharacter"]=array(",");#爲被選擇要處理的字串/字元,須爲陣列值。
6540
								#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
6541
							#$conf["stringProcess"]["correctCharacter"]["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
6542
							$tempOneleteAction=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);
6543
							unset($conf["stringProcess"]["correctCharacter"]);
6544
 
6545
							#如果處理字串失敗
6546
							if($tempOneleteAction["status"]=="false"){
6547
 
6548
								#設置執行不正常
6549
								$result["status"]="false";
6550
 
6551
								#設置錯誤訊息
6552
								$result["error"]=$tempOneleteAction;
6553
 
6554
								#回傳結果
6555
								return $result;
6556
 
6557
								}#if end
6558
 
6559
							#儲存外鍵移除後的動作
6560
							$result["foreignKey"]["onDeleteAction"][]=$tempOneleteAction["content"];
6561
 
6562
							#用 freign key 的名稱來紀錄外鍵移除後的動作
6563
							$result["foreignKey"]["onDeleteAction"][$thisForeignKeyColumnName["content"]]=$tempOneleteAction["content"];
6564
 
6565
							}#if end
6566
 
6567
						#反之裏面沒有 "ON UPDATE " 字樣
6568
						else{
6569
 
6570
							#將 $foreignKeyString[0] 的非必要字元踢除
6571
							#將「,」、「`」、「(」、「)」去掉 
6572
							#函式說明:
6573
							#處理字串避免網頁出錯
6574
							#回傳結果::
6575
							#$result,爲處理好的字串。
6576
							#必填參數:
6577
							$conf["stringProcess"]["correctCharacter"]["stringIn"]=$foreignKeyOnDeleteString["dataArray"][1];#爲要處理的字串
6578
							#可省略參數:
6579
							$conf["stringProcess"]["correctCharacter"]["selectedCharacter"]=array(",");#爲被選擇要處理的字串/字元,須爲陣列值。
6580
							#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
6581
							#$conf["stringProcess"]["correctCharacter"]["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
6582
							$tempOneleteAction=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);
6583
							unset($conf["stringProcess"]["correctCharacter"]);
6584
 
6585
							#如果處理字串失敗
6586
							if($tempOneleteAction["status"]=="false"){
6587
 
6588
								#設置執行不正常
6589
								$result["status"]="false";
6590
 
6591
								#設置錯誤訊息
6592
								$result["error"]=$tempOneleteAction;
6593
 
6594
								#回傳結果
6595
								return $result;
6596
 
6597
								}#if end
6598
 
6599
							#取得 外鍵移除後的動作
6600
							$result["foreignKey"]["OnDeleteAction"][]=$tempOneleteAction["content"];
6601
 
6602
							#用 freign key 的名稱來紀錄外鍵移除後的動作
6603
							$result["foreignKey"]["onDeleteAction"][$thisForeignKeyColumnName]=$tempOneleteAction["content"];
6604
 
6605
							}#else end
6606
 
6607
						}#if end
6608
 
6609
					}#if end
6610
 
6611
				}#if end
6612
 
6613
			}#foreach end
6614
 
6615
		#如果儲存索引鍵資訊的變數存在
6616
		if(isset($result["key"])){
6617
 
6618
			#如果索引鍵的數量大於0
6619
			if(count($result["key"])>0){
6620
 
6621
				#設置 $result["key"]["exist"] 為 "true";
6622
				$result["key"]["exist"]="true";
6623
 
6624
				}#if end
6625
 
6626
			#反之沒有索引鍵	
6627
			else{
6628
 
6629
				#設置 $result["key"]["exist"] 為 "false";
6630
				$result["key"]["exist"]="false";
6631
 
6632
				}#else end
6633
 
6634
			}#if end
6635
 
6636
		#如果 $result["foreignKey"]["constraintName"] 存在
6637
		if(isset($result["foreignKey"]["constraintName"])){
6638
 
6639
			#如果 $result["foreignKey"]["constraintName"] 數量大於 0
6640
			if(count($result["foreignKey"]["constraintName"])>0){
6641
 
6642
				#針對每個 $result["foreignKey"]["constraintName"][$k] 
6643
				for($i=0;$i<count($result["foreignKey"]["columnName"])/2;$i++){
6644
 
6645
					#指派 $result["foreignKey"]["constraintName"][$k] 的內容同時指派給 $result["foreignKey"]["constraintName"][$result["foreignKey"]["columnName"][$k]]
6646
					$result["foreignKey"]["constraintName"][$result["foreignKey"]["columnName"][$i]]=$result["foreignKey"]["constraintName"][$i];
6647
 
6648
					}#if end
6649
 
6650
				#將 $result["foreignKey"]["exist"] 設為 "true"
6651
				$result["foreignKey"]["exist"]="true";
6652
 
6653
				}#if end
6654
 
6655
			#反之 $result["foreignKey"]["exist"] 數量等於 0
6656
			else{
6657
 
6658
				#將 $result["foreignKey"]["exist"] 設為 "fasle"
6659
				$result["foreignKey"]["exist"]="false";
6660
 
6661
				}#else end
6662
 
6663
			}#if end	
6664
 
6665
		#反之 $result["foreignKey"]["constraintName"] 不存在
6666
		else{
6667
 
6668
			#將 $result["foreignKey"]["exist"] 設為 "fasle"
6669
			$result["foreignKey"]["exist"]="false";
6670
 
6671
			}#else end
6672
 
6673
		#執行到這邊代表執行成功
6674
 
6675
		#設置成功訊息
6676
		$result["status"]="true";
6677
 
6678
		#回傳結果
6679
		return $result;
6680
 
6681
		}#function getTableColumnDetailInfo end
6682
 
6683
	/*
6684
	#函式說明:
6685
	#移除資料表單1欄位的外鍵
6686
	#回傳結果:
6687
	#$result["status"],"true",代表執行成功;"false"代表執行失敗
6688
	#$result["function"],當前執行的函數名稱.
6689
	#$result["error"],錯誤訊息陣列
6690
	#$result["sql"],執行的sql字串.
6691
	#必填參數:
6692
	#$conf["dbAddress"],字串,爲mysql-Server的位置
6693
	$conf["dbAddress"]=$dbAddress;
6694
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號
6695
	$conf["dbAccount"]=$dbAccount;
6696
	#$conf["selectedDataBaseName"],字串,爲目標資料表所屬的資料庫.
6697
	$conf["selectedDataBaseName"]="";
6698
	#$conf["selectedDataTableName"],字串,爲目標資料表所屬的資料庫.
6699
	$conf["selectedDataTableName"]="";
6700
	#$conf["erasedForeignKeyColumnConstraintName"],字串,要移除外鍵欄位的CONSTRAINT名稱.
6701
	$conf["erasedForeignKeyColumnConstraintName"]="";
6702
	#可省略參數: 
6703
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼.
6704
	#$conf["dbPassword"]=$dbPassword;
6705
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,預設為3306.
6706
	#$conf["dbPort"]="3306";
6707
	#參考資料:
6708
	#無.
6709
	#備註:
6710
	#無.
6711
	*/ 
6712
	public static function eraseForeignKey($conf){
6713
 
6714
		#初始化要回傳的內容
6715
		$result=array();
6716
 
6717
		#取得當前執行的函數名稱
6718
		$result["function"]=__FUNCTION__;
6719
 
6720
		#如果 $conf 不為陣列
6721
		if(gettype($conf)!="array"){
6722
 
6723
			#設置執行失敗
6724
			$result["status"]="false";
6725
 
6726
			#設置執行錯誤訊息
6727
			$result["error"][]="\$conf變數須為陣列形態";
6728
 
6729
			#如果傳入的參數為 null
6730
			if($conf==null){
6731
 
6732
				#設置執行錯誤訊息
6733
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
6734
 
6735
				}#if end
6736
 
6737
			#回傳結果
6738
			return $result;
6739
 
6740
			}#if end
6741
 
6742
		#函式說明:
6743
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
6744
		#回傳結果:
6745
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
6746
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
6747
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
6748
		#必填參數:
6749
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
6750
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("dbAddress","dbAccount","selectedDataBaseName","selectedDataTableName","erasedForeignKeyColumnConstraintName");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
6751
		#可省略參數:
6752
		#$conf["variableType"]=array();#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
6753
		#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
6754
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
6755
		unset($conf["variableCheck"]["isexistMuti"]);
6756
 
6757
		#如果檢查不通過
6758
		if($checkResult["passed"]=="false"){
6759
 
6760
			#設置執行失敗的訊息
6761
			$result["status"]="false";
6762
 
6763
			#設置錯誤訊息
6764
			$result["error"]=$checkResult;
6765
 
6766
			#回傳結果
6767
			return $result;
6768
 
6769
			}#if end
6770
 
6771
		#移除foreignKey的語法
6772
		$sql="ALTER TABLE ".$conf["selectedDataBaseName"].".".$conf["selectedDataTableName"]." DROP FOREIGN KEY ".$conf["erasedForeignKeyColumnConstraintName"];
6773
 
6774
		#函式說明:
6775
		#執行mysql查詢的指令
6776
		#回傳結果::
6777
		#$result["status"],"true"為執行成功;"false"為執行失敗。
6778
		#$result["error"],錯誤訊息的陣列
6779
		#查詢號的解果,需要解析。
6780
		#必填參數:
6781
		$conf["db"]["execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
6782
		$conf["db"]["execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
6783
		$conf["db"]["execMysqlQuery"]["dbSql"]=$sql;#要執行sql語法
6784
		#可省略參數: 
6785
 
6786
		#如果有設定密碼
6787
		if(isset($conf["dbPassword"])){
6788
 
6789
			$conf["db"]["execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
6790
 
6791
			}#if end
6792
 
6793
		#如果有設定 $conf["dbPort"]	
6794
		if(isset($conf["dbPort"])){
6795
 
6796
			#設定 $conf["dbPort"]
6797
			$conf["db"]["execMysqlQuery"]["dbPort"]=$conf["dbPort"];
6798
 
6799
			}#if end	
6800
 
6801
		$queryResult=db::execMysqlQuery($conf["db"]["execMysqlQuery"]);
6802
		unset($conf["db"]["execMysqlQuery"]);
6803
 
6804
		#取得執行的sql語法
6805
		$result["sql"]=$queryResult["queryString"];
6806
 
6807
		#如果執行sql語法錯誤
6808
		if($queryResult["status"]=="false"){
6809
 
6810
			#設置執行失敗的識別
6811
			$result["status"]="false";
6812
 
6813
			#設置執行錯誤資訊
6814
			$result["error"]=$queryResult;
6815
 
6816
			#回傳結果
6817
			return $result;
6818
 
6819
			}#if end
6820
 
6821
		#執行到這邊代表執行無誤
6822
 
6823
		#設置執行成功的識別
6824
		$result["status"]="true";
6825
 
6826
		#回傳結果
6827
		return $result;
6828
 
6829
		}#function eraseForeignKey end
6830
 
6831
	/*
6832
	#函式說明:
6833
	#移除資料表單1欄位的索引鍵
6834
	#回傳結果:
6835
	#$result["status"],"true",代表執行成功;"false"代表執行失敗
6836
	#$result["error"],錯誤訊息陣列
6837
	#$result["sql"],執行的sql字串.
6838
	#必填參數:
6839
	$conf["dbAddress"],字串,爲mysql-Server的位置.
6840
	$conf["dbAddress"]=$dbAddress;
6841
	$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號.
6842
	$conf["dbAccount"]=$dbAccount;
6843
	$conf["selectedDataBaseName"],字串,爲目標資料表所屬的資料庫.
6844
	$conf["selectedDataBaseName"]="";
6845
	$conf["selectedDataTableName"],字串,爲目標資料表所屬的資料庫.
6846
	$conf["selectedDataTableName"]="";
6847
	$conf["erasedIndexKeyColumnConstraintName"],字串,要移除外鍵欄位的CONSTRAINT名稱.
6848
	$conf["erasedIndexKeyColumnConstraintName"]="";
6849
	#可省略參數: 
6850
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼.
6851
	#$conf["dbPassword"]=$dbPassword;
6852
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,預設為3306.
6853
	#$conf["dbPort"]="3306";
6854
	#參考資料:
6855
	#無.
6856
	#備註:
6857
	#無.
6858
	*/ 
6859
	public static function eraseIndexKey($conf){
6860
 
6861
		#初始化要回傳的內容
6862
		$result=array();
6863
 
6864
		#取得當前執行的函數名稱
6865
		$result["function"]=__FUNCTION__;
6866
 
6867
		#如果 $conf 不為陣列
6868
		if(gettype($conf)!="array"){
6869
 
6870
			#設置執行失敗
6871
			$result["status"]="false";
6872
 
6873
			#設置執行錯誤訊息
6874
			$result["error"][]="\$conf變數須為陣列形態";
6875
 
6876
			#如果傳入的參數為 null
6877
			if($conf==null){
6878
 
6879
				#設置執行錯誤訊息
6880
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
6881
 
6882
				}#if end
6883
 
6884
			#回傳結果
6885
			return $result;
6886
 
6887
			}#if end
6888
 
6889
		#函式說明:
6890
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
6891
		#回傳結果:
6892
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
6893
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
6894
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
6895
		#必填參數:
6896
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
6897
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("dbAddress","dbAccount","selectedDataBaseName","selectedDataTableName","erasedIndexKeyColumnConstraintName");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
6898
		#可省略參數:
6899
		#$conf["variableType"]=array();#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
6900
		#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
6901
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
6902
		unset($conf["variableCheck"]["isexistMuti"]);
6903
 
6904
		#檢查有誤
6905
		if($checkResult["status"]=="false"){
6906
 
6907
			#設置執行失敗的訊息
6908
			$result["status"]="false";
6909
 
6910
			#設置錯誤訊息
6911
			$result["error"]=$checkResult;
6912
 
6913
			#回傳結果
6914
			return $result;
6915
 
6916
			}#if end
6917
 
6918
		#如果檢查不通過
6919
		if($checkResult["passed"]=="false"){
6920
 
6921
			#設置執行失敗的訊息
6922
			$result["status"]="false";
6923
 
6924
			#設置錯誤訊息
6925
			$result["error"]=$checkResult;
6926
 
6927
			#回傳結果
6928
			return $result;
6929
 
6930
			}#if end
6931
 
6932
		#移除Key的語法
6933
		$sql="ALTER TABLE ".$conf["selectedDataBaseName"].".".$conf["selectedDataTableName"]." DROP INDEX `".$conf["erasedIndexKeyColumnConstraintName"]."`";
6934
 
6935
		#函式說明:
6936
		#執行mysql查詢的指令
6937
		#回傳結果::
6938
		#$result["status"],"true"為執行成功;"false"為執行失敗。
6939
		#$result["error"],錯誤訊息的陣列
6940
		#查詢號的解果,需要解析。
6941
		#必填參數:
6942
		$conf["db"]["execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
6943
		$conf["db"]["execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
6944
		$conf["db"]["execMysqlQuery"]["dbSql"]=$sql;#要執行sql語法
6945
		#可省略參數: 
6946
 
6947
		#如果有設定密碼
6948
		if(isset($conf["dbPassword"])){
6949
 
6950
			$conf["db"]["execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
6951
 
6952
			}#if end
6953
 
6954
		#如果有設定 $conf["dbPort"]	
6955
		if(isset($conf["dbPort"])){
6956
 
6957
			#設定 $conf["dbPort"]
6958
			$conf["db"]["execMysqlQuery"]["dbPort"]=$conf["dbPort"];
6959
 
6960
			}#if end	
6961
 
6962
		$queryResult=db::execMysqlQuery($conf["db"]["execMysqlQuery"]);
6963
		unset($conf["db"]["execMysqlQuery"]);
6964
 
6965
		#取得執行的sql語法
6966
		$result["sql"]=$queryResult["queryString"];
6967
 
6968
		#如果執行sql語法錯誤
6969
		if($queryResult["status"]=="false"){
6970
 
6971
			#設置執行失敗的識別
6972
			$result["status"]="false";
6973
 
6974
			#設置執行錯誤資訊
6975
			$result["error"]=$queryResult;
6976
 
6977
			#回傳結果
6978
			return $result;
6979
 
6980
			}#if end
6981
 
6982
		#執行到這邊代表執行無誤
6983
 
6984
		#設置執行失敗的識別
6985
		$result["status"]="true";
6986
 
6987
		#回傳結果
6988
		return $result;
6989
 
6990
		}#function eraseIndexKey end
6991
 
6992
	/*
6993
	#函式說明:
6994
	#移除資料表的欄位
6995
	#回傳結果:
6996
	#$result["status"],若成功則爲"true",失敗則爲,"false"
6997
	#$result["error"],錯誤訊息.
6998
	#$result["function"],當前執行的函數名稱.
6999
	#必填參數:
7000
	#$conf["dbAddress"],字串,爲mysql-Server的位置.
7001
	$conf["dbAddress"]=$dbAddress;
7002
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號.
7003
	$conf["dbAccount"]=$dbAccount;
7004
	#$conf["selectedDataBaseName"],字串,爲目標資料表所屬的資料庫.
7005
	$conf["selectedDataBaseName"]="";
7006
	#$conf["selectedDataTableName"],字串,爲目標資料表所屬的資料庫.
7007
	$conf["selectedDataTableName"]="";
7008
	#$conf["removedColumnName"],字串,要移除的欄位名稱.
7009
	$conf["removedColumnName"]="";
7010
	#可省略參數: 
7011
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼.
7012
	#$conf["dbPassword"]=$dbPassword;
7013
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,預設為3306.
7014
	#$conf["dbPort"]="3306";
7015
	#參考資料:
7016
	#無.
7017
	#備註:
7018
	#無.
7019
	*/
7020
	public static function dropColumn($conf){
7021
 
7022
		#初始化要回傳的內容
7023
		$result=array();
7024
 
7025
		#取得當前執行的函數名稱
7026
		$result["function"]=__FUNCTION__;
7027
 
7028
		#如果 $conf 不為陣列
7029
		if(gettype($conf)!="array"){
7030
 
7031
			#設置執行失敗
7032
			$result["status"]="false";
7033
 
7034
			#設置執行錯誤訊息
7035
			$result["error"][]="\$conf變數須為陣列形態";
7036
 
7037
			#如果傳入的參數為 null
7038
			if($conf==null){
7039
 
7040
				#設置執行錯誤訊息
7041
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
7042
 
7043
				}#if end
7044
 
7045
			#回傳結果
7046
			return $result;
7047
 
7048
			}#if end
7049
 
7050
		#函式說明:
7051
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
7052
		#回傳結果:
7053
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
7054
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
7055
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
7056
		#必填參數:
7057
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
7058
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("dbAddress","dbAccount","selectedDataBaseName","selectedDataTableName","removedColumnName");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
7059
		#可省略參數:
7060
		$conf["variableType"]=array("string","string","string","string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
7061
		#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
7062
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
7063
		unset($conf["variableCheck"]["isexistMuti"]);
7064
 
7065
		#如果檢查失敗
7066
		if($checkResult["status"]=="false"){
7067
 
7068
			#設置執行失敗的訊息
7069
			$result["status"]="false";
7070
 
7071
			#設置錯誤訊息
7072
			$result["error"]=$checkResult;
7073
 
7074
			#回傳結果
7075
			return $result;
7076
 
7077
			}#if end
7078
 
7079
		#如果檢查不通過
7080
		if($checkResult["passed"]=="false"){
7081
 
7082
			#設置執行失敗的訊息
7083
			$result["status"]="false";
7084
 
7085
			#設置錯誤訊息
7086
			$result["error"]=$checkResult;
7087
 
7088
			#回傳結果
7089
			return $result;
7090
 
7091
			}#if end
7092
 
7093
		#函式說明:
7094
		#取得資料表所有欄位的詳細資訊
7095
		#回傳的內容:
7096
		#$result["status"],執行結果,"true"代表執行成功;"false"代表執行失敗
7097
		#$result["error"],錯誤訊息陣列
7098
		#$result["sql"],執行的sql語法
7099
		#$result["oriInput"],原始的資料表欄位資訊
7100
		#$result["everyLine"],逐行的欄位資訊
7101
		#$result["tableName"],當前查詢的資料表名稱
7102
		#$result["engine"],資料表使用的儲存引擎
7103
		#$result["charset"],資料表預設的編碼
7104
		#$result["columnName"][$i],各欄位的名稱陣列,$i爲0開始的數字,也可以使用欄位的名稱。
7105
		#$result["columnVarTypeAndLengthLimit"][$i],各欄位儲存的變數形態與長度限制,$i爲0開始的數字,也可以使用欄位的名稱。
7106
		#$result["columnNotNull"][$i],各欄位是否可以不爲null,"true"爲可以不爲null;"false"爲可以爲"null",$i爲0開始的數字,也可以使用欄位的名稱。
7107
		#$result["columnAutoIncrement"][$i],各欄位是否會自動加1,"true"爲會;"false"爲不會,$i爲0開始的數字,也可以使用欄位的名稱。
7108
		#$result["columnDefault"][$i],各欄位的預設內容,若無則爲"沒有指定",$i爲0開始的數字,也可以使用欄位的名稱。
7109
		#$result["columnOnUpdateAction"][$i],當資料有修改時,該欄位的內容要怎麼因應,$i爲0開始的數字,也可以使用欄位的名稱。
7110
		#$result["columnCharacterSet"][$i],各欄位使用的CharacterSet,$i爲0開始的數字,也可以使用欄位的名稱。
7111
		#$result["columnCollate"][$i],各欄位使用的Collate,$i爲0開始的數字,也可以使用欄位的名稱。
7112
		#$result["key"]["exist"],該資料表是否有索引鍵,"true"代表有;"false"代表沒有。
7113
		#$result["key"][$j],該資料表的索引鍵陣列,$j爲0開始的數字,也可以使用欄位的名稱。
7114
		#$result["keyConstraintName"][$j],該資料表用於識別索引鍵的CONSTRAINT名稱陣列,$j爲0開始的數字,也可以使用欄位的名稱。
7115
		#$result["primaryKey"],該資料表的主鍵
7116
		#$result["foreignKey"]["exist"],該資料表是否有foreign key,"true"代表有;"fasle"代表沒有。
7117
		#$result["foreignKey"]["constraintName"][$k],用來識別外鍵的CONSTRAINT名稱陣列,$k爲0開始的數字,也可以使用欄位的名稱。
7118
		#$result["foreignKey"]["columnName"][$k],外鍵的名稱陣列,$k爲0開始的數字,也可以使用欄位的名稱。
7119
		#$result["foreignKey"]["referencesTable"][$k],外鍵參照的欄位,$k爲0開始的數字
7120
		#$result["foreignKey"]["referencesColumn"][$k],外鍵參照的欄位屬於哪個資料表,$k爲0開始的數字
7121
		#$result["columnOnUpdateAction"][$i],當參照的欄位資料更新時,會怎麼同步,$i爲0開始的數字,"沒有指定"為沒有設定
7122
		#$result["columnOnDeleteAction"][$i],當參照的欄位資料移除時,會怎麼同步,$i爲0開始的數字,"沒有指定"為沒有設定
7123
		#必填參數:
7124
		$conf["db"]["getTableColumnDetailInfo"]["dbAddress"]=$conf["dbAddress"];#資料庫的網路位置
7125
		$conf["db"]["getTableColumnDetailInfo"]["dbAccount"]=$conf["dbAccount"];#連線到資料庫要用的帳號
7126
		$conf["db"]["getTableColumnDetailInfo"]["selectedDataBase"]=$conf["selectedDataBaseName"];#連線到資料庫要選擇的資料庫
7127
		$conf["db"]["getTableColumnDetailInfo"]["selectedDataTable"]=$conf["selectedDataTableName"];#連線到資料庫要檢視的資料表
7128
		#可省略參數:
7129
 
7130
		#如果 $conf["dbPassword"] 有設置
7131
		if(isset($conf["dbPassword"])){
7132
 
7133
			$conf["db"]["getTableColumnDetailInfo"]["dbPassword"]=$conf["dbPassword"];#連線到資料庫要用的密碼
7134
 
7135
			}#if end
7136
 
7137
		#如果有設定 $conf["dbPort"]	
7138
		if(isset($conf["dbPort"])){
7139
 
7140
			#設定 $conf["dbPort"]
7141
			$conf["db"]["getTableColumnDetailInfo"]["dbPort"]=$conf["dbPort"];
7142
 
7143
			}#if end	
7144
 
7145
		$tableDetail=db::getTableColumnDetailInfo($conf["db"]["getTableColumnDetailInfo"]);
7146
		unset($conf["db"]["getTableColumnDetailInfo"]);
7147
 
7148
		#如果取得資料表結構詳細資料失敗
7149
		if($tableDetail["status"]=="false"){
7150
 
7151
			#設置執行失敗的訊息
7152
			$result["status"]="false";
7153
 
7154
			#設置錯誤訊息
7155
			$result["error"]=$tableDetail;
7156
 
7157
			#回傳結果
7158
			return $result;
7159
 
7160
			}#if end
7161
 
7162
		#var_dump($tableDetail["foreignKey"]);
7163
 
7164
		#判斷該欄位是否爲 foreign key
7165
		if(isset($tableDetail["foreignKey"]["columnName"][$conf["removedColumnName"]])){
7166
 
7167
			#代表該欄位等於 foreign key 
7168
 
7169
			#先移除foreign key...
7170
			#函式說明:
7171
			#移除資料表單1欄位的外鍵
7172
			#回傳結果:
7173
			#$result["status"],"true",代表執行成功;"false"代表執行失敗
7174
			#$result["error"],錯誤訊息陣列
7175
			#必填參數:
7176
			$conf["db"]["eraseForeignKey"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
7177
			$conf["db"]["eraseForeignKey"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
7178
			$conf["db"]["eraseForeignKey"]["selectedDataBaseName"]=$conf["selectedDataBaseName"];#爲目標資料表所屬的資料庫
7179
			$conf["db"]["eraseForeignKey"]["selectedDataTableName"]=$conf["selectedDataTableName"];#爲目標資料表所屬的資料庫
7180
			$conf["db"]["eraseForeignKey"]["erasedForeignKeyColumnConstraintName"]=$tableDetail["foreignKey"]["constraintName"][$conf["removedColumnName"]];#要移除外鍵欄位的CONSTRAINT名稱
7181
			#可省略參數: 
7182
 
7183
			#如果 $conf["dbPassword"] 有設置
7184
			if(isset($conf["dbPassword"])){
7185
 
7186
				$conf["db"]["eraseForeignKey"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
7187
 
7188
				}#if end
7189
 
7190
			#如果有設定 $conf["dbPort"]	
7191
			if(isset($conf["dbPort"])){
7192
 
7193
				#設定 $conf["dbPort"]
7194
				$conf["db"]["eraseForeignKey"]["dbPort"]=$conf["dbPort"];
7195
 
7196
				}#if end	
7197
 
7198
			$eraseForeignKeyResult=db::eraseForeignKey($conf["db"]["eraseForeignKey"]);
7199
			unset($conf["db"]["eraseForeignKey"]);
7200
 
7201
			#var_dump($eraseForeignKeyResult);
7202
 
7203
			#如果執行失敗
7204
			if($eraseForeignKeyResult["status"]=="false"){
7205
 
7206
				#var_dump($eraseForeignKeyResult);
7207
 
7208
				#設置錯誤識別
7209
				$result["status"]="fasle";
7210
 
7211
				#設置錯誤提示
7212
				$result["error"]=$eraseForeignKeyResult;
7213
 
7214
				#回傳結果
7215
				return $result;
7216
 
7217
				}#if end
7218
 
7219
			}#if end
7220
 
7221
		#如果要移除欄位是index
7222
		if(isset($tableDetail["key"][$conf["removedColumnName"]])){
7223
 
7224
			#移除索引鍵
7225
			#函式說明:
7226
			#移除資料表單1欄位的索引鍵
7227
			#回傳結果:
7228
			#$result["status"],"true",代表執行成功;"false"代表執行失敗
7229
			#$result["error"],錯誤訊息陣列
7230
			#必填參數:
7231
			$conf["db"]["eraseIndexKey"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
7232
			$conf["db"]["eraseIndexKey"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
7233
			$conf["db"]["eraseIndexKey"]["selectedDataBaseName"]=$conf["selectedDataBaseName"];#爲目標資料表所屬的資料庫
7234
			$conf["db"]["eraseIndexKey"]["selectedDataTableName"]=$conf["selectedDataTableName"];#爲目標資料表所屬的資料庫
7235
			$conf["db"]["eraseIndexKey"]["erasedIndexKeyColumnConstraintName"]=$tableDetail["keyConstraintName"][$conf["removedColumnName"]];#要移除索引鍵欄位的CONSTRAINT名稱
7236
			#可省略參數: 
7237
 
7238
			#如果 $conf["dbPassword"] 有設置
7239
			if(isset($conf["dbPassword"])){
7240
 
7241
				$conf["db"]["eraseIndexKey"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
7242
 
7243
				}#if end
7244
 
7245
			#如果有設定 $conf["dbPort"]	
7246
			if(isset($conf["dbPort"])){
7247
 
7248
				#設定 $conf["dbPort"]
7249
				$conf["db"]["eraseIndexKey"]["dbPort"]=$conf["dbPort"];
7250
 
7251
				}#if end
7252
 
7253
			$eraseIndexKeyResult=db::eraseIndexKey($conf["db"]["eraseIndexKey"]);
7254
			unset($conf["db"]["eraseIndexKey"]);
7255
 
7256
			#如果執行失敗
7257
			if($eraseIndexKeyResult["status"]=="false"){
7258
 
7259
				#var_dump($eraseIndexKeyResult);
7260
 
7261
				#設置錯誤識別
7262
				$result["status"]="fasle";
7263
 
7264
				#設置錯誤提示
7265
				$result["error"]=$eraseIndexKeyResult;
7266
 
7267
				#回傳結果
7268
				return $result;
7269
 
7270
				}#if end
7271
 
7272
			}#if end		
7273
 
7274
		#組合sql語言
7275
		$sql="alter table ".$conf["selectedDataBaseName"].".".$conf["selectedDataTableName"]." drop `".$conf["removedColumnName"]."`;";
7276
 
7277
		#函式說明:
7278
		#執行mysql指令
7279
		#回傳結果::
7280
		#$result["status"],"true"為執行成功;"false"為執行失敗。
7281
		#$result["error"],錯誤訊息的陣列
7282
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
7283
		#查詢號的解果,需要解析。
7284
		#必填參數:
7285
		$conf["db"]["execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
7286
		$conf["db"]["execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
7287
		$conf["db"]["execMysqlQuery"]["dbSql"]=$sql;#要執行sql語法
7288
		#可省略參數: 
7289
 
7290
		#如果有設定連線密碼
7291
		if(isset($conf["dbPassword"])){
7292
 
7293
			#就套用密碼
7294
			$conf["db"]["execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
7295
 
7296
			}#if end
7297
 
7298
		#如果有設定 $conf["dbPort"]	
7299
		if(isset($conf["dbPort"])){
7300
 
7301
			#設定 $conf["dbPort"]
7302
			$conf["db"]["execMysqlQuery"]["dbPort"]=$conf["dbPort"];
7303
 
7304
			}#if end
7305
 
7306
		$queryResult=db::execMysqlQuery($conf["db"]["execMysqlQuery"]);
7307
		unset($conf["db"]["execMysqlQuery"]);
7308
 
7309
		#如果執行失敗
7310
		if($queryResult["status"]=="false"){
7311
 
7312
			#設置執行失敗
7313
			$result["status"]="false";
7314
 
7315
			#取得錯誤訊息
7316
			$result["error"]=$queryResult;
7317
 
7318
			#回傳結果
7319
			return $result;
7320
 
7321
			}#if end
7322
 
7323
		#設置執行成功
7324
		$result["status"]="true";
7325
 
7326
		#回傳結果
7327
		return $result;
7328
 
7329
		}#function dropColumn end
7330
 
7331
	/*
7332
	#函式說明:
7333
	#清空資料表儲存的資料
7334
	#回傳結果::
7335
	#$result["status"],執行成功與否,"true"代表執行成功;"fasle"代表執行失敗
7336
	#$result["error"],錯誤訊息
7337
	#$result["function"],當前執行的涵式.
7338
	#必填參數:
7339
	$conf["dbAddress"]="字串,爲mysql-Server的位置
7340
	$conf["dbAddress"]=$dbAddress;
7341
	$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號
7342
	$conf["dbAccount"]=$dbAccount;
7343
	$conf["dbName"]=$dbName;#爲目標資料表所屬的資料庫
7344
	$conf["dtName"]="";#爲要移除的資料表名稱
7345
	#可省略參數:		
7346
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼.
7347
	#$conf["dbPassword"]=$dbPassword;
7348
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,預設為3306.
7349
	#$conf["dbPort"]="3306";
7350
	#參考資料:
7351
	#https://dev.mysql.com/doc/refman/5.0/en/truncate-table.html
7352
	#備註:
7353
	#無.
7354
	*/
7355
	public static function emptyTable($conf){
7356
 
7357
		#初始化要回傳的內容
7358
		$result=array();
7359
 
7360
		#取得當前執行的函數名稱
7361
		$result["function"]=__FUNCTION__;
7362
 
7363
		#如果 $conf 不為陣列
7364
		if(gettype($conf)!="array"){
7365
 
7366
			#設置執行失敗
7367
			$result["status"]="false";
7368
 
7369
			#設置執行錯誤訊息
7370
			$result["error"][]="\$conf變數須為陣列形態";
7371
 
7372
			#如果傳入的參數為 null
7373
			if($conf==null){
7374
 
7375
				#設置執行錯誤訊息
7376
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
7377
 
7378
				}#if end
7379
 
7380
			#回傳結果
7381
			return $result;
7382
 
7383
			}#if end
7384
 
7385
		#函式說明:
7386
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
7387
		#回傳結果:
7388
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
7389
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
7390
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
7391
		#必填參數:
7392
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
7393
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("dbAddress","dbAccount","dbName","dtName");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
7394
		#可省略參數:
7395
		#$conf["variableType"]=array();#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
7396
		#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
7397
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
7398
		unset($conf["variableCheck"]);
7399
 
7400
		#如果檢查不通過
7401
		if($checkResult["status"]=="false"){
7402
 
7403
			#設置錯誤識別
7404
			$result["status"]="fasle";
7405
 
7406
			#設置錯誤訊息
7407
			$result["error"]=$checkResult;
7408
 
7409
			#回傳結果
7410
			return $result;
7411
 
7412
			}#if end
7413
 
7414
		#如果檢查不通過
7415
		if($checkResult["passed"]=="false"){
7416
 
7417
			#設置錯誤識別
7418
			$result["status"]="fasle";
7419
 
7420
			#設置錯誤訊息
7421
			$result["error"]=$checkResult;
7422
 
7423
			#回傳結果
7424
			return $result;
7425
 
7426
			}#if end
7427
 
7428
		#設定要執行的sql語法
7429
		$sql="TRUNCATE TABLE ".$conf["dbName"].".".$conf["dtName"].";";
7430
 
7431
		#函式說明:
7432
		#執行mysql指令
7433
		#回傳結果::
7434
		#$result["status"],"true"為執行成功;"false"為執行失敗。
7435
		#$result["error"],錯誤訊息的陣列
7436
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
7437
		#$result["queryString"],mysql查詢的語言
7438
		#查詢號的解果,需要解析。
7439
		#必填參數:
7440
		$conf["db.execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
7441
		$conf["db.execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
7442
		$conf["db.execMysqlQuery"]["dbSql"]=$sql;#要執行sql語法
7443
		#可省略參數: 
7444
 
7445
		#如果 $conf["dbPassword"] 有設置
7446
		if(isset($conf["dbPassword"])){
7447
 
7448
			$conf["db.execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
7449
 
7450
			}#if end
7451
 
7452
		#如果有設定 $conf["dbPort"]	
7453
		if(isset($conf["dbPort"])){
7454
 
7455
			#設定 $conf["dbPort"]
7456
			$conf["db.execMysqlQuery"]["dbPort"]=$conf["dbPort"];
7457
 
7458
			}#if end				
7459
 
7460
		$queryResult=db::execMysqlQuery($conf["db.execMysqlQuery"]);
7461
		unset($conf["db.execMysqlQuery"]);
7462
 
7463
		#如果 $queryResult["status"] 為 "false"
7464
		if($queryResult["status"]=="false"){
7465
 
7466
			#函式說明:
7467
			#透過一筆筆將資料表刪除後,重設識別欄位的自動增量欄位起始值為1
7468
			#回傳結果:
7469
			#$result["status"],執行是否正常,"true"代表執行正常,"false"代表執行失敗.
7470
			#$result["error"],錯誤訊息.
7471
			#$result["function"],當前執行的函數名稱.
7472
			#$result["sql"],執行的sql語法陣列.
7473
			#必填參數:
7474
			#$conf["db.eraseDataInTableThenResetAutoIncrement"]["dbAddress"],字串,連線到資料庫的位置.
7475
			$conf["db.eraseDataInTableThenResetAutoIncrement"]["dbAddress"]=$conf["dbAddress"];
7476
			#$conf["db.eraseDataInTableThenResetAutoIncrement"]["dbAccount"],字串,連線到資料庫的帳號.
7477
			$conf["db.eraseDataInTableThenResetAutoIncrement"]["dbAccount"]=$conf["dbAccount"];
7478
			#$conf["db.eraseDataInTableThenResetAutoIncrement"]["dbName"],字串,要連線到哪個資料庫.
7479
			$conf["db.eraseDataInTableThenResetAutoIncrement"]["dbName"]=$conf["dbName"];
7480
			#$conf["db.eraseDataInTableThenResetAutoIncrement"]["dtName"],字串,要重設重設識別欄位的自動增量為0的資料表名稱.
7481
			$conf["db.eraseDataInTableThenResetAutoIncrement"]["dtName"]=$conf["dtName"];
7482
			#可省略參數:
7483
 
7484
			#如果 $conf["dbPassword"] 有設置
7485
			if(isset($conf["dbPassword"])){
7486
 
7487
				#$conf["db.eraseDataInTableThenResetAutoIncrement"]["dbPassword"],字串,連線到資料庫的密碼.
7488
				$conf["db.eraseDataInTableThenResetAutoIncrement"]["dbPassword"]=$conf["dbPassword"];
7489
 
7490
				}#if end
7491
 
7492
			#如果有設定 $conf["dbPort"]	
7493
			if(isset($conf["dbPort"])){
7494
 
7495
				#設定 $conf["dbPort"]
7496
				$conf["db.eraseDataInTableThenResetAutoIncrement"]["dbPort"]=$conf["dbPort"];
7497
 
7498
				}#if end	
7499
 
7500
			#參考資料:
7501
			#http://dev.mysql.com/doc/refman/5.0/en/alter-table.html
7502
			#參考語法:
7503
			#ALTER TABLE dbName.dtName AUTO_INCREMENT = 1;
7504
			$eraseDataInTableThenResetAutoIncrementResult=db::eraseDataInTableThenResetAutoIncrement($conf["db.eraseDataInTableThenResetAutoIncrement"]);
7505
			unset($conf["db.eraseDataInTableThenResetAutoIncrement"]);
7506
 
7507
			#如果 透過一筆筆將資料表刪除後,重設識別欄位的自動增量欄位起始值為1 失敗
7508
			if($eraseDataInTableThenResetAutoIncrementResult["status"]=="false"){
7509
 
7510
				#設置錯誤識別
7511
				$result["status"]="false";
7512
 
7513
				#設置錯誤訊息
7514
				$result["error"]=$eraseDataInTableThenResetAutoIncrementResult;
7515
 
7516
				#回傳結果
7517
				return $result;
7518
 
7519
				}#if end
7520
 
7521
			}#if end	
7522
 
7523
		#值行到這邊代表執行成功
7524
		$result["status"]="true";
7525
 
7526
		#回傳結果
7527
		return $result;
7528
 
7529
		}#function emptyTable end
7530
 
7531
	/*
7532
	#函式說明:
7533
	#更改資料庫的名稱 
7534
	#回傳結果::
7535
	#$result["status"],"true"代表執行成功
7536
	#$result["function"],當前執行的函數名稱.
7537
	#$result["error"],錯誤訊息陣列.
7538
	#必填參數:
7539
	#$conf["editedDatabaseName"],爲要更改的資料庫名稱.
7540
	$conf["editedDatabaseName"]=$editedDbName;
7541
	#$conf["newDatabaseName"],新的資料庫名稱
7542
	$conf["newDatabaseName"]="";
7543
	#$conf["dbAccount"],爲用於連入資料庫server時要使用的帳號
7544
	$conf["dbAccount"]=$dbAccount;
7545
	#$conf["dbAddress"],爲資料庫server的位置
7546
	$conf["dbAddress"]=$dbAddress;
7547
	#$conf["fileArgu"],字串,__FILE__的內容.
7548
	$conf["fileArgu"]=__FILE__;
7549
	#可省略參數:
7550
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼.
7551
	#$conf["dbPassword"]=$dbPassword;
7552
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,預設為3306.
7553
	#$conf["dbPort"]="3306";
7554
	#參考資料:
7555
	#http://stackoverflow.com/questions/1708651/how-can-i-change-case-of-database-name-in-mysql
7556
	#備註:
7557
	#無.
7558
	*/
7559
	public static function editDatabaseName($conf){
7560
 
7561
		#初始化要回傳的內容
7562
		$result=array();
7563
 
7564
		#取得當前執行的函數名稱
7565
		$result["function"]=__FUNCTION__;
7566
 
7567
		#如果 $conf 不為陣列
7568
		if(gettype($conf)!="array"){
7569
 
7570
			#設置執行失敗
7571
			$result["status"]="false";
7572
 
7573
			#設置執行錯誤訊息
7574
			$result["error"][]="\$conf變數須為陣列形態";
7575
 
7576
			#如果傳入的參數為 null
7577
			if($conf==null){
7578
 
7579
				#設置執行錯誤訊息
7580
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
7581
 
7582
				}#if end
7583
 
7584
			#回傳結果
7585
			return $result;
7586
 
7587
			}#if end
7588
 
7589
		#函式說明:
7590
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
7591
		#回傳結果:
7592
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
7593
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
7594
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
7595
		#必填參數:
7596
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
7597
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("fileArgu","editedDatabaseName","newDatabaseName","dbAccount","dbAddress");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
7598
		#可省略參數:
7599
		#$conf["variableType"]=array();#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
7600
		#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
7601
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
7602
		unset($conf["variableCheck"]["isexistMuti"]);
7603
 
7604
		#如果檢查失敗
7605
		if($checkResult["status"]=="false"){
7606
 
7607
			#設置錯誤識別
7608
			$result["status"]="false";
7609
 
7610
			#設置錯誤訊息
7611
			$result["error"]=$checkResult;
7612
 
7613
			#回傳錯誤訊息
7614
			return $result;
7615
 
7616
			}#if end
7617
 
7618
		#如果檢查不通過
7619
		if($checkResult["passed"]=="false"){
7620
 
7621
			#設置錯誤識別
7622
			$result["status"]="false";
7623
 
7624
			#設置錯誤訊息
7625
			$result["error"]=$checkResult;
7626
 
7627
			#回傳錯誤訊息
7628
			return $result;
7629
 
7630
			}#if end
7631
 
7632
		#檢查要修改名稱的資料庫是否爲系統資料庫
7633
		#函式說明:
7634
		#檢查一個數值是否與陣列裏面的元素相同
7635
		#回傳結果::
7636
		#$result["status"],"true"表示執行正確,"false"表示執行錯誤.
7637
		#$result["founded"],"true"表示有找到相同的,"false"表示沒有找到相同的.
7638
		#$result["error"],錯誤訊息
7639
		#$result["function"],當前執行的函數名稱
7640
		#$result["equalVarName"],相等的變數名稱或key.
7641
		#$result["equalVarValue"],相等的變數數值內容.
7642
		#必填參數:
7643
		$conf["search"]["getEqualVar"]["conditionElement"]=$conf["editedDatabaseName"];#條件元素,要等於的元素內容。
7644
		$conf["search"]["getEqualVar"]["compareElements"]=array("information_schema","mysql","performance_schema");#要比對的陣列變數內容。
7645
		$searchResult=search::getEqualVar($conf["search"]["getEqualVar"]);
7646
		unset($conf["search"]["getEqualVar"]);
7647
 
7648
		#如果檢查失敗
7649
		if($searchResult["status"]=="false"){
7650
 
7651
			#設置錯誤識別
7652
			$result["status"]="false";
7653
 
7654
			#設置錯誤訊息
7655
			$result["error"]=$searchResult;
7656
 
7657
			#回傳結果
7658
			return $result;
7659
 
7660
			}#if end
7661
 
7662
		#如果要移除的資料庫爲系統資料庫
7663
		if($searchResult["founded"]=="true"){
7664
 
7665
			#設置錯誤識別
7666
			$result["status"]="false";
7667
 
7668
			#設置錯誤訊息
7669
			$result["error"][]="您不能更改系統資料庫";
7670
 
7671
			#回傳結果
7672
			return $result;
7673
 
7674
			}#if end
7675
 
7676
		#如果 $conf["dbPassword"] 不存在
7677
		if(!isset($conf["dbPassword"])){
7678
 
7679
			#設爲空值
7680
			$conf["dbPassword"]="";
7681
 
7682
			}#if end
7683
 
7684
		#反之有設定
7685
		else{
7686
 
7687
			#設定連線用的密碼
7688
			$formatedPassword="--password=".$conf["dbPassword"];
7689
 
7690
			}#else end
7691
 
7692
		#檢查新名字的資料庫是否存在
7693
		#函式說明:
7694
		#檢查該資料庫是否存在,結果會回傳一個陣列。
7695
		#回傳結果:
7696
		#$result["status"],執行正常則回傳"true",執行失敗則回傳"false".
7697
		#$result["error"],錯誤訊息
7698
		#$result["exist"],有為"true",無為"false".
7699
		#必填的參數
7700
		$conf["db"]["checkDataBaseExists"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
7701
		$conf["db"]["checkDataBaseExists"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
7702
		$conf["db"]["checkDataBaseExists"]["checkDataBaseName"]=$conf["newDatabaseName"];#爲要檢查是否存在的資料庫名稱
7703
		#可省略參數
7704
 
7705
		#如果 $conf["dbPassword"] 存在
7706
		if(isset($conf["dbPassword"])){
7707
 
7708
			#設置密碼
7709
			$conf["db"]["checkDataBaseExists"]["dbPassword"]=$conf["dbPassword"];
7710
 
7711
			}#if end
7712
 
7713
		#如果 $conf["dbPort"] 存在
7714
		if(isset($conf["dbPort"])){
7715
 
7716
			#設置密碼
7717
			$conf["db"]["checkDataBaseExists"]["dbPort"]=$conf["dbPort"];
7718
 
7719
			}#if end		
7720
 
7721
		$checkResult=db::checkDataBaseExists($conf["db"]["checkDataBaseExists"]);
7722
		unset($conf["db"]["checkDataBaseExists"]);
7723
 
7724
		#如果 $checkResult["status"] 等於 "false"
7725
		if($checkResult["status"]==="false"){
7726
 
7727
			#設置錯誤識別
7728
			$result["status"]="false";
7729
 
7730
			#設置錯誤訊息
7731
			$result["error"]=$checkResult;
7732
 
7733
			#回傳結果
7734
			return $result;
7735
 
7736
			}#if end
7737
 
7738
		#如果跟現有的資料庫名稱一樣
7739
		if($checkResult["exist"]==="true"){
7740
 
7741
			#設置錯誤訊息
7742
			$result["error"]=$checkResult;
7743
 
7744
			#設置錯誤識別
7745
			$result["status"]="false";
7746
 
7747
			#回傳結果
7748
			return $result;
7749
 
7750
			}#if end
7751
 
7752
		#如果沒有跟現有的資料庫名稱一樣	
7753
		if($checkResult["exist"]==="false"){
7754
 
7755
			#建立新的資料庫
7756
			#函式說明:
7757
			#建立資料庫,會回傳一個陣列。
7758
			#回傳結果:
7759
			#$result["status"],若成功則爲"true",失敗則爲"false".
7760
			#$result["error"],錯誤訊息 
7761
			#必填參數:
7762
			$conf["db"]["createDatabase"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
7763
			$conf["db"]["createDatabase"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
7764
			$conf["db"]["createDatabase"]["newDatabaseName"]=$conf["newDatabaseName"];#爲要新增的資料庫名稱
7765
			#可省略參數:
7766
 
7767
			#如果 $conf["dbPassword"] 存在
7768
			if(isset($conf["dbPassword"])){
7769
 
7770
				#設置密碼
7771
				$conf["db"]["createDatabase"]["dbPassword"]=$conf["dbPassword"];
7772
 
7773
				}#if end
7774
 
7775
			#如果 $conf["dbPort"] 存在
7776
			if(isset($conf["dbPort"])){
7777
 
7778
				#設置密碼
7779
				$conf["db"]["createDatabase"]["dbPort"]=$conf["dbPort"];
7780
 
7781
				}#if end	
7782
 
7783
			$createNewDbResult=db::createDatabase($conf["db"]["createDatabase"]);
7784
			unset($conf["db"]["createDatabase"]);
7785
 
7786
			#如果新資料庫建立失敗
7787
			if($createNewDbResult["status"]=="false"){
7788
 
7789
				#設置錯誤識別
7790
				$result["status"]="false";
7791
 
7792
				#設置錯誤訊息
7793
				$result["error"]=$createNewDbResult;
7794
 
7795
				#回傳結果
7796
				return $result;
7797
 
7798
				}#if end
7799
 
7800
			#將舊的資料庫內容完整複製到新的資料庫
7801
			#函式說明:
7802
			#呼叫shell執行系統命令,並取得回傳的內容.
7803
			#回傳結果:
7804
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
7805
			#$result["error"],錯誤訊息陣列.
7806
			#$result["function"],當前執行的函數名稱.
7807
			#$result["argu"],使用的參數.
7808
			#$result["cmd"],執行的指令內容.
7809
			#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
7810
			#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
7811
			#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
7812
			#$result["running"],是否還在執行.
7813
			#$result["pid"],pid.
7814
			#$result["statusCode"],執行結束後的代碼.
7815
			#$result["escape"],陣列,儲存出新排序過且已經escape過的指令(key為"cmd")與參數(key為"argu").
7816
			#必填參數:
7817
			#$conf["command"],字串,要執行的指令.
7818
			$conf["external::callShell"]["command"]="mysqldump";
7819
			#$conf["fileArgu"],字串,變數__FILE__的內容.
7820
			$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];
7821
			#可省略參數:
7822
			#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
7823
			$conf["external::callShell"]["argu"]=array("-u".$conf["dbAccount"],$formatedPassword,$conf["editedDatabaseName"],"|","mysql","-u".$conf["dbAccount"],$formatedPassword,$conf["newDatabaseName"]);
7824
			#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
7825
			#$conf["arguIsAddr"]=array();
7826
			#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
7827
			#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
7828
			#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
7829
			#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
7830
			#$conf["enablePrintDescription"]="true";
7831
			#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
7832
			#$conf["printDescription"]="";
7833
			#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".如果參數為"< 、<< 、> 、>> 、| 、2>&1"之一則不會過濾.
7834
			#$conf["escapeshellarg"]="false";
7835
			#$conf["thereIsShellVar"],陣列字串,指令搭配的參數"argu",若含有「\'」,則取代為「"」.每個argu參數都要有對應的元素."true"代表要置換.
7836
			#$conf["thereIsShellVar"]=array();
7837
			#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
7838
			#$conf["username"]="";
7839
			#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
7840
			#$conf["password"]="";
7841
			#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
7842
			#$conf["useScript"]="";
7843
			#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
7844
			#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
7845
			#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
7846
			#$conf["inBackGround"]="";
7847
			#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
7848
			#$conf["getErr"]="false";
7849
			#$conf["doNotRun"],字串,"true"代表不執行指令,預設為"false"會執行指令.
7850
			#$conf["doNotRun"]="false";
7851
			#參考資料:
7852
			#exec=>http://php.net/manual/en/function.exec.php
7853
			#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
7854
			#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
7855
			#備註:
7856
			#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
7857
			#若使用的 command、argu 參數,含有 ~ 則會被視為字串,若有需要其於 shell 中代表的家目錄位置,可用 fileAccess::tildeToPath 來進行轉換.
7858
			$callShell=external::callShell($conf["external::callShell"]);
7859
			unset($conf["external::callShell"]);
7860
 
7861
			#若執行shell失敗
7862
			if($callShell["status"]=="false"){
7863
 
7864
				#設置錯誤識別
7865
				$result["status"]="false";
7866
 
7867
				#設置錯誤訊息
7868
				$result["error"]=$callShell;
7869
 
7870
				#回傳結果
7871
				return $result;					
7872
 
7873
				}#if end
7874
 
7875
			#將舊的資料庫丟棄
7876
			#函式說明:
7877
			#移除資料庫,會回傳一個陣列。
7878
			#回傳結果:
7879
			#$result["status"],若成功則爲0,失敗則爲1。
7880
			#$result["error"],錯誤訊息
7881
			#必填參數:
7882
			$conf["db"]["dropDatabase"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
7883
			$conf["db"]["dropDatabase"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
7884
			$conf["db"]["dropDatabase"]["dropedDatabaseName"]=$conf["editedDatabaseName"];#爲要移除的資料庫名稱
7885
			#可省略參數:		
7886
 
7887
			#如果 $conf["dbPassword"] 存在
7888
			if(isset($conf["dbPassword"])){
7889
 
7890
				#設置密碼
7891
				$conf["db"]["dropDatabase"]["dbPassword"]=$conf["dbPassword"];
7892
 
7893
				}#if end
7894
 
7895
			#如果 $conf["dbPort"] 存在
7896
			if(isset($conf["dbPort"])){
7897
 
7898
				#設置密碼
7899
				$conf["db"]["dropDatabase"]["dbPort"]=$conf["dbPort"];
7900
 
7901
				}#if end	
7902
 
7903
			$dropDbResult=db::dropDatabase($conf["db"]["dropDatabase"]);
7904
			unset($conf["db"]["dropDatabase"]);
7905
 
7906
			#如果舊資料庫丟棄失敗
7907
			if($dropDbResult["status"]=="false"){
7908
 
7909
				#設置錯誤識別
7910
				$result["status"]="false";
7911
 
7912
				#設置錯誤訊息
7913
				$result["error"][]="舊名稱資料庫丟棄失敗";
7914
 
7915
				#回傳結果
7916
				return $result;
7917
 
7918
				}#if end				
7919
 
7920
			}#if end
7921
 
7922
		#執行到這邊代表執行正確
7923
		$result["status"]="true";
7924
 
7925
		#回傳結果
7926
		return $result;
7927
 
7928
		}#function editDatabaseName
7929
 
7930
	/*
7931
	#函式說明:
7932
	#更改資料表的名稱. 
7933
	#回傳結果:
7934
	#$result["status"],"true"代表執行成功;若失敗會回傳錯誤訊息.
7935
	#$resuly["function"],當前執行的函數名稱.
7936
	#$result["error"],錯誤訊息.
7937
	#$result["sql"],執行的sql字串.
7938
	#必填參數:
7939
	#$conf["editedDataBaseName"],爲要更改的資料表所屬的資料庫名稱.
7940
	$conf["editedDataBaseName"]="";
7941
	#$conf["editedDataTableName"],爲要更改的資料表原始名稱.
7942
	$conf["editedDataTableName"]="";
7943
	#$conf["newDataTableName"],新的資料庫名稱.
7944
	$conf["newDataTableName"]="";
7945
	#$conf["dbAccount"],爲用於連入資料庫server時要使用的帳號.
7946
	$conf["dbAccount"]=$dbAccount;
7947
	#conf["dbAddress"],爲資料庫server的位置.
7948
	$conf["dbAddress"]=$dbAddress;
7949
	#可省略參數:
7950
	#$conf["dbPassword"],爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
7951
	#$conf["dbPassword"]=$dbPassword;
7952
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,預設為3306.
7953
	#$conf["dbPort"]="3306";
7954
	#參考資料:
7955
	#無.
7956
	#備註:
7957
	#無.
7958
	*/
7959
	public static function editDataTableName($conf){
7960
 
7961
		#初始化要回傳的內容
7962
		$result=array();
7963
 
7964
		#取得當前執行的函數名稱
7965
		$result["function"]=__FUNCTION__;
7966
 
7967
		#如果 $conf 不為陣列
7968
		if(gettype($conf)!="array"){
7969
 
7970
			#設置執行失敗
7971
			$result["status"]="false";
7972
 
7973
			#設置執行錯誤訊息
7974
			$result["error"][]="\$conf變數須為陣列形態";
7975
 
7976
			#如果傳入的參數為 null
7977
			if($conf==null){
7978
 
7979
				#設置執行錯誤訊息
7980
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
7981
 
7982
				}#if end
7983
 
7984
			#回傳結果
7985
			return $result;
7986
 
7987
			}#if end
7988
 
7989
		#函式說明:
7990
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
7991
		#回傳結果:
7992
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
7993
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
7994
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
7995
		#必填參數:
7996
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
7997
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("editedDataBaseName","editedDataTableName","newDataTableName","dbAccount","dbAddress");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
7998
		#可省略參數:
7999
		$conf["variableType"]=array("string","string","string","string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
8000
		#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
8001
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
8002
		unset($conf["variableCheck"]["isexistMuti"]);
8003
 
8004
		#如果 $checkResult["passed"]等於"false".
8005
		if($checkResult["passed"]=="false"){
8006
 
8007
			#代表參數有錯
8008
 
8009
			#設置錯誤識別
8010
			$result["status"]="false";
8011
 
8012
			#設置錯誤訊息
8013
			$result["error"]=$checkResult;
8014
 
8015
			#回傳結果
8016
			return $result;
8017
 
8018
			}#if end
8019
 
8020
		#設定要執行的sql語法
8021
		$sql="rename table ".$conf["editedDataBaseName"].".".$conf["editedDataTableName"]." to ".$conf["editedDataBaseName"].".".$conf["newDataTableName"].";";
8022
 
8023
		#函式說明:
8024
		#執行mysql指令
8025
		#回傳結果::
8026
		#$result["status"],"true"為執行成功;"false"為執行失敗。
8027
		#$result["error"],錯誤訊息的陣列
8028
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
8029
		#$result["queryString"],mysql查詢的語言
8030
		#查詢號的解果,需要解析。
8031
		#必填參數:
8032
		$conf["db"]["execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
8033
		$conf["db"]["execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
8034
		$conf["db"]["execMysqlQuery"]["dbSql"]=$sql;#要執行sql語法
8035
		#可省略參數: 
8036
 
8037
		#如果 $conf["dbPassword"] 有設定
8038
		if(isset($conf["dbPassword"])){
8039
 
8040
			$conf["db"]["execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
8041
 
8042
			}#if end
8043
 
8044
		#如果 $conf["dbPort"] 有設定
8045
		if(isset($conf["dbPort"])){
8046
 
8047
			$conf["db"]["execMysqlQuery"]["dbPort"]=$conf["dbPort"];#爲連線到mysql-Server時要使用的port.
8048
 
8049
			}#if end			
8050
 
8051
		$db["execMysqlQuery"]=db::execMysqlQuery($conf["db"]["execMysqlQuery"]);
8052
		unset($conf["db"]["execMysqlQuery"]);
8053
 
8054
		#如果 $db["execMysqlQuery"]["status"] 等於 "false".
8055
		if($db["execMysqlQuery"]["status"]=="false"){
8056
 
8057
			#設置執行錯誤的識別
8058
			$result["status"]="false";
8059
 
8060
			#設置錯誤訊息
8061
			$result["error"]=$db["execMysqlQuery"]["error"];
8062
 
8063
			#回傳結果
8064
			return $result;
8065
 
8066
			}#if end
8067
 
8068
		#取得執行的sql語法
8069
		$result["sql"]=$db["execMysqlQuery"]["queryString"];
8070
 
8071
		#執行到這邊代表執行成功
8072
		$result["status"]="true";
8073
 
8074
		#回傳結果
8075
		return $result;
8076
 
8077
		}#function editDataTableName end
8078
 
8079
	/*
8080
	#函式說明:
8081
	#移除資料庫,會回傳一個陣列。
8082
	#回傳結果:
8083
	#$result["status"],若成功則爲"true",失敗則爲,"false"
8084
	#$result["error"],錯誤訊息.
8085
	#$result["function"],當前執行的函數名稱.
8086
	#必填參數:
8087
	$conf["dbAddress"]=$dbAddress;#爲mysql-Server的位置
8088
	$conf["dbAccount"]=$dbAccount;#爲用於連入mysql-Server時要使用的帳號
8089
	$conf["dropedDatabaseName"]=$dbName;#爲要移除的資料庫名稱
8090
	#可省略參數:		
8091
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼.
8092
	#$conf["dbPassword"]=$dbPassword;
8093
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,預設為3306.
8094
	#$conf["dbPort"]="3306";
8095
	#參考資料:
8096
	#無.
8097
	#備註:
8098
	#無.
8099
	*/
8100
	public static function dropDatabase($conf){
8101
 
8102
		#初始化要回傳的內容
8103
		$result=array();
8104
 
8105
		#取得當前執行的函數名稱
8106
		$result["function"]=__FUNCTION__;
8107
 
8108
		#如果 $conf 不為陣列
8109
		if(gettype($conf)!="array"){
8110
 
8111
			#設置執行失敗
8112
			$result["status"]="false";
8113
 
8114
			#設置執行錯誤訊息
8115
			$result["error"][]="\$conf變數須為陣列形態";
8116
 
8117
			#如果傳入的參數為 null
8118
			if($conf==null){
8119
 
8120
				#設置執行錯誤訊息
8121
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
8122
 
8123
				}#if end
8124
 
8125
			#回傳結果
8126
			return $result;
8127
 
8128
			}#if end
8129
 
8130
		#函式說明:
8131
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
8132
		#回傳結果:
8133
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
8134
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
8135
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
8136
		#必填參數:
8137
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
8138
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("dbAddress","dbAccount","dropedDatabaseName");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
8139
		#可省略參數:
8140
		$conf["variableCheck"]["isexistMuti"]["variableType"]=array("string","string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
8141
		#$conf["variableCheck"]["isexistMuti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
8142
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
8143
		unset($conf["variableCheck"]["isexistMuti"]);
8144
 
8145
		#如果 $checkResult["passed"] 等於 "fasle"
8146
		if($checkResult["passed"]=="false"){
8147
 
8148
			#設置錯誤識別
8149
			$result["status"]="false";
8150
 
8151
			#設置錯誤訊息
8152
			$result["error"]=$checkResult;
8153
 
8154
			#回傳結果
8155
			return $result;
8156
 
8157
			}#if end
8158
 
8159
		#檢查要移除的資料庫爲系統資料庫
8160
		#函式說明:
8161
		#檢查一個數值是否與陣列裏面的元素相同
8162
		#回傳結果::
8163
		#$result["status"],"true"表示有找到相同的,"false"表示沒有找到相同的。
8164
		#$result["equalVarName"],相等的變數內容。
8165
		#$result["equalVarPosition"],相同的元素內容其位置爲該陣列元素的第幾個位置。
8166
		#必填參數:
8167
		$conf["search"]["getEqualVar"]["conditionElement"]=$conf["dropedDatabaseName"];#條件元素,要等於的元素內容。
8168
		$conf["search"]["getEqualVar"]["compareElements"]=array("information_schema","mysql","performance_schema");#要比對的陣列變數內容。
8169
		$searchResult=search::getEqualVar($conf["search"]["getEqualVar"]);
8170
		unset($conf["search"]["getEqualVar"]);
8171
 
8172
		#如果檢查失敗
8173
		if($searchResult["status"]=="false"){
8174
 
8175
			#設置失敗代碼
8176
			$result["status"]="false";
8177
 
8178
			#設置錯誤訊息
8179
			$result["error"]=$searchResult;
8180
 
8181
			#回傳結果
8182
			return $result;
8183
 
8184
			}#if end
8185
 
8186
		#如果要移除的資料庫爲系統資料庫
8187
		if($searchResult["founded"]=="true"){
8188
 
8189
			#設置失敗代碼
8190
			$result["status"]="false";
8191
 
8192
			#設置錯誤訊息
8193
			$result["error"]="您不能丟棄系統資料庫";
8194
 
8195
			#回傳結果
8196
			return $result;
8197
 
8198
			}#if end
8199
 
8200
		#丟棄資料庫的sql語法
8201
		$sql="DROP DATABASE ".$conf["dropedDatabaseName"];
8202
 
8203
		#執行sql語法
8204
		#函式說明:
8205
		#執行mysql指令
8206
		#回傳結果::
8207
		#$result["status"],"true"為執行成功;"false"為執行失敗。
8208
		#$result["error"],錯誤訊息的陣列
8209
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
8210
		#$result["queryString"],mysql查詢的語言
8211
		#查詢號的解果,需要解析。
8212
		#必填參數:
8213
		$conf["db"]["execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
8214
		$conf["db"]["execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
8215
		$conf["db"]["execMysqlQuery"]["dbSql"]=$sql;#要執行sql語法
8216
		#可省略參數: 
8217
 
8218
		#如果 $conf["dbPassword"] 有設定
8219
		if(isset($conf["dbPassword"])){
8220
 
8221
			$conf["db"]["execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
8222
 
8223
			}#if end
8224
 
8225
 
8226
		#如果 $conf["dbPort"] 有設定
8227
		if(isset($conf["dbPort"])){
8228
 
8229
			$conf["db"]["execMysqlQuery"]["dbPort"]=$conf["dbPort"];#爲連線到mysql-Server時要使用的port,可省略,若省略則代表不使用密碼
8230
 
8231
			}#if end
8232
 
8233
		$db["execMysqlQuery"]=db::execMysqlQuery($conf["db"]["execMysqlQuery"]);
8234
		unset($conf["db"]["execMysqlQuery"]);
8235
 
8236
		#如果 $db["execMysqlQuery"]["status"] 等於 "false"
8237
		if($db["execMysqlQuery"]["status"]=="false"){
8238
 
8239
			#設置錯誤識別
8240
			$result["status"]="false";
8241
 
8242
			#設置錯誤訊息
8243
			$result["error"]=$db["execMysqlQuery"];
8244
 
8245
			#回傳結果
8246
			return $result;
8247
 
8248
			}#if end
8249
 
8250
		#執行到這邊代表執行正常
8251
		$result["status"]="true";
8252
 
8253
		#回傳結果
8254
		return $result;
8255
 
8256
		}#function dropDatabase end
8257
 
8258
	/*
8259
	#函式說明:
8260
	#備份資料庫
8261
	#回傳結果::
8262
	#$result["status"],"true"代表執行正常,"false"代表執行有誤.
8263
	#$result["error"],錯誤訊息陣列.
8264
	#$result["sqlAddress"],sql檔案的位置.
8265
	#$result["function"],當前執行的函數名稱
8266
	#必填參數:
8267
	#$conf["backedDatabaseName"],字串.
8268
	$conf["backedDatabaseName"]=$dbName;#爲要備份的資料庫名稱.
8269
	#$conf["dbAddress"],字串,資料庫的位置.
8270
	$conf["dbAddress"]=$dbAddress;
8271
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號.
8272
	$conf["dbAccount"]=$dbAccount;
8273
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
8274
	$conf["fileArgu"]=__FILE__;
8275
	#可省略參數:
8276
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
8277
	#$conf["dbPassword"]=$dbPassword;
8278
	#$conf["storePlace"],字串,要將輸出檔案儲存到哪邊,預設爲當前目錄.
8279
	#$conf["storePlace"]="";
8280
	#$conf["exportFileName"],字串,要輸出的檔案名稱,預設爲其export
8281
	#$conf["exportFileName"]="export";
8282
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,預設不使用.
8283
	#$conf["dbPort"]="3306";
8284
	#參考資料:
8285
	#無.
8286
	#備註:
8287
	#無.
8288
	*/
8289
	public static function backupDatabase($conf){
8290
 
8291
		#原始語法
8292
		# mysqldump --column-statistics=0 -u account --password=Password -Pport --default-character-set=utf8 --events --routines --single-transaction --skip-lock-tables --quick databaseName > "all.sql"
8293
 
8294
		#初始化要回傳的變數
8295
		$result=array();
8296
 
8297
		#紀錄當前執行的函數名稱
8298
		$result["function"]=__FUNCTION__;
8299
 
8300
		#如果 $conf 不為陣列
8301
		if(gettype($conf)!="array"){
8302
 
8303
			#設置執行失敗
8304
			$result["status"]="false";
8305
 
8306
			#設置執行錯誤訊息
8307
			$result["error"][]="\$conf變數須為陣列形態";
8308
 
8309
			#如果傳入的參數為 null
8310
			if($conf==null){
8311
 
8312
				#設置執行錯誤訊息
8313
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
8314
 
8315
				}#if end
8316
 
8317
			#回傳結果
8318
			return $result;
8319
 
8320
			}#if end
8321
 
8322
		#函式說明:
8323
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
8324
		#回傳結果:
8325
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
8326
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
8327
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
8328
		#必填參數:
8329
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
8330
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("fileArgu","backedDatabaseName","dbAccount","dbAddress");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
8331
		#可省略參數:
8332
		$conf["variableCheck"]["isexistMuti"]["variableType"]=array("string","string","string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
8333
		#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
8334
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
8335
		unset($conf["variableCheck"]["isexistMuti"]);
8336
 
8337
		#如果檢查失敗
8338
		if($checkResult["status"]=="false"){
8339
 
8340
			#設置錯誤識別
8341
			$result["status"]="false";
8342
 
8343
			#設置錯誤訊息
8344
			$result["error"]=$checkResult;
8345
 
8346
			#回傳錯誤訊息
8347
			return $result;
8348
 
8349
			}#if end
8350
 
8351
		#如果檢查不通過
8352
		if($checkResult["passed"]=="false"){
8353
 
8354
			#設置錯誤識別
8355
			$result["status"]="false";
8356
 
8357
			#設置錯誤訊息
8358
			$result["error"]=$checkResult;
8359
 
8360
			#回傳錯誤訊息
8361
			return $result;
8362
 
8363
			}#if end
8364
 
8365
		#檢查要備份的資料庫是否爲系統資料庫
8366
		#函式說明:
8367
		#檢查一個數值是否與陣列裏面的元素相同
8368
		#回傳結果::
8369
		#$result["status"],"true"表示有找到相同的,"false"表示沒有找到相同的。
8370
		#$result["error"],錯誤訊息
8371
		#$result["equalVarName"],相等的變數內容。
8372
		#$result["equalVarPosition"],相同的元素內容其位置爲該陣列元素的第幾個位置。
8373
		#必填參數:
8374
		$conf["search"]["getEqualVar"]["conditionElement"]=$conf["backedDatabaseName"];#條件元素,要等於的元素內容。
8375
		$conf["search"]["getEqualVar"]["compareElements"]=array("information_schema","mysql","performance_schema");#要比對的陣列變數內容。
8376
		$searchResult=search::getEqualVar($conf["search"]["getEqualVar"]);
8377
		unset($conf["search"]["getEqualVar"]);
8378
 
8379
		#如果檢查失敗
8380
		if($searchResult["status"]=="false"){
8381
 
8382
			#設置錯誤識別
8383
			$result["status"]="false";
8384
 
8385
			#設置錯誤訊息
8386
			$result["error"]=$searchResult;
8387
 
8388
			#回傳結果
8389
			return $result;
8390
 
8391
			}#if end
8392
 
8393
		#如果要備份的資料庫爲系統資料庫
8394
		if($searchResult["founded"]=="true"){
8395
 
8396
			#設置錯誤識別
8397
			$result["status"]="false";
8398
 
8399
			#設置錯誤訊息
8400
			$result["error"]="您不能備份系統資料庫";
8401
 
8402
			#回傳結果
8403
			return $result;
8404
 
8405
			}#if end
8406
 
8407
		#初始化連線的密碼
8408
		$dbPassword="";
8409
 
8410
		#如果 $conf["dbPassword"] 有設置
8411
		if(isset($conf["dbPassword"])){
8412
 
8413
			#令存密碼
8414
			$dbPassword=$conf["dbPassword"];
8415
 
8416
			#設置其連線密碼
8417
			$conf["dbPassword"]="-p".$conf["dbPassword"];
8418
 
8419
			}#if end
8420
 
8421
		#反之
8422
		else{
8423
 
8424
			#設爲空值
8425
			$conf["dbPassword"]="";
8426
 
8427
			}#else end
8428
 
8429
		#如果 $conf["storePlace"] 沒有設置
8430
		if(!isset($conf["storePlace"])){
8431
 
8432
			#將其設爲空值
8433
			$conf["storePlace"]="";
8434
 
8435
			}#if end
8436
 
8437
		#反之有設定且結尾不為 "/"
8438
		else if($conf["storePlace"][strlen($conf["storePlace"])-1]!=="/"){
8439
 
8440
			#在其路徑後方加上 /
8441
			$conf["storePlace"]=$conf["storePlace"]."/";
8442
 
8443
			}#if end
8444
 
8445
		#如果 $conf["exportFileName"] 沒有設置
8446
		if(!isset($conf["exportFileName"])){
8447
 
8448
			#設置預設名稱
8449
			$conf["exportFileName"]="export.sql";
8450
 
8451
			}#if end
8452
 
8453
		#反之有設定
8454
		else{
8455
 
8456
			#名稱結尾加上 .sql
8457
			$conf["exportFileName"]=$conf["exportFileName"].".sql";
8458
 
8459
			}#else end
8460
 
8461
		#檢查資料庫是否存在
8462
		#函式說明:
8463
		#檢查該資料庫是否存在,結果會回傳一個陣列。
8464
		#回傳結果:
8465
		#$result["status"],設置執行錯誤.
8466
		#$result["error"],錯誤訊息.
8467
		#$result["exist"],有為"true",無為"false".
8468
		#$result["function"],當前執行的函數名稱.
8469
		#必填的參數
8470
		$conf["db::checkDataBaseExists"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
8471
		$conf["db::checkDataBaseExists"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
8472
		$conf["db::checkDataBaseExists"]["checkDataBaseName"]=$conf["backedDatabaseName"];#爲要檢查是否存在的資料庫名稱
8473
		#可省略參數
8474
 
8475
		#如果密碼不為""
8476
		if($dbPassword!=""){
8477
 
8478
			$conf["db::checkDataBaseExists"]["dbPassword"]=$dbPassword;#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
8479
 
8480
			}#if end
8481
 
8482
		#如果有設置 $conf["dnPort"]
8483
		if(isset($conf["dbPort"])){
8484
 
8485
			$conf["db::checkDataBaseExists"]["dbPort"]=$conf["dbPort"];
8486
 
8487
			}#if end
8488
 
8489
		$checkDataBaseExists=db::checkDataBaseExists($conf["db::checkDataBaseExists"]);
8490
		unset($conf["db::checkDataBaseExists"]);
8491
 
8492
		#如果檢查資料庫是否存在失敗
8493
		if($checkDataBaseExists["status"]=="false"){
8494
 
8495
			#設置錯誤識別
8496
			$result["status"]="false";
8497
 
8498
			#設置錯誤訊息
8499
			$result["error"]=$checkDataBaseExists;
8500
 
8501
			#回傳結果
8502
			return $result;
8503
 
8504
			}#if end
8505
 
8506
		#如果資料庫不存在
8507
		if($checkDataBaseExists["exist"]=="false"){
8508
 
8509
			#設置錯誤識別
8510
			$result["status"]="false";
8511
 
8512
			#設置錯誤訊息
8513
			$result["error"]=$checkDataBaseExists;
8514
 
8515
			#回傳結果
8516
			return $result;
8517
 
8518
			}#if end
8519
 
8520
		#若有設置port
8521
		if(isset($conf["dbPort"])){
8522
 
8523
			#指定port
8524
			$port="-P".$conf["dbPort"];
8525
 
8526
			}#if end
8527
 
8528
		#反之
8529
		else{
8530
			#設置為空
8531
			$port="";
8532
 
8533
			}#else end
8534
 
8535
		#透過以下指令判斷是否支援 --column-statistics 參數
8536
		#mysqldump --help | grep "\--column-statistics" | wc -l
8537
		#函式說明:
8538
		#呼叫shell執行系統命令,並取得回傳的內容.
8539
		#回傳結果:
8540
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
8541
		#$result["error"],錯誤訊息陣列.
8542
		#$result["function"],當前執行的函數名稱.
8543
		#$result["argu"],使用的參數.
8544
		#$result["cmd"],執行的指令內容.
8545
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
8546
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
8547
		#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
8548
		#$result["running"],是否還在執行.
8549
		#$result["pid"],pid.
8550
		#$result["statusCode"],執行結束後的代碼.
8551
		#必填參數:
8552
		#$conf["command"],字串,要執行的指令與.
8553
		$conf["external::callShell"]["command"]="mysqldump";
8554
		#$conf["fileArgu"],字串,變數__FILE__的內容.
8555
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];
8556
		#可省略參數:
8557
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
8558
		$conf["external::callShell"]["argu"]=array("--help","|","grep","\--column-statistics","|","wc","-l");
8559
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
8560
		#$conf["arguIsAddr"]=array();
8561
		#$conf["plainArgu"],字串陣列,哪幾個參數不要加上"".
8562
		#$conf["external::callShell"]["plainArgu"]=array("true","true","true","false","true","true","true");
8563
		#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
8564
		#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
8565
		#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
8566
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
8567
		#$conf["enablePrintDescription"]="true";
8568
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
8569
		#$conf["printDescription"]="";
8570
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".
8571
		$conf["external::callShell"]["escapeshellarg"]="true";
8572
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
8573
		#$conf["username"]="";
8574
		#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
8575
		#$conf["password"]="";
8576
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
8577
		#$conf["useScript"]="";
8578
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
8579
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
8580
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
8581
		#$conf["inBackGround"]="";
8582
		#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
8583
		#$conf["getErr"]="false";
8584
		#備註:
8585
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
8586
		#參考資料:
8587
		#exec=>http://php.net/manual/en/function.exec.php
8588
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
8589
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
8590
		$callShell=external::callShell($conf["external::callShell"]);
8591
		unset($conf["external::callShell"]);
8592
 
8593
		#如果執行shell失敗
8594
		if($callShell["status"]==="false"){
8595
 
8596
			#設置錯誤識別
8597
			$result["status"]="false";
8598
 
8599
			#設置錯誤訊息
8600
			$result["error"]=$callShell;
8601
 
8602
			#回傳結果
8603
			return $result;
8604
 
8605
			}#if end
8606
 
8607
		#初始化參數
8608
		$conf["external::callShell"]["argu"]=array();
8609
 
8610
		#如果支援 --column-statistics 參數
8611
		if($callShell["output"][0]==="1"){
8612
 
8613
			#增加參數
8614
			$conf["external::callShell"]["argu"][]="--column-statistics=0";
8615
 
8616
			}#if end
8617
 
8618
		#輸出資料庫sql檔案		
8619
		#函式說明:
8620
		#呼叫shell執行系統命令,並取得回傳的內容.
8621
		#回傳結果:
8622
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
8623
		#$result["error"],錯誤訊息陣列.
8624
		#$result["function"],當前執行的函數名稱.
8625
		#$result["argu"],使用的參數.
8626
		#$result["cmd"],執行的指令內容.
8627
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
8628
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
8629
		#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
8630
		#$result["running"],是否還在執行.
8631
		#$result["pid"],pid.
8632
		#$result["statusCode"],執行結束後的代碼.
8633
		#必填參數:
8634
		#$conf["command"],字串,要執行的指令與.
8635
		$conf["external::callShell"]["command"]="mysqldump";
8636
		#$conf["fileArgu"],字串,變數__FILE__的內容.
8637
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];
8638
		#可省略參數:
8639
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
8640
		$conf["external::callShell"]["argu"][]="-u";
8641
		$conf["external::callShell"]["argu"][]=$conf["dbAccount"];
8642
		$conf["external::callShell"]["argu"][]=$conf["dbPassword"];
8643
		$conf["external::callShell"]["argu"][]="-h";
8644
		$conf["external::callShell"]["argu"][]=$conf["dbAddress"];
8645
 
8646
		#如果有指定 port
8647
		if($port!==""){
8648
 
8649
			#設置port
8650
			$conf["external::callShell"]["argu"][]=$port;
8651
 
8652
			}#if end
8653
 
8654
		$conf["external::callShell"]["argu"][]="--default-character-set=utf8";
8655
		$conf["external::callShell"]["argu"][]="--events";
8656
		$conf["external::callShell"]["argu"][]="--routines";
8657
		$conf["external::callShell"]["argu"][]="--single-transaction";
8658
		$conf["external::callShell"]["argu"][]="--skip-lock-tables";
8659
		$conf["external::callShell"]["argu"][]="--quick";
8660
		$conf["external::callShell"]["argu"][]=$conf["backedDatabaseName"];
8661
		$conf["external::callShell"]["argu"][]=">";
8662
		$conf["external::callShell"]["argu"][]=$conf["storePlace"].$conf["exportFileName"];
8663
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
8664
		#$conf["arguIsAddr"]=array();
8665
		#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
8666
		#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
8667
		#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
8668
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
8669
		#$conf["enablePrintDescription"]="true";
8670
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
8671
		#$conf["printDescription"]="";
8672
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".
8673
		$conf["external::callShell"]["escapeshellarg"]="true";
8674
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
8675
		#$conf["username"]="";
8676
		#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
8677
		#$conf["password"]="";
8678
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
8679
		#$conf["useScript"]="";
8680
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
8681
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
8682
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
8683
		#$conf["inBackGround"]="";
8684
		#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
8685
		#$conf["getErr"]="false";
8686
		#備註:
8687
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
8688
		#參考資料:
8689
		#exec=>http://php.net/manual/en/function.exec.php
8690
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
8691
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
8692
		$callShell=external::callShell($conf["external::callShell"]);
8693
		unset($conf["external::callShell"]);
8694
 
8695
		#如果執行shell失敗
8696
		if($callShell["status"]==="false"){
8697
 
8698
			#設置錯誤識別
8699
			$result["status"]="false";
8700
 
8701
			#設置錯誤訊息
8702
			$result["error"]=$callShell;
8703
 
8704
			#回傳結果
8705
			return $result;
8706
 
8707
			}#if end
8708
 
8709
		#設置產生的sql檔案位置
8710
		$result["sqlAddress"]=$conf["storePlace"].$conf["exportFileName"];
8711
 
8712
		#設置執行成功
8713
		$result["status"]="true";
8714
 
8715
		#回傳結果
8716
		return $result;
8717
 
8718
		}#function backupDatabase end
8719
 
8720
	/*
8721
	#函式說明:
8722
	#移除表,會回傳一個陣列。
8723
	#回傳結果:
8724
	#$result["status"],若成功則爲"true",失敗則爲,"false"
8725
	#$result["error"],錯誤訊息.
8726
	#$result["function"],當前執行的函數名稱.
8727
	#必填參數:
8728
	$conf["dbAddress"],字串,爲mysql-Server的位置
8729
	$conf["dbAddress"]=$dbAddress;
8730
	$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號
8731
	$conf["dbAccount"]=$dbAccount;
8732
	$conf["selectedDatabaseName"],字串,爲要移除的資料表位於哪個資料庫
8733
	$conf["selectedDatabaseName"]=$dbName;
8734
	$conf["dropedDataTableName"],字串,爲要移除的資料表名稱
8735
	$conf["dropedDataTableName"]=$tableName;#爲要移除的資料表名稱
8736
	#可省略參數:		
8737
	#$conf["dbPassword"],字串.爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
8738
	#$conf["dbPassword"]=$dbPassword;
8739
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,預設為3306.
8740
	#$conf["dbPort"]="3306";
8741
	#參考資料:
8742
	#無.
8743
	#備註:
8744
	#無.
8745
	*/
8746
	public static function dropDataTable($conf){
8747
 
8748
		#初始化要回傳的內容
8749
		$result=array();
8750
 
8751
		#取得當前執行的函數名稱
8752
		$result["function"]=__FUNCTION__;
8753
 
8754
		#如果 $conf 不為陣列
8755
		if(gettype($conf)!="array"){
8756
 
8757
			#設置執行失敗
8758
			$result["status"]="false";
8759
 
8760
			#設置執行錯誤訊息
8761
			$result["error"][]="\$conf變數須為陣列形態";
8762
 
8763
			#如果傳入的參數為 null
8764
			if($conf==null){
8765
 
8766
				#設置執行錯誤訊息
8767
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
8768
 
8769
				}#if end
8770
 
8771
			#回傳結果
8772
			return $result;
8773
 
8774
			}#if end
8775
 
8776
		#函式說明:
8777
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
8778
		#回傳結果:
8779
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
8780
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
8781
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
8782
		#必填參數:
8783
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
8784
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("dbAddress","dbAccount","selectedDatabaseName","dropedDataTableName");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
8785
		#可省略參數:
8786
		$conf["variableType"]=array("string","string","string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
8787
		#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
8788
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
8789
		unset($conf["variableCheck"]["isexistMuti"]);
8790
 
8791
		#如果檢查不正常
8792
		if($checkResult["status"]=="false"){
8793
 
8794
			#設置執行錯誤
8795
			$result["status"]="fasle";
8796
 
8797
			#設置錯誤訊息
8798
			$result["error"]=$checkResult;
8799
 
8800
			#回傳結果:
8801
			return $result;
8802
 
8803
			}#if end
8804
 
8805
		#如果檢查不通過
8806
		if($checkResult["passed"]=="false"){
8807
 
8808
			#設置執行錯誤
8809
			$result["status"]="fasle";
8810
 
8811
			#設置錯誤訊息
8812
			$result["error"]=$checkResult;
8813
 
8814
			#回傳結果:
8815
			return $result;
8816
 
8817
			}#if end
8818
 
8819
		#建立移除資料表的sql語言
8820
		$sql="drop table ".$conf["selectedDatabaseName"].".".$conf["dropedDataTableName"].";";
8821
 
8822
		#函式說明:
8823
		#執行mysql查詢的指令
8824
		#回傳結果::
8825
		#$result["status"],"true"為執行成功;"false"為執行失敗。
8826
		#$result["error"],錯誤訊息的陣列
8827
		#查詢號的解果,需要解析。
8828
		#必填參數:
8829
		$conf["db"]["execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
8830
		$conf["db"]["execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
8831
		$conf["db"]["execMysqlQuery"]["dbSql"]=$sql;#要執行sql語法
8832
		#可省略參數: 
8833
 
8834
		#如果有設定密碼
8835
		if(isset($conf["dbPassword"])){
8836
 
8837
			$conf["db"]["execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
8838
 
8839
			}#if end
8840
 
8841
		#如果有設定 $conf["dbPort"]
8842
		if(isset($conf["dbPort"])){
8843
 
8844
			#設置 $conf["dbPort"]
8845
			$conf["db"]["execMysqlQuery"]["dbPort"]=$conf["dbPort"];
8846
 
8847
			}#if end
8848
 
8849
		$queryResult=db::execMysqlQuery($conf["db"]["execMysqlQuery"]);
8850
		unset($conf["db"]["execMysqlQuery"]);
8851
 
8852
		#如果移除資料表失敗
8853
		if($queryResult["status"]=="false"){
8854
 
8855
			#設置錯誤識別
8856
			$result["status"]="false";
8857
 
8858
			#設置錯誤訊息
8859
			$result["error"]=$queryResult["error"];
8860
 
8861
			#回傳結果
8862
			return $result;
8863
 
8864
			}#if end
8865
 
8866
		#設置執行成功的訊息
8867
		$result["status"]="true";
8868
 
8869
		#回傳結果
8870
		return $result;
8871
 
8872
		}#funcotion dropDataTable end
8873
 
8874
	/*
8875
	#函式說明:
8876
	#查詢所有的資料庫列表,會回傳查詢的結果
8877
	#回傳結果:
8878
	#$result["status"],執行是否正常,"true"為正常,"fasle"為不正常
8879
	#$result["error"],爲錯誤訊息
8880
	#$result["function"],當前執行的函數名稱
8881
	#$result["dbName"] 爲查詢的資料庫名稱陣列,第一筆資料庫名稱爲$result["dbName"][0],第二筆資料庫名稱爲$result["dbName"][1],其餘以此類推。
8882
	#$result["dbCounts"] 爲資料庫的總筆數	
8883
	#必填參數:
8884
	$conf["dbAddress"],字串,爲mysql-Server的位置.
8885
	$conf["dbAddress"]=$dbAddress;
8886
	$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號
8887
	$conf["dbAccount"]=$dbAccount;
8888
	#可省略參數:
8889
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
8890
	#$conf["dbPassword"]=$dbPassword;
8891
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,預設為3306.
8892
	#$conf["dbPort"]="3306";
8893
	#參考資料:
8894
	#無.
8895
	#備註:
8896
	#無.
8897
	*/
8898
	public static function getDataBaseList($conf){
8899
 
8900
		#初始化要回傳的內容
8901
		$result=array();
8902
 
8903
		#取得當前執行的函數名稱
8904
		$result["function"]=__FUNCTION__;
8905
 
8906
		#如果 $conf 不為陣列
8907
		if(gettype($conf)!="array"){
8908
 
8909
			#設置執行失敗
8910
			$result["status"]="false";
8911
 
8912
			#設置執行錯誤訊息
8913
			$result["error"][]="\$conf變數須為陣列形態";
8914
 
8915
			#如果傳入的參數為 null
8916
			if($conf==null){
8917
 
8918
				#設置執行錯誤訊息
8919
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
8920
 
8921
				}#if end
8922
 
8923
			#回傳結果
8924
			return $result;
8925
 
8926
			}#if end
8927
 
8928
		#檢查參數
8929
		#函式說明:
8930
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
8931
		#回傳結果:
8932
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
8933
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
8934
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
8935
		#必填參數:
8936
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
8937
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("dbAddress","dbAccount");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
8938
		#可省略參數:
8939
		#$conf["variableType"]=array();#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
8940
		#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
8941
		#備註:
8942
		#功能與checkExistAndType函式相同
8943
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
8944
		unset($conf["variableCheck"]["isexistMuti"]);
8945
 
8946
		#如果 $checkResult["passed"]等於"fasle"
8947
		if($checkResult["passed"]=="fasle"){
8948
 
8949
			#設置錯誤識別
8950
			$result["status"]="fasle";
8951
 
8952
			#設置錯誤訊息
8953
			$result["error"]=$checkResult;
8954
 
8955
			#回傳結果
8956
			return $result;
8957
 
8958
			}#if end 
8959
 
8960
		#連線到mysql-server
8961
		#函式說明:
8962
		#連線到mysql-server,會回傳一個陣列
8963
		#回傳結果:
8964
		#$result["status"],若連線成功則爲"true",連線失敗則爲"false"。
8965
		#$result["connectInformation"],爲回傳的mysql連線資訊。
8966
		#$result["error"],爲錯誤訊息陣列
8967
		#必填參數:
8968
		$conf["db"]["mysqlConnect"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置。
8969
		$conf["db"]["mysqlConnect"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號。
8970
		#可省略參數:
8971
 
8972
		#如果有設置 $conf["dbPassword"]
8973
		if(isset($conf["dbPassword"])){
8974
 
8975
			$conf["db"]["mysqlConnect"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼。
8976
 
8977
			}#if end
8978
 
8979
		#如果有設置 $conf["dbPort"]
8980
		if(isset($conf["dbPort"])){
8981
 
8982
			$conf["db"]["mysqlConnect"]["dbPort"]=$conf["dbPort"];#連線時用的port.
8983
 
8984
			}#if end
8985
 
8986
		$con=db::mysqlConnect($conf["db"]["mysqlConnect"]);
8987
		unset($conf["db"]["mysqlConnect"]);
8988
 
8989
		#如果 $con["status"] 等於 "fasle"
8990
		if($con["status"]=="fasle"){
8991
 
8992
			#設置錯誤識別
8993
			$result["status"]="false";
8994
 
8995
			#設置錯誤訊息
8996
			$result["error"]=$con;
8997
 
8998
			#回傳結果
8999
			return $result;
9000
 
9001
			}#if end
9002
 
9003
		#執行列出資料庫列表的SQL語法
9004
		#函式說明:
9005
		#執行mysql指令
9006
		#回傳結果::
9007
		#$result["status"],"true"為執行成功;"false"為執行失敗。
9008
		#$result["error"],錯誤訊息的陣列
9009
		#$result["function"],當前執行的涵式
9010
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
9011
		#$result["queryString"],mysql查詢的語言
9012
		#查詢號的解果,需要解析。
9013
		#必填參數:
9014
		$conf["db::execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
9015
		$conf["db::execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
9016
		$conf["db::execMysqlQuery"]["dbSql"]="show databases;";#要執行sql語法
9017
		#可省略參數: 
9018
 
9019
		#如果存在 $conf["dbPassword"]
9020
		if(isset($conf["dbPassword"])){
9021
 
9022
			$conf["db::execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
9023
 
9024
			}#if end
9025
 
9026
		#如果存在 $conf["dbPort"]
9027
		if(isset($conf["dbPort"])){
9028
 
9029
			$conf["db::execMysqlQuery"]["dbPort"]=$conf["dbPort"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
9030
 
9031
			}#if end
9032
 
9033
		$execMysqlQuery=db::execMysqlQuery($conf["db::execMysqlQuery"]);
9034
		unset($conf["db::execMysqlQuery"]);
9035
 
9036
		#如果執行SQL語法失敗
9037
		if($execMysqlQuery["status"]=="false"){
9038
 
9039
			#設置錯誤識別
9040
			$result["status"]="false";
9041
 
9042
			#設置錯誤訊息
9043
			$result["error"]=$execMysqlQuery;
9044
 
9045
			#回傳結果
9046
			return $result;
9047
 
9048
			}#if end
9049
 
9050
		#設定 $i 的初始值
9051
		$times=0;
9052
 
9053
		#逐筆解析內容
9054
		while($row=mysqli_fetch_assoc($execMysqlQuery["queryResource"])) {
9055
 
9056
			#將結果存進 $fetchResult[$times]	    	
9057
			$fetchResult[$times]= $row['Database'];
9058
 
9059
			#$times + 1 (計數用)
9060
			$times++;
9061
 
9062
			}#while end
9063
 
9064
		#取得每筆資料內容(資料庫的名稱)
9065
		$result["dbName"]=$fetchResult;
9066
 
9067
		#取得總共的資料筆數
9068
		$result["dbCounts"]=$times;
9069
 
9070
		#執行到這邊代表執行成功
9071
		$result["status"]="true";
9072
 
9073
		#回傳查詢的結果 $result
9074
		return $result;
9075
 
9076
		}#function getDataBaseList end
9077
 
9078
	/*
9079
	#函式說明:
9080
	#查詢特定資料庫裡的資料表列表,會回傳查詢的結果
9081
	#回傳結果:
9082
	#$result["status"],執行是否成功,"true"代表執行成功;"false"代表執行失敗。
9083
	#$result["error"],執行錯誤的訊息.
9084
	#$result["function"],當前執行的函式名稱.
9085
	#$result["connectInformation"],爲回傳的mysql連線資訊。
9086
	#$result["tableName"] 爲查詢的資料庫名稱陣列,
9087
		#第一筆資料庫名稱爲$result["tableName"][0],
9088
		#第二筆資料庫名稱爲$result["tableName"][1],
9089
		#其餘以此類推。
9090
	#$result["dataCounts"] 爲資料表的總筆數
9091
	#必填參數:
9092
	$conf["dbAddress"],字串,爲mysql-Server的位置
9093
	$conf["dbAddress"]=$dbAddress;
9094
	$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號
9095
	$conf["dbAccount"]=$dbAccount;
9096
	$conf["selectedDataBaseName"],字串,爲指定的資料庫名稱
9097
	$conf["selectedDataBaseName"]=$dbName;
9098
	#可省略參數:
9099
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
9100
	#$conf["dbPassword"]=$dbPassword;
9101
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,預設為3306.
9102
	#$conf["dbPort"]="3306";
9103
	#參考資料:
9104
	#無.
9105
	#備註:
9106
	#原始語法,show tables FROM databaseName,代表檢視databaseName裡面的資料表清單。
9107
	*/
9108
	public static function getDataTableList($conf){
9109
 
9110
		#初始化要回傳的內容
9111
		$result=array();
9112
 
9113
		#取得當前執行的函數名稱
9114
		$result["function"]=__FUNCTION__;
9115
 
9116
		#如果 $conf 不為陣列
9117
		if(gettype($conf)!="array"){
9118
 
9119
			#設置執行失敗
9120
			$result["status"]="false";
9121
 
9122
			#設置執行錯誤訊息
9123
			$result["error"][]="\$conf變數須為陣列形態";
9124
 
9125
			#如果傳入的參數為 null
9126
			if($conf==null){
9127
 
9128
				#設置執行錯誤訊息
9129
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
9130
 
9131
				}#if end
9132
 
9133
			#回傳結果
9134
			return $result;
9135
 
9136
			}#if end
9137
 
9138
		#函式說明:
9139
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
9140
		#回傳結果:
9141
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
9142
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
9143
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
9144
		#必填參數:
9145
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
9146
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("dbAddress","dbAccount","selectedDataBaseName");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
9147
		#可省略參數:
9148
		#$conf["variableType"]=array();#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
9149
		#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
9150
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
9151
		unset($conf["variableCheck"]);
9152
 
9153
		#如果檢查失敗
9154
		if($checkResult["status"]=="false"){
9155
 
9156
			#設置錯誤訊息識別
9157
			$result["status"]="fasle";
9158
 
9159
			#設置錯誤訊息
9160
			$result["error"]=$checkResult;
9161
 
9162
			#回傳錯誤結果
9163
			return $result;
9164
 
9165
			}#if end
9166
 
9167
		#如果檢查不通過
9168
		if($checkResult["passed"]=="false"){
9169
 
9170
			#設置錯誤訊息識別
9171
			$result["status"]="fasle";
9172
 
9173
			#設置錯誤訊息
9174
			$result["error"]=$checkResult;
9175
 
9176
			#回傳錯誤結果
9177
			return $result;
9178
 
9179
			}#if end
9180
 
9181
		#要執行的 sql 語句
9182
		$sql="show tables FROM ".$conf["selectedDataBaseName"].";";
9183
 
9184
		#函式說明:
9185
		#執行mysql指令
9186
		#回傳結果::
9187
		#$result["status"],"true"為執行成功;"false"為執行失敗。
9188
		#$result["error"],錯誤訊息的陣列
9189
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
9190
		#$result["queryString"],mysql查詢的語言
9191
		#查詢號的解果,需要解析。
9192
		#必填參數:
9193
		$conf["db.execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
9194
		$conf["db.execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
9195
		$conf["db.execMysqlQuery"]["dbSql"]=$sql;#要執行sql語法
9196
		#可省略參數: 
9197
 
9198
		#如果 $conf["dbPassword"] 有設定
9199
		if(isset($conf["dbPassword"])){
9200
 
9201
			#$conf["db.execMysqlQuery"]["dbPassword"]=$dbPassword;#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
9202
			$conf["db.execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼。
9203
 
9204
			}#if end
9205
 
9206
		#如果 $conf["dbPort"] 有設定
9207
		if(isset($conf["dbPort"])){
9208
 
9209
			#設置 dbPort
9210
			$conf["db.execMysqlQuery"]["dbPort"]=$conf["dbPort"];
9211
 
9212
			}#if end
9213
 
9214
		$queryResult=db::execMysqlQuery($conf["db.execMysqlQuery"]);
9215
		unset($conf["db.execMysqlQuery"]);
9216
 
9217
		#如果執行sql語法失敗
9218
		if($queryResult["status"]=="false"){
9219
 
9220
			#設置執行不正常
9221
			$result["status"]="false";
9222
 
9223
			#設置錯誤訊息
9224
			$result["error"]=$queryResult;
9225
 
9226
			#回傳結果
9227
			return $result;
9228
 
9229
			}#if end
9230
 
9231
		#將查詢的結果放進$queryResult裏面
9232
		$queryResult=$queryResult["queryResource"];
9233
 
9234
		#debug
9235
		#var_dump($queryResult);
9236
 
9237
		#設定 $times 的初始值
9238
		$times=0;
9239
 
9240
		#初始化解析的內容儲存的地方
9241
		$fetchResult=array();
9242
 
9243
		#逐筆解析內容
9244
		while ($row = mysqli_fetch_assoc($queryResult)) {
9245
 
9246
			#將結果存進 $result[$i]		    	
9247
			$fetchResult[$times]= $row["Tables_in_".$conf["selectedDataBaseName"]];
9248
 
9249
			#$times + 1 (計數用)
9250
			$times++;
9251
 
9252
			#debug
9253
			#var_dump($row);
9254
 
9255
			}#while end
9256
 
9257
		#取得每筆資料內容(資料表的名稱)
9258
		$result["tableName"]=$fetchResult;
9259
 
9260
		#取得總共的資料筆數
9261
		$result["dataCounts"]=$times;
9262
 
9263
		#設置執行成功的識別
9264
		$result["status"]="true";
9265
 
9266
		#回傳查詢的結果 $result
9267
		return $result;
9268
 
9269
		}#function getDataTableList end
9270
 
9271
	/*
9272
	#函式說明:
9273
	#取得資料表所有欄位的詳細資訊
9274
	#回傳的內容:
9275
	#$result["status"],執行結果,"true"代表執行成功;"false"代表執行失敗
9276
	#$result["error"],錯誤訊息陣列
9277
	#$result["function"],當前執行的函數名稱.
9278
	#$result["sql"],執行的sql語法
9279
	#$result["oriInput"],原始的資料表欄位資訊
9280
	#$result["everyLine"],逐行的欄位資訊
9281
	#$result["tableName"],當前查詢的資料表名稱
9282
	#$result["engine"],資料表使用的儲存引擎
9283
	#$result["charset"],資料表預設的編碼
9284
	#$result["columnName"][$i],各欄位的名稱陣列,$i爲1開始的數字,也可以使用欄位的名稱。
9285
	#$result["columnVarTypeAndLengthLimit"][$i],各欄位儲存的變數形態與長度限制,$i爲1開始的數字,也可以使用欄位的名稱。
9286
	#$result["columnVarType"][$i],各欄位變數儲存的型態,$i爲1開始的數字,也可以使用欄位的名稱.
9287
	#$result["columnVarLengthLimit"][$i],個欄位變數的長度限制,若不存在其限制,則為"",$i爲1開始的數字,也可以使用欄位的名稱.
9288
	#$result["columnNotNull"][$i],各欄位是否不可爲null,"true"爲不可以爲null;"false"爲可爲"null",$i爲1開始的數字,也可以使用欄位的名稱。
9289
	#$result["columnAutoIncrement"][$i],各欄位是否會自動加1,"true"爲會;"false"爲不會,$i爲1開始的數字,也可以使用欄位的名稱。
9290
	#$result["columnDefault"][$i],各欄位的預設內容,若無則爲"沒有指定",$i爲1開始的數字,也可以使用欄位的名稱。
9291
	#$result["columnOnUpdateAction"][$i],當資料有修改時,該欄位的內容要怎麼因應,$i爲1開始的數字,也可以使用欄位的名稱。
9292
	#$result["columnCharacterSet"][$i],各欄位使用的CharacterSet,$i爲1開始的數字,也可以使用欄位的名稱。
9293
	#$result["columnCollate"][$i],各欄位使用的Collate,$i爲1開始的數字,也可以使用欄位的名稱。
9294
	#$result["key"]["exist"],該資料表是否有索引鍵,"true"代表有;"false"代表沒有。
9295
	#$result["key"][$j],該資料表的索引鍵陣列,$j爲0開始的數字,也可以使用欄位的名稱。
9296
	#$result["keyConstraintName"][$j],該資料表用於識別索引鍵的CONSTRAINT名稱陣列,$j爲1開始的數字,也可以使用欄位的名稱。
9297
	#$result["primaryKey"],該資料表的主鍵
9298
	#$result["foreignKey"]["exist"],該資料表是否有foreign key,"true"代表有;"fasle"代表沒有。
9299
	#$result["foreignKey"]["constraintName"][$k],用來識別外鍵的CONSTRAINT名稱陣列,$k爲1開始的數字,也可以使用欄位的名稱。
9300
	#$result["foreignKey"]["columnName"][$k],外鍵的名稱陣列,$k爲1開始的數字,也可以使用欄位的名稱。
9301
	#$result["foreignKey"]["referencesTable"][$k],外鍵參照的欄位,$k爲1開始的數字,,也可用欄位的名稱來找value.
9302
	#$result["foreignKey"]["referencesColumn"][$k],外鍵參照的欄位屬於哪個資料表,$k爲1開始的數字,也可用欄位的名稱來找value.
9303
	#$result["foreignKey"]["onUpdateAction"][$i],當參照的欄位資料更新時,會怎麼同步,$i爲1開始的數字,也可用欄位的名稱來找value.
9304
	#$result["foreignKey"]["onDeleteAction"][$i],當參照的欄位資料移除時,會怎麼同步,$i爲1開始的數字,也可用欄位的名稱來找value.
9305
	#必填參數:
9306
	#$conf["dbAddress"],字串,資料庫的網路位置.
9307
	$conf["dbAddress"]=$dbAddress;
9308
	#$conf["dbAccount"],字串,連線到資料庫要用的帳號.
9309
	$conf["dbAccount"]=$dbAccount;
9310
	#$conf["selectedDataBase"],字串,連線到資料庫要選擇的資料庫.
9311
	$conf["selectedDataBase"]=$dbName;
9312
	#$conf["selectedDataTable"],字串,連線到資料庫要檢視的資料表.
9313
	$conf["selectedDataTable"]="";
9314
	#可省略參數:
9315
	#$conf["dbPassword"],字串,連線到資料庫要用的密碼
9316
	#$conf["dbPassword"]=$dbPassword;
9317
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,預設為3306.
9318
	#$conf["dbPort"]="3306";
9319
	#參考資料:
9320
	#無.
9321
	#備註:
9322
	#查詢的功能有點弱,目前用getTableColumnDetailInfo替代
9323
	*/
9324
	public static function getDataTableColumn($conf){
9325
 
9326
		return db::getTableColumnDetailInfo($conf);
9327
 
9328
		}#function getDataTableColumn end
9329
 
9330
	/*
9331
	#函式說明:
9332
	#取得資料表內特定欄位的資訊
9333
	#回傳的內容:
9334
	#$result["status"],"true"代表執行成功;"false"代表執行失敗.
9335
	#$result["error"],錯誤訊息.
9336
	#$result["function"],當前執行的函數名稱.
9337
	#$result["columnInfo"]["name"],欄位的名稱.
9338
	#$result["columnInfo"]["type"],欄位的儲存型態.
9339
	#$result["columnInfo"]["length"],欄位的長度限制.
9340
	#$result["columnInfo"]["null"],欄位是否可以為null.
9341
	#$result["columnInfo"]["key"],索引鍵的名稱.
9342
	#$result["columnInfo"]["keyType"],欄位的鍵屬性.
9343
	#$result["columnInfo"]["foreignKeyConstraintName"],外建的名稱
9344
	#$result["columnInfo"]["referencesTable"],外鍵參考的資料表.
9345
	#$result["columnInfo"]["referencesColumn"],外鍵參考的資料表欄位.
9346
	#$result["columnInfo"]["onUpdateAction"],當參考的欄位更新時,要怎麼因應.
9347
	#$result["columnInfo"]["onDeleteAction"],當參考的欄位資料消失時,要怎麼因應.
9348
	#$result["columnInfo"]["default"],欄位的預設內容.
9349
	#$result["columnInfo"]["columnCharacterSet"],欄位的字元集.
9350
	#$result["columnInfo"]["columnCollate"],欄位的校對編碼.
9351
	#必填參數:
9352
	$conf["dbAddress"],字串,爲mysql-Server的位置
9353
	$conf["dbAddress"]=$dbAddress;
9354
	$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號
9355
	$conf["dbAccount"]=$dbAccount;
9356
	$conf["dbName"]=$dbName;#爲指定的資料庫名稱
9357
	$conf["dtName"]="";#為要檢視的資料表名稱
9358
	$conf["columnName"],字串,為要檢視的資料欄位名稱
9359
	$conf["columnName"]="";#為要檢視的資料欄位名稱
9360
	#可省略參數:
9361
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
9362
	#$conf["dbPassword"]=$dbPassword;
9363
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,預設為3306.
9364
	#$conf["dbPort"]="3306";
9365
	#參考資料:
9366
	#無.
9367
	#備註:
9368
	#無.
9369
	*/
9370
	public static function getDataTableSpecificColumn(&$conf){
9371
 
9372
		#初始化要回傳的內容
9373
		$result=array();
9374
 
9375
		#取得當前執行的函數名稱
9376
		$result["function"]=__FUNCTION__;
9377
 
9378
		#如果 $conf 不為陣列
9379
		if(gettype($conf)!="array"){
9380
 
9381
			#設置執行失敗
9382
			$result["status"]="false";
9383
 
9384
			#設置執行錯誤訊息
9385
			$result["error"][]="\$conf變數須為陣列形態";
9386
 
9387
			#如果傳入的參數為 null
9388
			if($conf==null){
9389
 
9390
				#設置執行錯誤訊息
9391
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
9392
 
9393
				}#if end
9394
 
9395
			#回傳結果
9396
			return $result;
9397
 
9398
			}#if end
9399
 
9400
		#檢查參數
9401
		#函式說明:
9402
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
9403
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
9404
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
9405
		#$result["function"],當前執行的函式名稱.
9406
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
9407
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
9408
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
9409
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
9410
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
9411
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
9412
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
9413
		#必填參數:
9414
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
9415
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
9416
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
9417
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("dbAddress","dbAccount","dbName","dtName","columnName");
9418
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
9419
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string","string","string");
9420
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
9421
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
9422
		#可省略參數:
9423
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
9424
		#$conf["canBeEmptyString"]="false";
9425
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
9426
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("dbPassword","dbPort");
9427
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
9428
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
9429
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
9430
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null);
9431
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
9432
		#$conf["arrayCountEqualCheck"][]=array();
9433
		#參考資料:
9434
		#array_keys=>http://php.net/manual/en/function.array-keys.php
9435
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
9436
		unset($conf["variableCheck::checkArguments"]);	
9437
 
9438
		#如果檢查失敗 
9439
		if($checkResult["status"]=="false"){
9440
 
9441
			#設置執行失敗
9442
			$result["status"]="false";
9443
 
9444
			#設置執行失敗訊息
9445
			$result["error"]=$checkResult;
9446
 
9447
			#回傳結果
9448
			return $result;
9449
 
9450
			}#if end
9451
 
9452
		#如果檢查沒有通過
9453
		if($checkResult["passed"]=="false"){
9454
 
9455
			#設置執行失敗
9456
			$result["status"]="false";
9457
 
9458
			#設置執行失敗訊息
9459
			$result["error"]=$checkResult;
9460
 
9461
			#回傳結果
9462
			return $result;
9463
 
9464
			}#if end
9465
 
9466
		#取得所有的欄位資訊
9467
		#函式說明:
9468
		#取得資料表所有欄位的詳細資訊
9469
		#回傳的內容:
9470
		#$result["status"],執行結果,"true"代表執行成功;"false"代表執行失敗
9471
		#$result["error"],錯誤訊息陣列
9472
		#$result["function"],當前執行的函數名稱.
9473
		#$result["sql"],執行的sql語法
9474
		#$result["oriInput"],原始的資料表欄位資訊
9475
		#$result["everyLine"],逐行的欄位資訊
9476
		#$result["tableName"],當前查詢的資料表名稱
9477
		#$result["engine"],資料表使用的儲存引擎
9478
		#$result["charset"],資料表預設的編碼
9479
		#$result["columnName"][$i],各欄位的名稱陣列,$i爲1開始的數字,也可以使用欄位的名稱。
9480
		#$result["columnVarTypeAndLengthLimit"][$i],各欄位儲存的變數形態與長度限制,$i爲1開始的數字,也可以使用欄位的名稱。
9481
		#$result["columnVarType"][$i],各欄位變數儲存的型態,$i爲1開始的數字,也可以使用欄位的名稱.
9482
		#$result["columnVarLengthLimit"][$i],個欄位變數的長度限制,若不存在其限制,則為"",$i爲1開始的數字,也可以使用欄位的名稱.
9483
		#$result["columnNotNull"][$i],各欄位是否不可爲null,"true"爲不可以爲null;"false"爲可爲"null",$i爲1開始的數字,也可以使用欄位的名稱。
9484
		#$result["columnAutoIncrement"][$i],各欄位是否會自動加1,"true"爲會;"false"爲不會,$i爲1開始的數字,也可以使用欄位的名稱。
9485
		#$result["columnDefault"][$i],各欄位的預設內容,若無則爲"沒有指定",$i爲1開始的數字,也可以使用欄位的名稱。
9486
		#$result["columnOnUpdateAction"][$i],當資料有修改時,該欄位的內容要怎麼因應,$i爲1開始的數字,也可以使用欄位的名稱。
9487
		#$result["columnCharacterSet"][$i],各欄位使用的CharacterSet,$i爲1開始的數字,也可以使用欄位的名稱。
9488
		#$result["columnCollate"][$i],各欄位使用的Collate,$i爲1開始的數字,也可以使用欄位的名稱。
9489
		#$result["key"]["exist"],該資料表是否有索引鍵,"true"代表有;"false"代表沒有。
9490
		#$result["key"][$j],該資料表的索引鍵陣列,$j爲0開始的數字,也可以使用欄位的名稱。
9491
		#$result["keyConstraintName"][$j],該資料表用於識別索引鍵的CONSTRAINT名稱陣列,$j爲1開始的數字,也可以使用欄位的名稱。
9492
		#$result["primaryKey"],該資料表的主鍵
9493
		#$result["foreignKey"]["exist"],該資料表是否有foreign key,"true"代表有;"fasle"代表沒有。
9494
		#$result["foreignKey"]["constraintName"][$k],用來識別外鍵的CONSTRAINT名稱陣列,$k爲1開始的數字,也可以使用欄位的名稱。
9495
		#$result["foreignKey"]["columnName"][$k],外鍵的名稱陣列,$k爲1開始的數字,也可以使用欄位的名稱。
9496
		#$result["foreignKey"]["referencesTable"][$k],外鍵參照的欄位,$k爲1開始的數字,,也可用欄位的名稱來找value.
9497
		#$result["foreignKey"]["referencesColumn"][$k],外鍵參照的欄位屬於哪個資料表,$k爲1開始的數字,也可用欄位的名稱來找value.
9498
		#$result["foreignKey"]["onUpdateAction"][$i],當參照的欄位資料更新時,會怎麼同步,$i爲1開始的數字,也可用欄位的名稱來找value.
9499
		#$result["foreignKey"]["onDeleteAction"][$i],當參照的欄位資料移除時,會怎麼同步,$i爲1開始的數字,也可用欄位的名稱來找value.
9500
		#必填參數:
9501
		$conf["db::getTableColumnDetailInfo"]["dbAddress"]=$conf["dbAddress"];#資料庫的網路位置
9502
		$conf["db::getTableColumnDetailInfo"]["dbAccount"]=$conf["dbAccount"];#連線到資料庫要用的帳號
9503
		$conf["db::getTableColumnDetailInfo"]["selectedDataBase"]=$conf["dbName"];#連線到資料庫要選擇的資料庫
9504
		$conf["db::getTableColumnDetailInfo"]["selectedDataTable"]=$conf["dtName"];#連線到資料庫要檢視的資料表
9505
		#可省略參數:
9506
 
9507
		#如果有設定連線密碼
9508
		if(isset($conf["dbPassword"])){
9509
 
9510
			$conf["db::getTableColumnDetailInfo"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
9511
 
9512
			}#if end
9513
 
9514
		#如果有設定連線port
9515
		if(isset($conf["dbPort"])){
9516
 
9517
			$conf["db::getTableColumnDetailInfo"]["dbPort"]=$conf["dbPort"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
9518
 
9519
			}#if end
9520
 
9521
		$queryResult=db::getTableColumnDetailInfo($conf["db::getTableColumnDetailInfo"]);
9522
		unset($conf["db::getTableColumnDetailInfo"]);
9523
 
9524
		#如果查詢失敗
9525
		if($queryResult["status"]=="false"){
9526
 
9527
			#設置錯誤
9528
			$result["status"]="false";
9529
 
9530
			#設置錯誤訊息
9531
			$result["error"]=$queryResult;
9532
 
9533
			#回傳結果
9534
			return $result;
9535
 
9536
			}#if end
9537
 
9538
		#var_dump($queryResult);
9539
 
9540
		#檢查是否有我們要的欄位存在
9541
		#函式說明:
9542
		#檢查一個數值是否與陣列裏面的元素相同
9543
		#回傳結果::
9544
		#$result["status"],"true"表示執行正確,"false"表示執行錯誤.
9545
		#$result["founded"],"true"表示有找到相同的,"false"表示沒有找到相同的.
9546
		#$result["error"],錯誤訊息
9547
		#$result["function"],當前執行的函數名稱
9548
		#$result["equalVarName"],相等的變數名稱或key.
9549
		#$result["equalVarValue"],相等的變數數值內容.
9550
		#必填參數:
9551
		$conf["search"]["getEqualVar"]["conditionElement"]=$conf["columnName"];#條件元素,要等於的元素內容。
9552
		$conf["search"]["getEqualVar"]["compareElements"]=$queryResult["columnName"];#要比對的陣列變數內容。
9553
		$searchResult=search::getEqualVar($conf["search"]["getEqualVar"]);
9554
		unset($conf["search"]["getEqualVar"]);
9555
 
9556
		#如果尋找失敗
9557
		if($searchResult["status"]=="false"){
9558
 
9559
			#設置錯誤
9560
			$result["status"]="false";
9561
 
9562
			#設置錯誤訊息
9563
			$result["error"]=$searchResult;
9564
 
9565
			#回傳結果
9566
			return $result;
9567
 
9568
			}#if end
9569
 
9570
		#如果沒有找到符合的欄位明稱
9571
		if($searchResult["founded"]=="false"){
9572
 
9573
			#設置錯誤
9574
			$result["status"]="false";
9575
 
9576
			#設置錯誤訊息
9577
			$result["error"]="沒有找到指定的欄位!";
9578
 
9579
			#回傳結果
9580
			return $result;
9581
 
9582
			}#if end
9583
 
9584
		#取得欄位資訊的key
9585
		$equalVarKey=$searchResult["equalVarName"];
9586
 
9587
		#取得欄位的名稱
9588
		$result["columnInfo"]["name"]=$queryResult["columnName"][$equalVarKey];
9589
 
9590
		#取欄位的儲存型態與長度限制
9591
		$result["columnInfo"]["type"]=$queryResult["columnVarType"][$equalVarKey];
9592
 
9593
		#檢查欄位儲存型態是否含有「(」與「)」
9594
		#函式說明:
9595
		#檢查一個字串裡面是否有多個關鍵字
9596
		#回傳結果::
9597
		#$result["status"],"true"代表執行成功,"false"代表執行失敗。
9598
		#$result["error"],錯誤訊息
9599
		#$result["founded"],是否找到所有的關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
9600
		#必填參數:
9601
		$conf["search"]["findManyKeyWords"]["keyWords"]=array("(",")");#想要搜尋的關鍵字
9602
		$conf["search"]["findManyKeyWords"]["string"]=$result["columnInfo"]["type"];#要被搜尋的字串內容
9603
		#可省略參數:
9604
		#$conf["search"]["findManyKeyWords"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
9605
		$searchResult=search::findManyKeyWords($conf["search"]["findManyKeyWords"]);
9606
		unset($conf["search"]["findManyKeyWords"]);
9607
 
9608
		#如果 檢查欄位儲存型態是否含有「(」與「)」 失敗
9609
		if($searchResult["status"]=="false"){
9610
 
9611
			#設置錯誤
9612
			$result["status"]="false";
9613
 
9614
			#設置錯誤訊息
9615
			$result["error"]=$searchResult;
9616
 
9617
			#回傳結果
9618
			return $result;
9619
 
9620
			}#if end
9621
 
9622
		#如果欄位儲存型態含有「(」與「)」,則將其從「(」開始分割
9623
		if($searchResult["founded"]=="true"){
9624
 
9625
			#函式說明:
9626
			#將固定格式的字串分開,並回傳分開的結果。
9627
			#回傳的參數:
9628
			#$result["oriStr"],要分割的原始字串內容
9629
			#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
9630
			#$result["dataCounts"],爲總共分成幾段
9631
			#必填參數:
9632
			$conf["stringProcess"]["spiltString"]["stringIn"]=$result["columnInfo"]["type"];#要處理的字串。
9633
			$conf["stringProcess"]["spiltString"]["spiltSymbol"]="(";#爲以哪個符號作爲分割
9634
			$spiltedStr=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
9635
			unset($conf["stringProcess"]["spiltString"]);
9636
 
9637
			#如果分割字串失敗
9638
			if($spiltedStr["status"]=="false"){
9639
 
9640
				#設置錯誤
9641
				$result["status"]="false";
9642
 
9643
				#設置錯誤訊息
9644
				$result["error"]=$spiltedStr;
9645
 
9646
				#回傳結果
9647
				return $result;
9648
 
9649
				}#if end
9650
 
9651
			#取得欄位型態
9652
			$result["columnInfo"]["type"]=$spiltedStr["dataArray"][0];
9653
 
9654
			}#if end 
9655
 
9656
		#取得欄位長度限制
9657
		$result["columnInfo"]["length"]=$queryResult["columnVarLengthLimit"][$conf["columnName"]];
9658
 
9659
		#取得欄位是否可以為null
9660
		$result["columnInfo"]["null"]=$queryResult["columnNotNull"][$conf["columnName"]];
9661
 
9662
		#如果該欄位有key的名稱
9663
		if(isset($queryResult["key"][$conf["columnName"]])){
9664
 
9665
			#該欄位為index key
9666
			$result["columnInfo"]["keyType"]="index key";
9667
 
9668
			#取得欄位的鍵名稱
9669
			$result["columnInfo"]["key"]=$queryResult["keyConstraintName"];
9670
 
9671
			}#if end
9672
 
9673
		#如果該欄位是foreignKey
9674
		if(isset($queryResult["foreignKey"]["constraintName"][$conf["columnName"]])){
9675
 
9676
			#該欄位為foreign key
9677
			$result["columnInfo"]["keyType"]="foreign key";
9678
 
9679
			#取得外鍵的名稱
9680
			$result["columnInfo"]["foreignKeyConstraintName"]=$queryResult["foreignKey"]["constraintName"][$conf["columnName"]];
9681
 
9682
			#取得外鍵參考的資料表
9683
			$result["columnInfo"]["referencesTable"]=$queryResult["foreignKey"]["referencesTable"][$conf["columnName"]];
9684
 
9685
			#取得外按鍵參考的欄位
9686
			$result["columnInfo"]["referencesColumn"]=$queryResult["foreignKey"]["referencesColumn"][$conf["columnName"]];
9687
 
9688
			#當參考的欄位更新時,要怎麼因應
9689
			$result["columnInfo"]["onUpdateAction"]=$queryResult["foreignKey"]["onUpdateAction"][$conf["columnName"]];
9690
 
9691
			#當參考的欄位資料消失時,要怎麼因應
9692
			$result["columnInfo"]["onDeleteAction"]=$queryResult["foreignKey"]["onDeleteAction"][$conf["columnName"]];
9693
 
9694
			}#if enb
9695
 
9696
		#取得欄位的預設內容
9697
		$result["columnInfo"]["default"]=$queryResult["columnDefault"][$conf["columnName"]];
9698
 
9699
		#取得欄位的字元集
9700
		$result["columnInfo"]["columnCharacterSet"]=$queryResult["columnCharacterSet"][$conf["columnName"]];
9701
 
9702
		#取得欄位的校對編碼設定
9703
		$result["columnInfo"]["columnCollate"]=$queryResult["columnCollate"][$conf["columnName"]];
9704
 
9705
		#設置執行成功
9706
		$result["status"]="true";
9707
 
9708
		#回傳結果
9709
		return $result;
9710
 
9711
		}#function getDataTableSpecificColumn end
9712
 
9713
	/*
9714
	#函式說明:
9715
	#檢查資料庫裏的資料表有無指定條件的資料
9716
	#回傳結果::
9717
	#$result["status"],執行是否成功,成功為"true",失敗為"false"。
9718
	#$result["error"],錯誤訊息	
9719
	#$result["founded"],是否找到資料,"true"代表有符合的資料;"false"代表沒有符合的資料.		
9720
	#$result["sql"],執行的sql字串.
9721
	#$result["function"],當前執行的函數名稱.
9722
	#必填參數:
9723
	$conf["dbAddress"],字串,爲mysql-Server的位置
9724
	$conf["dbAddress"]="";
9725
	$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號
9726
	$conf["dbAccount"]="";
9727
	$conf["selectedDataBaseName"],字串,爲指定的資料庫名稱,欲選擇的資料庫名稱
9728
	$conf["selectedDataBaseName"]="";
9729
	$conf["selectedDataTableName"],字串,欲選擇的資料表名稱
9730
	$conf["selectedDataTableName"]="";
9731
	#可省略參數:
9732
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼.
9733
	#$conf["dbPassword"]=$dbPassword;
9734
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,可省略,若省略則代表使用預設的3306 port.
9735
	#$conf["dbPort"]="";
9736
	#$conf["conditionTargetName"],字串陣列,用來判斷的資料表數值名稱,需爲陣列,可省略
9737
	#$conf["conditionTargetName"]=array("");
9738
	#$conf["conditionTargetValue"],字串陣列,用來判斷的資料表數值名稱若等於該數值,表示條件成立,需爲陣列,可省略
9739
	#$conf["conditionTargetValue"]=array("");
9740
	#參考資料:
9741
	#無.
9742
	#備註:
9743
	#無.
9744
	*/
9745
	public static function checkDataExists($conf){
9746
 
9747
		#初始化要回傳的內容
9748
		$result=array();
9749
 
9750
		#取得當前執行的函數名稱
9751
		$result["function"]=__FUNCTION__;
9752
 
9753
		#如果 $conf 不為陣列
9754
		if(gettype($conf)!="array"){
9755
 
9756
			#設置執行失敗
9757
			$result["status"]="false";
9758
 
9759
			#設置執行錯誤訊息
9760
			$result["error"][]="\$conf變數須為陣列形態";
9761
 
9762
			#如果傳入的參數為 null
9763
			if($conf==null){
9764
 
9765
				#設置執行錯誤訊息
9766
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
9767
 
9768
				}#if end
9769
 
9770
			#回傳結果
9771
			return $result;
9772
 
9773
			}#if end
9774
 
9775
		#函式說明:
9776
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
9777
		#回傳結果:
9778
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
9779
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
9780
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
9781
		#必填參數:
9782
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
9783
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("dbAddress","dbAccount","selectedDataBaseName","selectedDataTableName");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
9784
		#可省略參數:
9785
		$conf["variableType"]=array("string","string","string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
9786
		#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
9787
		#備註:
9788
		#功能與checkExistAndType函式相同
9789
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
9790
		unset($conf["variableCheck"]["isexistMuti"]);
9791
 
9792
		#如果檢查失敗
9793
		if($checkResult["status"]=="false"){
9794
 
9795
			#設置錯誤識別
9796
			$result["status"]="false";
9797
 
9798
			#設置錯誤訊息
9799
			$result["error"]=$checkResult;
9800
 
9801
			#回傳結果
9802
			return $result;
9803
 
9804
			}#if end
9805
 
9806
		#如果檢查沒有通過
9807
		if($checkResult["passed"]=="false"){
9808
 
9809
			#設置錯誤識別
9810
			$result["status"]="false";
9811
 
9812
			#設置錯誤訊息
9813
			$result["error"]=$checkResult;
9814
 
9815
			#回傳結果
9816
			return $result;
9817
 
9818
			}#if end
9819
 
9820
		#如果 $conf["conditionTargetName"] 有設定
9821
		if(isset($conf["conditionTargetName"])){
9822
 
9823
			#如果其形態不爲 array
9824
			if(gettype($conf["conditionTargetName"])!="array"){
9825
 
9826
				#設置錯誤識別
9827
				$result["status"]="false";
9828
 
9829
				#設置錯誤訊息
9830
				$result["error"]="\$conf[\"conditionTargetName\"]須爲陣列值";
9831
 
9832
				#回傳結果
9833
				return $result;
9834
 
9835
				}#if end
9836
 
9837
			}#if end
9838
 
9839
		#如果 $conf["conditionTargetValue"] 有設定
9840
		if(isset($conf["conditionTargetValue"])){
9841
 
9842
			#如果其形態不爲 array
9843
			if(gettype($conf["conditionTargetValue"])!="array"){
9844
 
9845
				#設置錯誤識別
9846
				$result["status"]="false";
9847
 
9848
				#設置錯誤訊息
9849
				$result["error"]="\$conf[\"conditionTargetValue\"]須爲陣列值";
9850
 
9851
				#回傳結果
9852
				return $result;
9853
 
9854
				}#if end
9855
 
9856
			}#if end
9857
 
9858
		#函式說明:
9859
		#一次取得資料庫、表的資料
9860
		#回傳結果:
9861
		#$result["status"],執行結果"true"為成功;"false"為執行失敗。
9862
		#$result["error"],錯誤訊息陣列。
9863
		#$result["dataContent"],爲資料的內容。
9864
		#$result["dataContent"][$conf["WhereColumnName"][$i]][$dataSetNum]
9865
			#$dataSetNum 爲第$dataSetNum+1筆資料
9866
			#$conf["WhereColumnName"][$i] 爲第 $i+1 個欄位的名稱
9867
		#$result["dataCount"],爲取得的資料筆數。
9868
		#必填參數:
9869
		$conf["db"]["fastGetDbData"]["dbAddress"]=$conf["dbAddress"];#爲dbServer的位置。
9870
		$conf["db"]["fastGetDbData"]["dbAccount"]=$conf["dbAccount"];#爲登入dbServer的帳號。
9871
		$conf["db"]["fastGetDbData"]["dbName"]=$conf["selectedDataBaseName"];#爲要存取的資料庫名稱
9872
		$conf["db"]["fastGetDbData"]["tableName"]=$conf["selectedDataTableName"];#爲要存取的資料表名稱
9873
		$conf["db"]["fastGetDbData"]["columnYouWant"]=$conf["conditionTargetName"];#你想要的欄位!
9874
		#可省略參數:
9875
 
9876
		#如果 $conf["dbPassword"] 有設置
9877
		if(isset($conf["dbPassword"])){
9878
 
9879
			$conf["db"]["fastGetDbData"]["dbPassword"]=$conf["dbPassword"];#爲要存取dbServer的密碼
9880
 
9881
			}#if end
9882
 
9883
		#如果 $conf["dbPort"] 有設置
9884
		if(isset($conf["dbPort"])){
9885
 
9886
			$conf["db"]["fastGetDbData"]["dbPort"]=$conf["dbPort"];#爲要存取dbServer的port
9887
 
9888
			}#if end
9889
 
9890
		$conf["db"]["fastGetDbData"]["WhereColumnName"]=$conf["conditionTargetName"];#用於判斷語句的欄位項目陣列。
9891
		$conf["db"]["fastGetDbData"]["WhereColumnValue"]=$conf["conditionTargetValue"];#用於判斷語句的欄位數值陣列,若與LIKE搭配,則可以在關鍵自字串的左右名加上「%」符號,這樣就可以搜尋具有該字串的內容。
9892
		#$conf["db"]["fastGetDbData"]["WhereColumnCombine"]=array("");#用於判斷語句當中需要()起來的判斷式,須爲陣列值,"s"代表「(」,"e"代表「)」 ,若無則須設爲""。
9893
		#$conf["db"]["fastGetDbData"]["WhereColumnOperator"]=array("");#用於判斷語句的比較符號陣列,可以用的符號有「"="、">"、"<"、"LIKE"、"NOT LIKE"」,預設都爲「=」。
9894
		#$conf["db"]["fastGetDbData"]["WhereColumnAndOr"]=array("");#用於判斷語句條件之間成立的條件是AND還是OR,須爲陣列值。其數量應爲要判斷的欄位數量減一。
9895
		#$conf["db"]["fastGetDbData"]["orderItem"]="";#爲排序的項目依據,若要用隨機抽樣,可以用"rand()",可省略。
9896
		#$conf["db"]["fastGetDbData"]["ascORdesc"]="";#爲要低增還是遞減排序,asc爲遞增;desc爲遞減。
9897
		#$conf["db"]["fastGetDbData"]["numberStart"]="0";#為從第幾筆開始讀取,預設為0,代筆第一筆。
9898
		#$conf["db"]["fastGetDbData"]["numLimit"]="30";#為要取幾筆資料,可以省略,省略則表示不限制數目。
9899
		#$conf["db"]["fastGetDbData"]["groupBy"]=array("");#爲要以哪幾個欄爲作爲分羣的依據(欄位相同的數值僅會取出一筆)。
9900
		$dataResult=db::fastGetDbData($conf["db"]["fastGetDbData"]);
9901
		unset($conf["db"]["fastGetDbData"]);
9902
 
9903
		#如果查詢資料失敗
9904
		if($dataResult["status"]=="false"){
9905
 
9906
			#設置錯誤識別
9907
			$result["status"]="false";
9908
 
9909
			#設置錯誤訊息
9910
			$result["error"]=$dataResult;
9911
 
9912
			#回傳結果
9913
			return $result;
9914
 
9915
			}#if end
9916
 
9917
		#取得執行的sql字串
9918
		$result["sql"]=$dataResult["sql"];
9919
 
9920
		#如果 $dataResult["status"] 等於"false"
9921
		if($dataResult["status"]=="false"){
9922
 
9923
			#設置錯誤識別
9924
			$result["status"]="false";
9925
 
9926
			#設置錯誤訊息
9927
			$result["error"]=$dataResult;
9928
 
9929
			#回傳結果
9930
			return $result;
9931
 
9932
			}#if end
9933
 
9934
		#如果$dataResult["dataCount"]沒設定,就表示沒找到相符的資料
9935
		if(!isset($dataResult["dataCount"])){
9936
 
9937
			#設置錯誤識別
9938
			$result["status"]="true";
9939
 
9940
			#設置沒有找到符合資料
9941
			$result["founded"]="false";
9942
 
9943
			#回傳結果
9944
			return $result;
9945
 
9946
			}#if end
9947
 
9948
		#如果符合的資料等於0
9949
		if($dataResult["dataCount"]==0){
9950
 
9951
			#設置錯誤識別
9952
			$result["status"]="true";
9953
 
9954
			#設置沒有找到符合資料
9955
			$result["founded"]="false";
9956
 
9957
			#回傳結果
9958
			return $result;
9959
 
9960
			}#if end
9961
 
9962
		#執行到這邊代表執行成功
9963
		$result["status"]="true";
9964
 
9965
		#設置有找到符合資料
9966
		$result["founded"]="true";
9967
 
9968
		#回傳結果
9969
		return $result;
9970
 
9971
		}#function checkDataExists
9972
 
9973
	/*
9974
	#函式說明:
9975
	#檢查資料表是否存在
9976
	#回傳結果::
9977
	#設置執行錯誤的識別
9978
	#$result["status"],"true"代表執行成功;"false"代表執行失敗.
9979
	#$result["error"],錯誤訊息.
9980
	#$result["founded"],是否有有找到相同的,"true"代表有找到符合的資料;"false"代表沒有符合的資料.
9981
	#$result["function"],當前執行的函數名稱.
9982
	#$result["argu"],使用的參數
9983
	#其餘的結果代表參數不正確
9984
	#必填參數:
9985
	#$conf["dbAddress"],字串,爲mysql-Server的位置
9986
	$conf["dbAddress"]=$dbAddress;
9987
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號
9988
	$conf["dbAccount"]=$dbAccount;
9989
	#$conf["selectedDataBaseName"],字串,爲指定的資料庫名稱
9990
	$conf["selectedDataBaseName"]="";
9991
	#$conf["selectedDataTableName"],字串,為要檢查是否存在的資料表名稱
9992
	$conf["selectedDataTableName"]="";
9993
	#可省略參數
9994
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼 
9995
	#$conf["dbPassword"]=$dbPassword;
9996
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,可省略,若省略則代表使用預設的3306 port.
9997
	#$conf["dbPort"]="";
9998
	#參考資料:
9999
	#無.
10000
	#備註:
10001
	#無.
10002
	*/
10003
	public static function checkDataTableExists($conf){
10004
 
10005
		#初始化要回傳的變數
10006
		$result=array();
10007
 
10008
		#取得當前執行的函數名稱
10009
		$result["function"]=__FUNCTION__;
10010
 
10011
		#如果 $conf 不為陣列
10012
		if(gettype($conf)!="array"){
10013
 
10014
			#設置執行失敗
10015
			$result["status"]="false";
10016
 
10017
			#設置執行錯誤訊息
10018
			$result["error"][]="\$conf變數須為陣列形態";
10019
 
10020
			#如果傳入的參數為 null
10021
			if($conf==null){
10022
 
10023
				#設置執行錯誤訊息
10024
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
10025
 
10026
				}#if end
10027
 
10028
			#回傳結果
10029
			return $result;
10030
 
10031
			}#if end
10032
 
10033
		#取得參數
10034
		$result["argu"]=$conf;
10035
 
10036
		#函式說明:
10037
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
10038
		#回傳結果:
10039
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
10040
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
10041
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
10042
		#必填參數:
10043
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
10044
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("dbAddress","dbAccount","selectedDataBaseName","selectedDataTableName");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
10045
		#可省略參數:
10046
		$conf["variableType"]=array("string","string","string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
10047
		#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
10048
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
10049
		unset($conf["variableCheck"]["isexistMuti"]);
10050
 
10051
		#var_dump($checkResult);
10052
 
10053
		#如果檢查不通過
10054
		if($checkResult["passed"]=="false"){
10055
 
10056
			#設置執行錯誤的識別
10057
			$result["status"]="false";
10058
 
10059
			#設置錯誤訊息
10060
			$result["error"]=$checkResult;
10061
 
10062
			#回傳結果
10063
			return $result;
10064
 
10065
			}#if end
10066
 
10067
		#查詢特定資料庫裡的資料表列表,會回傳查詢的結果
10068
		#$result["status"],若成功則爲0,失敗則爲1。
10069
		#$result["error"],錯誤訊息陣列.
10070
		#$result["tableName"] 爲查詢的資料庫名稱陣列,
10071
			#第一筆資料庫名稱爲$result["tableName"][0],
10072
			#第二筆資料庫名稱爲$result["tableName"][1],
10073
			#其餘以此類推。
10074
		#$result["dataCounts"] 爲資料庫的總筆數
10075
		#必填參數:
10076
		$conf["db"]["getDataTableList"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
10077
		$conf["db"]["getDataTableList"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
10078
		$conf["db"]["getDataTableList"]["selectedDataBaseName"]=$conf["selectedDataBaseName"];#爲指定的資料庫名稱
10079
		#可省略參數:
10080
 
10081
		#如果 $conf["dbPassword"] 有設定
10082
		if(isset($conf["dbPassword"])){
10083
 
10084
			#設定連線時要用的密碼
10085
			$conf["db"]["getDataTableList"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
10086
 
10087
			}#if end
10088
 
10089
		#如果 $conf["dbPort"] 有設定
10090
		if(isset($conf["dbPort"])){
10091
 
10092
			#設定連線時要用的密碼
10093
			$conf["db"]["getDataTableList"]["dbPort"]=$conf["dbPort"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
10094
 
10095
			}#if end		
10096
 
10097
		#原始語法:
10098
		#show tables FROM databaseName,代表檢視databaseName裡面的資料表清單。
10099
		$dataTableList=db::getDataTableList($conf["db"]["getDataTableList"]);
10100
		unset($conf["db"]["getDataTableList"]);
10101
 
10102
		#如果調閱資料表清單出錯
10103
		if($dataTableList["status"]=="false"){
10104
 
10105
			#設置錯誤識別
10106
			$result["status"]="false";
10107
 
10108
			#設置錯誤訊息
10109
			$result["error"]=$dataTableList;
10110
 
10111
			#回傳結果
10112
			return $result;
10113
 
10114
			}#if end
10115
 
10116
		#如果裡面沒有任何1個資料表
10117
		if($dataTableList["dataCounts"]==0){
10118
 
10119
			#設置執行成功的識別
10120
			$result["status"]="true";
10121
 
10122
			#設置有找到相同的
10123
			$result["founded"]="false";
10124
 
10125
			#回傳結果
10126
			return $result;
10127
 
10128
			}#if end
10129
 
10130
		#函式說明:
10131
		#檢查一個數值是否與陣列裏面的元素相同
10132
		#回傳結果::
10133
		#$result["status"],"true"表示執行正確,"false"表示執行錯誤.
10134
		#$result["founded"],"true"表示有找到相同的,"false"表示沒有找到相同的.
10135
		#$result["error"],錯誤訊息
10136
		#$result["function"],當前執行的函數名稱
10137
		#$result["argv"],使用的參數
10138
		#$result["equalVarName"],相等的變數名稱或key.
10139
		#$result["equalVarValue"],相等的變數數值內容.
10140
		#必填參數:
10141
		$conf["search"]["getEqualVar"]["conditionElement"]=$conf["selectedDataTableName"];#條件元素,要等於的元素內容。
10142
		$conf["search"]["getEqualVar"]["compareElements"]=$dataTableList["tableName"];#要比對的陣列變數內容。
10143
		$checkResult=search::getEqualVar($conf["search"]["getEqualVar"]);
10144
		unset($conf["search"]["getEqualVar"]);
10145
 
10146
		#如果有找到相同的元素
10147
		if($checkResult["founded"]==="true"){
10148
 
10149
			#設置執行成功的識別
10150
			$result["status"]="true";
10151
 
10152
			#設置有找到相同的
10153
			$result["founded"]="true";
10154
 
10155
			#回傳結果
10156
			return $result;
10157
 
10158
			}#if end
10159
 
10160
		#如果沒有找到相同的元素
10161
		if($checkResult["founded"]==="false"){
10162
 
10163
			#設置執行成功的識別
10164
			$result["status"]="true";
10165
 
10166
			#設置有找到相同的
10167
			$result["founded"]="false";
10168
 
10169
			#回傳結果
10170
			return $result;
10171
 
10172
			}#if end
10173
 
10174
		#不應該執行到這邊
10175
 
10176
		#設置執行失敗
10177
		$result["status"]="false";
10178
 
10179
		#設置執行錯誤
10180
		$result["error"]="不應該出現的例外狀況";
10181
 
10182
		#回傳結果
10183
		return $result;
10184
 
10185
		}#funcrion checkDataTableExists end
10186
 
10187
	/*
10188
	#函式說明:
10189
	#檢查資料表的欄位是否存在
10190
	#回傳結果::
10191
	#設置執行錯誤的識別
10192
	#$result["function"],當前執行的函數名稱.
10193
	#$result["status"],"true"代表執行成功;"false"代表執行失敗.
10194
	#$result["error"],錯誤訊息.
10195
	#$result["warning"],警告訊息陣列
10196
	#$result["passed"],是否通過檢查,"true"代表通過;"false"代表不通過.
10197
	#其餘的結果代表參數不正確
10198
	#必填參數:
10199
	#$conf["dbAddr"],字串,爲mysql-Server的位置
10200
	$conf["dbAddr"]=$dbAddress; 
10201
	#$conf["dbAcct"],字串,爲用於連入mysql-Server時要使用的帳號
10202
	$conf["dbAcct"]=$dbAccount;
10203
	#$conf["dbName"],字串,爲指定的資料庫名稱
10204
	$conf["dbName"]="";
10205
	#$conf["dtName"],字串,為要檢查是否存在的資料表名稱
10206
	$conf["dtName"]="";
10207
	#$conf["col"],字串陣列,要檢查的欄位名稱.
10208
	$conf["col"]=array();
10209
	#可省略參數
10210
	#$conf["dbPass"],爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼 
10211
	#$conf["dbPass"]=$dbPassword;
10212
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,可省略,若省略則代表使用預設的3306 port.
10213
	#$conf["dbPort"]="";
10214
	#參考資料:
10215
	#無.
10216
	#備註:
10217
	#無.
10218
	*/
10219
	public static function checkTableColExists(&$conf=array()){
10220
 
10221
		#初始化要回傳的結果
10222
		$result=array();
10223
 
10224
		#取得當前執行的函數名稱
10225
		$result["function"]=__FUNCTION__;
10226
 
10227
		#如果沒有參數
10228
		if(func_num_args()==0){
10229
 
10230
			#設置執行失敗
10231
			$result["status"]="false";
10232
 
10233
			#設置執行錯誤訊息
10234
			$result["error"]="函數".$result["function"]."需要參數";
10235
 
10236
			#回傳結果
10237
			return $result;
10238
 
10239
			}#if end
10240
 
10241
		#取得參數
10242
		$result["argu"]=$conf;
10243
 
10244
		#如果 $conf 不為陣列
10245
		if(gettype($conf)!=="array"){
10246
 
10247
			#設置執行失敗
10248
			$result["status"]="false";
10249
 
10250
			#設置執行錯誤訊息
10251
			$result["error"][]="\$conf變數須為陣列形態";
10252
 
10253
			#如果傳入的參數為 null
10254
			if($conf===null){
10255
 
10256
				#設置執行錯誤訊息
10257
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
10258
 
10259
				}#if end
10260
 
10261
			#回傳結果
10262
			return $result;
10263
 
10264
			}#if end
10265
 
10266
		#函式說明:
10267
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
10268
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
10269
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
10270
		#$result["function"],當前執行的函式名稱.
10271
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
10272
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
10273
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
10274
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
10275
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
10276
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
10277
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
10278
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
10279
		#必填參數:
10280
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
10281
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
10282
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
10283
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
10284
		#可以省略的參數:
10285
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
10286
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("dbAddr","dbName","dbAcct","dtName","col");
10287
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
10288
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string","string","array");
10289
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
10290
		#$conf["canBeEmptyString"]="false";
10291
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
10292
		#$conf["canNotBeEmpty"]=array();
10293
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
10294
		#$conf["canBeEmpty"]=array();
10295
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
10296
		#$conf["skipableVariableCanNotBeEmpty"]=array();
10297
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
10298
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("dbPass","dbPort");
10299
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
10300
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
10301
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
10302
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null);
10303
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
10304
		#$conf["disallowAllSkipableVarIsEmpty"]="";
10305
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
10306
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
10307
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
10308
		#$conf["arrayCountEqualCheck"][]=array();
10309
		#參考資料:
10310
		#array_keys=>http://php.net/manual/en/function.array-keys.php
10311
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
10312
		unset($conf["variableCheck::checkArguments"]);
10313
 
10314
		#如果檢查失敗
10315
		if($checkArguments["status"]==="false"){
10316
 
10317
			#設置執行失敗
10318
			$result["status"]="false";
10319
 
10320
			#設置錯誤訊息
10321
			$result["error"]=$checkArguments["error"];
10322
 
10323
			#回傳結果
10324
			return $result;
10325
 
10326
			}#if  end
10327
 
10328
		#如果檢查不通過
10329
		if($checkArguments["passed"]==="false"){
10330
 
10331
			#設置執行失敗
10332
			$result["status"]="false";
10333
 
10334
			#設置錯誤訊息
10335
			$result["error"]=$checkArguments["error"];
10336
 
10337
			#回傳結果
10338
			return $result;
10339
 
10340
			}#if  end
10341
 
10342
		#函式說明:
10343
		#取得資料表所有欄位的詳細資訊
10344
		#回傳的內容:
10345
		#$result["status"],執行結果,"true"代表執行成功;"false"代表執行失敗
10346
		#$result["error"],錯誤訊息陣列
10347
		#$result["function"],當前執行的函數名稱.
10348
		#$result["sql"],執行的sql語法
10349
		#$result["oriInput"],原始的資料表欄位資訊
10350
		#$result["everyLine"],逐行的欄位資訊
10351
		#$result["tableName"],當前查詢的資料表名稱
10352
		#$result["engine"],資料表使用的儲存引擎
10353
		#$result["charset"],資料表預設的編碼
10354
		#$result["columnName"][$i],各欄位的名稱陣列,$i爲1開始的數字,也可以使用欄位的名稱。
10355
		#$result["columnVarTypeAndLengthLimit"][$i],各欄位儲存的變數形態與長度限制,$i爲1開始的數字,也可以使用欄位的名稱。
10356
		#$result["columnVarType"][$i],各欄位變數儲存的型態,$i爲1開始的數字,也可以使用欄位的名稱.
10357
		#$result["columnVarLengthLimit"][$i],個欄位變數的長度限制,若不存在其限制,則為"",$i爲1開始的數字,也可以使用欄位的名稱.
10358
		#$result["columnNotNull"][$i],各欄位是否不可爲null,"true"爲不可以爲null;"false"爲可爲"null",$i爲1開始的數字,也可以使用欄位的名稱。
10359
		#$result["columnAutoIncrement"][$i],各欄位是否會自動加1,"true"爲會;"false"爲不會,$i爲1開始的數字,也可以使用欄位的名稱。
10360
		#$result["columnDefault"][$i],各欄位的預設內容,若無則爲"沒有指定",$i爲1開始的數字,也可以使用欄位的名稱。
10361
		#$result["columnOnUpdateAction"][$i],當資料有修改時,該欄位的內容要怎麼因應,$i爲1開始的數字,也可以使用欄位的名稱。
10362
		#$result["columnCharacterSet"][$i],各欄位使用的CharacterSet,$i爲1開始的數字,也可以使用欄位的名稱。
10363
		#$result["columnCollate"][$i],各欄位使用的Collate,$i爲1開始的數字,也可以使用欄位的名稱。
10364
		#$result["key"]["exist"],該資料表是否有索引鍵,"true"代表有;"false"代表沒有。
10365
		#$result["key"][$j],該資料表的索引鍵陣列,$j爲0開始的數字,也可以使用欄位的名稱。
10366
		#$result["keyConstraintName"][$j],該資料表用於識別索引鍵的CONSTRAINT名稱陣列,$j爲1開始的數字,也可以使用欄位的名稱。
10367
		#$result["primaryKey"],該資料表的主鍵
10368
		#$result["foreignKey"]["exist"],該資料表是否有foreign key,"true"代表有;"fasle"代表沒有。
10369
		#$result["foreignKey"]["constraintName"][$k],用來識別外鍵的CONSTRAINT名稱陣列,$k爲1開始的數字,也可以使用欄位的名稱。
10370
		#$result["foreignKey"]["columnName"][$k],外鍵的名稱陣列,$k爲1開始的數字,也可以使用欄位的名稱。
10371
		#$result["foreignKey"]["referencesTable"][$k],外鍵參照的欄位,$k爲1開始的數字,,也可用欄位的名稱來找value.
10372
		#$result["foreignKey"]["referencesColumn"][$k],外鍵參照的欄位屬於哪個資料表,$k爲1開始的數字,也可用欄位的名稱來找value.
10373
		#$result["foreignKey"]["onUpdateAction"][$i],當參照的欄位資料更新時,會怎麼同步,$i爲1開始的數字,也可用欄位的名稱來找value.
10374
		#$result["foreignKey"]["onDeleteAction"][$i],當參照的欄位資料移除時,會怎麼同步,$i爲1開始的數字,也可用欄位的名稱來找value.
10375
		#必填參數:
10376
		$conf["db::getDataTableColumn"]["dbAddress"]=$conf["dbAddr"];#資料庫的網路位置
10377
		$conf["db::getDataTableColumn"]["dbAccount"]=$conf["dbAcct"];#連線到資料庫要用的帳號
10378
		$conf["db::getDataTableColumn"]["selectedDataBase"]=$conf["dbName"];#連線到資料庫要選擇的資料庫
10379
		$conf["db::getDataTableColumn"]["selectedDataTable"]=$conf["dtName"];#連線到資料庫要檢視的資料表
10380
		#可省略參數:
10381
		if(isset($conf["dbPass"])){
10382
 
10383
			#$conf["dbPassword"]=$dbPassword;#連線到資料庫要用的密碼
10384
			$conf["db::getDataTableColumn"]["dbPassword"]=$conf["dbPass"];
10385
 
10386
			}#if end
10387
 
10388
		#如果有設置 $conf["dbPort"]
10389
		if(isset($conf["dbPort"])){
10390
 
10391
			#$conf["dbPort"]=$dbPort;#連線到資料庫要用的port
10392
			$conf["db::getDataTableColumn"]["dbPort"]=$conf["dbPass"];
10393
 
10394
			}#if end
10395
 
10396
		#備註:
10397
		#查詢的功能有點弱,目前用getTableColumnDetailInfo替代
10398
		$getDataTableColumn=db::getDataTableColumn($conf["db::getDataTableColumn"]);
10399
		unset($conf["db::getDataTableColumn"]);
10400
 
10401
		#如果查詢失敗
10402
		if($getDataTableColumn["status"]==="false"){
10403
 
10404
			#設置執行失敗
10405
			$result["status"]="false";
10406
 
10407
			#設置錯誤訊息
10408
			$result["error"]=$getDataTableColumn["error"];
10409
 
10410
			#回傳結果
10411
			return $result;
10412
 
10413
			}#if end
10414
 
10415
		#初始化通過檢查
10416
		$result["passed"]="true";
10417
 
10418
		#針對每個要檢查的欄位
10419
		foreach($conf["col"] as $colName){
10420
 
10421
			#如果欄位 $colName 不存在
10422
			if(!in_array($colName,$getDataTableColumn["columnName"])){
10423
 
10424
				#設置欄位不存在的警告訊息
10425
				$result["warning"][]="欄位 ".$colName." 不存在";
10426
 
10427
				#設置未通過檢查
10428
				$result["passed"]="false";
10429
 
10430
				}#if end
10431
 
10432
			}#foreach end
10433
 
10434
		#設置執行正常
10435
		$result["status"]="true";
10436
 
10437
		#回傳結果
10438
		return $result;
10439
 
10440
		}#function checkTableColExists end
10441
 
10442
	/*
10443
	#函式說明:
10444
	#檢查該資料庫是否存在,結果會回傳一個陣列。
10445
	#回傳結果:
10446
	#$result["status"],"true"代表執行成功;"false"代表執行失敗.
10447
	#$result["error"],錯誤訊息.
10448
	#$result["exist"],有為"true",無為"false".
10449
	#$result["function"],當前執行的函數名稱.
10450
	#必填參數:
10451
	$conf["dbAddress"],字串,爲mysql-Server的位置
10452
	$conf["dbAddress"]=$dbAddress;
10453
	$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號
10454
	$conf["dbAccount"]=$dbAccount;
10455
	$conf["checkDataBaseName"],字串,爲要檢查是否存在的資料庫名稱
10456
	$conf["checkDataBaseName"]="";
10457
	#可省略參數:
10458
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼.
10459
	#$conf["dbPassword"]="";
10460
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,可省略,若省略則代表使用預設的3306 port.
10461
	#$conf["dbPort"]="";
10462
	#參考資料:
10463
	#無.
10464
	#備註:
10465
	#無.
10466
	*/	
10467
	public static function checkDataBaseExists($conf){
10468
 
10469
		#初始化要回傳的變數
10470
		$result=array();
10471
 
10472
		#紀錄當前執行的函數名稱
10473
		$result["function"]=__FUNCTION__;
10474
 
10475
		#如果 $conf 不為陣列
10476
		if(gettype($conf)!="array"){
10477
 
10478
			#設置執行失敗
10479
			$result["status"]="false";
10480
 
10481
			#設置執行錯誤訊息
10482
			$result["error"][]="\$conf變數須為陣列形態";
10483
 
10484
			#如果傳入的參數為 null
10485
			if($conf==null){
10486
 
10487
				#設置執行錯誤訊息
10488
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
10489
 
10490
				}#if end
10491
 
10492
			#回傳結果
10493
			return $result;
10494
 
10495
			}#if end
10496
 
10497
		#檢查參數
10498
		#函式說明:
10499
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
10500
		#回傳結果:
10501
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
10502
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
10503
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
10504
		#必填參數:
10505
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
10506
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("dbAddress","dbAccount","checkDataBaseName");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
10507
		#可省略參數:
10508
		#$conf["variableType"]=array();#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
10509
		#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
10510
		#備註:
10511
		#功能與checkExistAndType函式相同
10512
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
10513
		unset($conf["variableCheck"]["isexistMuti"]);
10514
 
10515
		#如果 $checkResult["status"] 等於 "false"
10516
		if($checkResult["status"]=="false"){
10517
 
10518
			#設置執行失敗
10519
			$result["status"]="false";
10520
 
10521
			#設置執行錯誤
10522
			$result["error"]=$checkResult;
10523
 
10524
			#回傳結果
10525
			return $result;
10526
 
10527
			}#if end	
10528
 
10529
		#如果 $checkResult["passed"] 等於 "false"
10530
		if($checkResult["passed"]=="false"){
10531
 
10532
			#設置執行失敗
10533
			$result["status"]="false";
10534
 
10535
			#設置執行錯誤
10536
			$result["error"]=$checkResult;
10537
 
10538
			#回傳結果
10539
			return $result;
10540
 
10541
			}#if end
10542
 
10543
		#取得資料庫列表的語法
10544
		#查詢所有的資料庫列表,會回傳查詢的結果
10545
		#$result["status"],執行是否正常,"true"為正常,"fasle"為不正常
10546
		#$result["error"],爲錯誤訊息
10547
		#$result["connectInformation"],爲回傳的mysql連線資訊。
10548
		#$result["dbName"] 爲查詢的資料庫名稱陣列,第一筆資料庫名稱爲$result["dbName"][0],第二筆資料庫名稱爲$result["dbName"][1],其餘以此類推。
10549
		#$result["dbCounts"] 爲資料庫的總筆數	
10550
		#必填參數:
10551
		$conf["db"]["getDataBaseList"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
10552
		$conf["db"]["getDataBaseList"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
10553
		#可省略參數:
10554
 
10555
		#如果 $conf["dbPassword"] 有設定
10556
		if(isset($conf["dbPassword"])){
10557
 
10558
			$conf["db"]["getDataBaseList"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
10559
 
10560
			}#if end
10561
 
10562
		#如果 $conf["dbPort"] 有設定
10563
		if(isset($conf["dbPort"])){
10564
 
10565
			$conf["db"]["getDataBaseList"]["dbPort"]=$conf["dbPort"];#爲連線到mysql-Server時要使用的port,可省略,若省略則代表預設的3306.
10566
 
10567
			}#if end
10568
 
10569
		$queryResult=db::getDataBaseList($conf["db"]["getDataBaseList"]);
10570
		unset($conf["db"]["getDataBaseList"]);
10571
 
10572
		#如果 $queryResult["status"] 等於 "fasle"
10573
		if($queryResult["status"]=="false"){
10574
 
10575
			#設置錯誤識別
10576
			$result["status"]="false";
10577
 
10578
			#設置錯誤訊息
10579
			$result["error"]=$queryResult;
10580
 
10581
			#回傳結果
10582
			return $result;
10583
 
10584
			}#if end
10585
 
10586
		#有幾個資料庫就檢查該名稱有沒有重複
10587
		for($i=0;$i<$queryResult["dbCounts"];$i++){
10588
 
10589
			#檢查名稱是否相同			
10590
			if($queryResult["dbName"][$i]==$conf["checkDataBaseName"]){
10591
 
10592
				#相同名稱代表資料庫重複
10593
				$result["exist"]="true";
10594
 
10595
				#跳出迴圈
10596
				break;
10597
 
10598
				}#判斷式結束
10599
 
10600
			}#迴圈結束
10601
 
10602
		#如果 $result["exist"] 沒有設定
10603
		if(!isset($result["exist"])){
10604
 
10605
			#代表都沒有相同的名稱就代表沒有重複
10606
			$result["exist"]="false";
10607
 
10608
			}#if end
10609
 
10610
		#執行到這邊代表執行正常
10611
		$result["status"]="true";
10612
 
10613
		#回傳結果
10614
		return $result;	
10615
 
10616
		}#function end
10617
 
10618
	/*
10619
	#函式說明:
10620
	#尋找特定資料庫裏特定資料表裏面特定欄位有無可用整數編號,可以指定數字的起點與終點,此函式會回傳可用的編號。
10621
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
10622
	#$result["error"],錯誤訊息陣列 
10623
	#$result["function"],當前執行的函數.
10624
	#$result["founded"],爲搜尋可以用的數字是否成功,"true"表示成功,"false"表示失敗.
10625
	#$result["usableNumber"],爲可用的整數。
10626
	#$result["sql"],執行的sql語法.
10627
	#必填參數:
10628
	#$conf["dbAddress"],字串,爲mysql-Server的位置.
10629
	$conf["dbAddress"]=$dbAddress;
10630
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號
10631
	$conf["dbAccount"]=$dbAccount;
10632
	#$conf["selectedDataBaseName"],字串,爲要檢查的資料庫名稱
10633
	$conf["selectedDataBaseName"]=$dbName;
10634
	#$conf["checkDataTableName"],字串,爲要檢查的資料表名稱
10635
	$conf["checkDataTableName"]="";
10636
	#$conf["conditionTargetName"]字串,用來判斷的資料表數值名稱
10637
	$conf["conditionTargetName"]="";
10638
	#$conf["startPoint"],字串,要執行的迴圈起點(資料的起始檢查點),須為整數.
10639
	$conf["startPoint"]="";
10640
	#$conf["endPoint"],字串,要執行的迴圈終點(資料的結束檢查點),須為整數.
10641
	$conf["endPoint"]="";
10642
	#可省略參數:
10643
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼.
10644
	#$conf["dbPassword"]=$dbPassword;
10645
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,可省略,若省略則代表使用預設的3306 port.
10646
	#$conf["dbPort"]="";
10647
	#$conf["otherConditionTargetName"]=array();#查詢欄位項目可用數值的其它條件欄位名稱,爲陣列值。須搭配 $conf["otherConditionTargetValue"] 一起使用
10648
	#$conf["otherConditionTargetName"]=array();
10649
	#$conf["otherConditionTargetValue"]=array();#查詢欄位項目可用數值的其它條件欄位數值,爲陣列值。須搭配 $conf["otherConditionTargetName"] 一起使用
10650
	#$conf["otherConditionTargetValue"]=array();
10651
	#參考資料:
10652
	#無.
10653
	#備註:
10654
	#無.
10655
	*/
10656
	public static function findUsableNumber($conf){
10657
 
10658
		#初始化要回傳的內容
10659
		$result=array();
10660
 
10661
		#取得當前執行的函數名稱
10662
		$result["function"]=__FUNCTION__;
10663
 
10664
		#如果 $conf 不為陣列
10665
		if(gettype($conf)!="array"){
10666
 
10667
			#設置執行失敗
10668
			$result["status"]="false";
10669
 
10670
			#設置執行錯誤訊息
10671
			$result["error"][]="\$conf變數須為陣列形態";
10672
 
10673
			#如果傳入的參數為 null
10674
			if($conf==null){
10675
 
10676
				#設置執行錯誤訊息
10677
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
10678
 
10679
				}#if end
10680
 
10681
			#回傳結果
10682
			return $result;
10683
 
10684
			}#if end
10685
 
10686
		#可用號碼的預設值,用int型態儲存.
10687
		(int)$userableNumber=0;
10688
 
10689
		#函式說明:
10690
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
10691
		#回傳結果:
10692
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
10693
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
10694
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
10695
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
10696
		#必填參數:
10697
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
10698
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("dbAddress","dbAccount","selectedDataBaseName","checkDataTableName","conditionTargetName","startPoint","endPoint");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
10699
		#可省略參數:
10700
		$conf["variableCheck"]["isexistMuti"]["variableType"]=array("string","string","string","string","string","string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
10701
		#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
10702
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
10703
		unset($conf["variableCheck"]["isexistMuti"]);
10704
 
10705
		#如果 $checkResult["status"] 等於 "false"
10706
		if($checkResult["status"]=="false"){
10707
 
10708
			#設置錯誤識別
10709
			$result["status"]="false";
10710
 
10711
			#設置錯誤訊息
10712
			$result["error"]=$checkResult;
10713
 
10714
			#回傳結果
10715
			return $result;
10716
 
10717
			}#if end
10718
 
10719
		#如果 $checkResult["passed"] 等於 "false"
10720
		if($checkResult["passed"]=="false"){
10721
 
10722
			#設置錯誤識別
10723
			$result["status"]="false";
10724
 
10725
			#設置錯誤訊息
10726
			$result["error"]=$checkResult;
10727
 
10728
			#回傳結果
10729
			return $result;
10730
 
10731
			}#if end
10732
 
10733
		#從$startPoint開始到$endPoint結束,供執行 $endPoint-$startPoint 次。
10734
		for($i=$conf["startPoint"];$i<=$conf["endPoint"];$i++){
10735
 
10736
			#更新可用號碼
10737
			$userableNumber=$i;
10738
 
10739
			#查詢目標號碼是否已存在
10740
			#函式說明:
10741
			#一次取得資料庫、表的資料
10742
			#回傳結果:
10743
			#$result["status"],執行結果"true"為成功;"false"為執行失敗。
10744
			#$result["error"],錯誤訊息陣列。
10745
			#$result["dataContent"],爲資料的內容。
10746
			#$result["dataContent"][$conf["WhereColumnName"][$i]][$dataSetNum]
10747
				#$dataSetNum 爲第$dataSetNum+1筆資料
10748
				#$conf["WhereColumnName"][$i] 爲第 $i+1 個欄位的名稱
10749
			#$result["dataCount"],爲取得的資料筆數。
10750
			#$result["sql"],執行的sql字串.
10751
			#必填參數:
10752
			$conf["db"]["fastGetDbData"]["dbAddress"]=$conf["dbAddress"];#爲dbServer的位置。
10753
			$conf["db"]["fastGetDbData"]["dbAccount"]=$conf["dbAccount"];#爲登入dbServer的帳號。
10754
			$conf["db"]["fastGetDbData"]["dbName"]=$conf["selectedDataBaseName"];#爲要存取的資料庫名稱
10755
			$conf["db"]["fastGetDbData"]["tableName"]=$conf["checkDataTableName"];#爲要存取的資料表名稱
10756
			$conf["db"]["fastGetDbData"]["columnYouWant"]=array($conf["conditionTargetName"]);#你想要的欄位!
10757
			#可省略參數:
10758
 
10759
			#如果 $conf["dbPassword"] 有設置
10760
			if(isset($conf["dbPassword"])){
10761
 
10762
				$conf["db"]["fastGetDbData"]["dbPassword"]=$conf["dbPassword"];#爲要存取dbServer的密碼
10763
 
10764
				}#if end
10765
 
10766
			#如果 $conf["dbPort"] 有設置
10767
			if(isset($conf["dbPort"])){
10768
 
10769
				$conf["db"]["fastGetDbData"]["dbPort"]=$conf["dbPort"];#爲要存取dbServer的port
10770
 
10771
				}#if end
10772
 
10773
			#要檢查可用數字的欄位為塞選的欄位
10774
			$conf["db"]["fastGetDbData"]["WhereColumnName"][]=$conf["conditionTargetName"];
10775
 
10776
			#如果 $conf["otherConditionTargetName"] 有設置
10777
			if(isset($conf["otherConditionTargetName"])){
10778
 
10779
				#針對 $conf["otherConditionTargetName"] 的每個元素 
10780
				foreach($conf["otherConditionTargetName"] as $columnName){
10781
 
10782
					$conf["db"]["fastGetDbData"]["WhereColumnName"][]=$columnName;#用於判斷語句的欄位項目陣列.
10783
 
10784
					}#foreach end
10785
 
10786
				}#if end
10787
 
10788
			#要檢查可用數字的欄位數值為塞選的欄位對應數值
10789
			$conf["db"]["fastGetDbData"]["WhereColumnValue"][]=$userableNumber;
10790
 
10791
			#如果 $conf["otherConditionTargetValue"] 有設置
10792
			if(isset($conf["otherConditionTargetValue"])){
10793
 
10794
				#針對每個 $conf["otherConditionTargetValue"] 元素
10795
				foreach($conf["otherConditionTargetValue"] as $columnValue){
10796
 
10797
					$conf["db"]["fastGetDbData"]["WhereColumnValue"][]=$columnValue;#用於判斷語句的欄位數值陣列,若與LIKE搭配,則可以在關鍵自字串的左右名加上「%」符號,這樣就可以搜尋具有該字串的內容.
10798
 
10799
					}#foreach end
10800
 
10801
				}#if end
10802
 
10803
			#$conf["db"]["fastGetDbData"]["WhereColumnCombine"]=array("");#用於判斷語句當中需要()起來的判斷式,須爲陣列值,"s"代表「(」,"e"代表「)」 ,若無則須設爲""。
10804
			#$conf["db"]["fastGetDbData"]["WhereColumnOperator"]=array("");#用於判斷語句的比較符號陣列,可以用的符號有「"="、">"、"<"、"LIKE"、"NOT LIKE"」,預設都爲「=」。
10805
			#$conf["db"]["fastGetDbData"]["WhereColumnAndOr"]=array("");#用於判斷語句條件之間成立的條件是AND還是OR,須爲陣列值。其數量應爲要判斷的欄位數量減一。
10806
			#$conf["db"]["fastGetDbData"]["orderItem"]="";#爲排序的項目依據,若要用隨機抽樣,可以用"rand()",可省略。
10807
			#$conf["db"]["fastGetDbData"]["ascORdesc"]="";#爲要低增還是遞減排序,asc爲遞增;desc爲遞減。
10808
			#$conf["db"]["fastGetDbData"]["numberStart"]="0";#為從第幾筆開始讀取,預設為0,代筆第一筆。
10809
			#$conf["db"]["fastGetDbData"]["numLimit"]="30";#為要取幾筆資料,可以省略,省略則表示不限制數目。
10810
			#$conf["db"]["fastGetDbData"]["groupBy"]=array("");#爲要以哪幾個欄爲作爲分羣的依據(欄位相同的數值僅會取出一筆)。
10811
			$db["fastGetDbData"]=db::fastGetDbData($conf["db"]["fastGetDbData"]);
10812
			unset($conf["db"]["fastGetDbData"]);
10813
 
10814
			#如果取得資料失敗
10815
			if($db["fastGetDbData"]["status"]=="false"){
10816
 
10817
				#設置錯誤識別
10818
				$result["status"]="false";
10819
 
10820
				#設置錯誤訊息
10821
				$result["error"]=$db["fastGetDbData"];
10822
 
10823
				#回傳結果
10824
				return $result;
10825
 
10826
				}#if end
10827
 
10828
			#如果該條件下沒有符合的資料
10829
			if($db["fastGetDbData"]["dataCount"]==0){
10830
 
10831
				#取得可用的編號
10832
				$result["usableNumber"]=$i;
10833
 
10834
				#設置有找到符合的數字
10835
				$result["founded"]="true";
10836
 
10837
				#跳出迴圈
10838
				break;
10839
 
10840
				}#if end
10841
 
10842
			#反之該條件下有符合的資料
10843
			else{
10844
 
10845
				#設置沒有找到符合的數字
10846
				$result["founded"]="false";
10847
 
10848
				}#else end
10849
 
10850
			}#for end
10851
 
10852
		#執行到這邊代表執行正常
10853
		$result["status"]="true";
10854
 
10855
		#回傳結果
10856
		return $result;
10857
 
10858
		}#function findUsableNumber end
10859
 
10860
	/*
10861
	#函式說明:
10862
	#取得特定的資料表資料
10863
	#回傳的參數:
10864
	#$result["status"],執行結果"true"為成功;"false"為執行失敗。
10865
	#$result["error"],錯誤訊息陣列。
10866
	#$result["function"],當前執行的函數名稱
10867
	#$result["sql"],執行的sql語法
10868
	#$result["sqlQueryResult"]#爲資料連線處理完畢之後的結果,需要 sendQueryDataToVariabele 涵式來解析。
10869
	#$result["dataCount"]#符合條件的資料筆數
10870
	#必填參數:
10871
	#$conf["dbAddress"],字串,爲mysql-Server的位置。
10872
	$conf["dbAddress"]=$dbAddress;
10873
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號。
10874
	$conf["dbAccount"]=$dbAccount;
10875
	#$conf["selectedDataBaseName"],字串,要選取的資料庫名稱。
10876
	$conf["selectedDataBaseName"]=$dbName;
10877
	#$conf["selectedDataTableName"],字串,爲欲選擇的資料表名稱。
10878
	$conf["selectedDataTableName"]="";
10879
	#可省略參數:	
10880
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼.
10881
	#$conf["dbPassword"]=$dbPassword;
10882
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,可省略,若省略則代表使用預設的3306 port.
10883
	#$conf["dbPort"]="";
10884
	#$conf["WhereColumnCombine"],字串陣列,用於判斷語句當中需要()起來的判斷式,須爲陣列值,"s"代表「(」,"e"代表「)」 ,若無則須設爲""。
10885
	#$conf["WhereColumnCombine"]=array("");
10886
	#$conf["WhereColumnName"],字串陣列,用於判斷語句的欄位項目陣列。
10887
	#$conf["WhereColumnName"]=array("");
10888
	#$conf["WhereColumnOperator"],字串陣列,用於判斷語句的比較符號陣列,可以用的符號有「"="、">"、"<"、"LIKE"、"NOT LIKE"」,預設都爲「=」。
10889
	#$conf["WhereColumnOperator"]=array("");
10890
	#$conf["WhereColumnValue"],字串陣列,用於判斷語句的欄位數值陣列,若與LIKE搭配,則可以在關鍵自字串的左右名加上「%」符號,這樣就可以搜尋具有該字串的內容。
10891
	#$conf["WhereColumnValue"]=array("");
10892
	#$conf["WhereColumnAndOr"],字串陣列,用於判斷語句條件之間成立的條件是AND還是OR,須爲陣列值。其數量應爲要判斷的欄位數量減一。
10893
	#$conf["WhereColumnAndOr"]=array("");
10894
	#$conf["whereIn"],二維字串陣列,為每個in語句的內容,特定欄位數值等於陣列元素之一。array(array("colName",array("a","b","c")));代表欄位colName的值為a,b,c三者之一.
10895
	#$conf["whereIn"]=array(array("colName",array("a","b","c")));
10896
	#$conf["whereNotIn"],二維字串陣列,為每個not in語句的內容,array(array("colName",array("a","b","c")));代表欄位colName的值不為a,b,c三者之一.
10897
	#$conf["whereNotIn"]=array(array("colName",array("a","b","c")));
10898
	#$conf["orderItem"],字串,爲排序的項目依據,若要用隨機抽樣,可以用"rand()",可省略。
10899
	#$conf["orderItem"]="";
10900
	#$conf["ascORdesc"],字串,爲要低增還是遞減排序,asc爲遞增;desc爲遞減。
10901
	#$conf["ascORdesc"]="";
10902
	#$conf["numberStart"],字串,為從第幾筆開始讀取,預設為0,代筆第一筆。
10903
	#$conf["numberStart"]="0";
10904
	#$conf["number"],字串,為要取幾筆資料,可以省略,省略則表示不限制數目。
10905
	#$conf["number"]="30"
10906
	#$conf["groupBy"],字串陣列,爲要以哪幾個欄爲作爲分羣的依據(欄位相同的數值僅會取出一筆)。
10907
	#$conf["groupBy"]=array("");
10908
	#參考資料:
10909
	#http://stackoverflow.com/questions/5021243/mysql-query-multiple-group-by
10910
	#備註:
10911
	#無.
10912
	*/
10913
	public static function dataTableSelect(&$conf){
10914
 
10915
		#初始化要回傳的變數
10916
		$result=array();
10917
 
10918
		#取得當前執行的函數名稱
10919
		$result["function"]=__FUNCTION__;
10920
 
10921
		#如果 $conf 不為陣列
10922
		if(gettype($conf)!="array"){
10923
 
10924
			#設置執行失敗
10925
			$result["status"]="false";
10926
 
10927
			#設置執行錯誤訊息
10928
			$result["error"][]="\$conf變數須為陣列形態";
10929
 
10930
			#如果傳入的參數為 null
10931
			if($conf==null){
10932
 
10933
				#設置執行錯誤訊息
10934
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
10935
 
10936
				}#if end
10937
 
10938
			#回傳結果
10939
			return $result;
10940
 
10941
			}#if end
10942
 
10943
		#檢查參數
10944
		#函式說明:
10945
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
10946
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
10947
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
10948
		#$result["function"],當前執行的函式名稱.
10949
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
10950
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
10951
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
10952
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
10953
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
10954
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
10955
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
10956
		#必填參數:
10957
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
10958
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
10959
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
10960
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("dbAddress","dbAccount","selectedDataBaseName","selectedDataTableName");
10961
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
10962
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string","string");
10963
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
10964
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
10965
		#可省略參數:
10966
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
10967
		#$conf["canBeEmptyString"]="false";
10968
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
10969
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("dbPassword","dbPort","WhereColumnCombine","WhereColumnName","WhereColumnOperator","WhereColumnValue","WhereColumnAndOr","orderItem","ascORdesc","numberStart","number","groupBy","whereIn","whereNotIn");
10970
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
10971
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","array","array","array","array","array","string","string","string","string","array","array","array");
10972
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
10973
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null,null,null,null,null,null,null,null,"0",null,null,null,null);
10974
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
10975
		$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("WhereColumnName","WhereColumnValue");
10976
		$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("WhereColumnValue","WhereColumnOperator");
10977
		#參考資料:
10978
		#array_keys=>http://php.net/manual/en/function.array-keys.php
10979
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
10980
		unset($conf["variableCheck::checkArguments"]);
10981
 
10982
		#如果檢查失敗
10983
		if($checkResult["status"]==="false"){
10984
 
10985
			#設置執行失敗的訊息
10986
			$result["status"]="false";
10987
 
10988
			#設置錯誤訊息
10989
			$result["error"]=$checkResult;
10990
 
10991
			#回傳結果
10992
			return $result;
10993
 
10994
			}#if end
10995
 
10996
		#如果檢查不通過
10997
		if($checkResult["passed"]==="false"){
10998
 
10999
			#設置執行失敗的訊息
11000
			$result["status"]="false";
11001
 
11002
			#設置錯誤訊息
11003
			$result["error"]=$checkResult;
11004
 
11005
			#回傳結果
11006
			return $result;
11007
 
11008
			}#if end
11009
 
11010
		#連線到資料庫
11011
		#函式說明:
11012
		#連線到資料庫,結果會回傳一個陣列
11013
		#$result["status"],若連線成功則爲"true",連線失敗則爲"false".
11014
		#$result["connectInformation"],爲回傳的mysql連線資訊.
11015
		#$result["error"],錯誤訊息	.
11016
		#$result["function"],當前執行的函數名稱.	
11017
		#必填參數:
11018
		$conf["db"]["dbConnect"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
11019
		$conf["db"]["dbConnect"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
11020
		#$conf["dbName"],字串,爲要連的資料庫名稱
11021
		$conf["db"]["dbConnect"]["dbName"]=$conf["selectedDataBaseName"];
11022
		#可省略參數:
11023
 
11024
		#如果 $conf["dbPassword"] 有設定
11025
		if(isset($conf["dbPassword"])){
11026
 
11027
			$conf["db"]["dbConnect"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
11028
 
11029
			}#if end
11030
 
11031
		#如果 $conf["dbPort"] 有設定
11032
		if(isset($conf["dbPort"])){
11033
 
11034
			$conf["db"]["dbConnect"]["dbPort"]=$conf["dbPort"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
11035
 
11036
			}#if end
11037
 
11038
		$con=db::dbConnect($conf["db"]["dbConnect"]);
11039
		unset($conf["db"]);
11040
 
11041
		#如果連線到資料庫失敗
11042
		if($con["status"]==="false"){
11043
 
11044
			#設置執行失敗
11045
			$result["status"]="false";
11046
 
11047
			#設置執行錯誤訊息
11048
			$result["error"]=$con;
11049
 
11050
			#回傳結果
11051
			return $result;
11052
 
11053
			}#if end
11054
 
11055
		#var_dump($con);	
11056
 
11057
		#取得mysqli物件
11058
		$mysqli=$con["connectInformation"];
11059
 
11060
		#如果 $conf["WhereColumnAndOr"] 沒有設定,但是有指定判斷條件的欄位
11061
		if(!isset($conf["WhereColumnAndOr"])  && isset($conf["WhereColumnName"])){
11062
 
11063
			#則$conf["WhereColumnAndOr"]爲有 count($conf["WhereColumnName"])-1 個 "AND" 的字串陣列
11064
			for($i=0;$i<(count($conf["WhereColumnName"])-1);$i++){
11065
 
11066
				$conf["WhereColumnAndOr"][$i]="AND";
11067
 
11068
				}#for end
11069
 
11070
			}#if end
11071
 
11072
		#如果 $conf["WhereColumnCombine"] 沒有設定,但是有指定判斷條件的欄位
11073
		if(!isset($conf["WhereColumnCombine"])  && isset($conf["WhereColumnName"])){
11074
 
11075
			#則 $conf["WhereColumnCombine"] 爲有 count($conf["WhereColumnName"]) 個 "" 的字串陣列
11076
			for($i=0;$i<count($conf["WhereColumnName"]);$i++){
11077
 
11078
				$conf["WhereColumnCombine"][$i]="";
11079
 
11080
				}#for end
11081
 
11082
			}#if end
11083
 
11084
		#如果 $conf["WhereColumnOperator"] 沒有設定,但是有設定判斷條件的欄位
11085
		if(!isset($conf["WhereColumnOperator"]) && isset($conf["WhereColumnName"])){
11086
 
11087
			#則 $conf["WhereColumnOperator"] 爲有 count($conf["WhereColumnName"]) 個 "" 的字串陣列
11088
			for($i=0;$i<count($conf["WhereColumnName"]);$i++){
11089
 
11090
				$conf["WhereColumnOperator"][$i]="=";
11091
 
11092
				}#for end
11093
 
11094
			}#if end
11095
 
11096
		#如果 $conf"ascORdesc"] 沒有設定,則不指定遞增或遞減排序
11097
		if(!isset($conf["ascORdesc"])){
11098
 
11099
			#排序變數爲空字串
11100
			$conf["ascORdesc"]="";
11101
 
11102
			}#if end
11103
 
11104
		#如果 $conf["number"] 沒設定,則不限定要取幾筆資料
11105
		if(!isset($conf["number"])){
11106
 
11107
			#限定筆數爲空字串
11108
			$queryStringLimit = "";
11109
 
11110
			}#if end 
11111
 
11112
		#如果 $conf["number"] 不爲空,則限定要取出幾筆
11113
		else{
11114
 
11115
			#如果 $conf["numberStart"] 有設定
11116
			if(isset($conf["numberStart"])){
11117
 
11118
				$queryStringLimit  = " LIMIT ".$conf["numberStart"]." , ".$conf["number"]." ";
11119
 
11120
				}#if end
11121
 
11122
			#反之 $conf["numberStart"] 沒有設定
11123
			else{
11124
 
11125
				$queryStringLimit  = " LIMIT 0 , ".$conf["number"]." ";
11126
 
11127
				}#else end
11128
 
11129
			}#else end
11130
 
11131
		#如果存在 $conf["orderItem"] 
11132
		if(isset($conf["orderItem"])){
11133
 
11134
			#如果排序的依據是 rand() 或 RAND()
11135
			if($conf["orderItem"] == "rand()" || $conf["orderItem"] == "RAND()"){
11136
 
11137
				# 依 $order 為排序依據,進行 隨機 排序
11138
				$queryStringOrder  = " ORDER BY ".$conf["orderItem"]." ".$conf["ascORdesc"]." "; 			
11139
 
11140
				}#if end
11141
 
11142
			#反之 $order 為排序依據
11143
			else{
11144
 
11145
				#爲 acs 或 desc, 依 $order 為排序依據,進行 asc OR desc 排序
11146
				$queryStringOrder  = " ORDER BY ".$conf["orderItem"]." ".$conf["ascORdesc"]." "; 
11147
 
11148
				}#else end
11149
 
11150
			}#if end
11151
 
11152
		#反之 不存在
11153
		else{
11154
 
11155
			#預設為不指定
11156
			$queryStringOrder="";
11157
 
11158
			}#else end
11159
 
11160
		#如果有設定 $conf["WhereColumnName"] 參數
11161
		if(isset($conf["WhereColumnName"])){
11162
 
11163
			#條件判斷的起始語句
11164
			$conf["whereCondition"]="WHERE ";
11165
 
11166
			#有幾個判斷用的欄位就執行幾次
11167
			for($i=0;$i<count($conf["WhereColumnName"]);$i++){
11168
 
11169
				#如果是左掛號
11170
				if($conf["WhereColumnCombine"][$i]=="("){
11171
 
11172
					$conf["whereCondition"]=$conf["whereCondition"]." ".$conf["WhereColumnCombine"][$i]." ";
11173
 
11174
					}#if end
11175
 
11176
				#如果欄位數值不是字串,也不是NULL
11177
				if(gettype($conf["WhereColumnValue"][$i])!=="string" && $conf["WhereColumnValue"][$i]!==NULL){
11178
 
11179
					#設置執行失敗
11180
					$result["status"]="false";
11181
 
11182
					#設置執行錯誤
11183
					$result["error"][]="WhereColumnValue 參數須為陣列字串";
11184
 
11185
					#回傳結果
11186
					return $result;
11187
 
11188
					}#if end
11189
 
11190
				#結合各個條件語句
11191
				$conf["whereCondition"]=$conf["whereCondition"]." `".$conf["WhereColumnName"][$i]."` ";
11192
				$conf["whereCondition"]=$conf["whereCondition"]." ".$conf["WhereColumnOperator"][$i]." ";
11193
				$conf["whereCondition"]=$conf["whereCondition"]." '".mysqli_real_escape_string($mysqli,$conf["WhereColumnValue"][$i])."' ";
11194
 
11195
				#如果右掛號
11196
				if($conf["WhereColumnCombine"][$i]==")"){
11197
 
11198
					$conf["whereCondition"]=$conf["whereCondition"]." ".$conf["WhereColumnCombine"][$i]." ";
11199
 
11200
					}#if end
11201
 
11202
				#如果不是最後一筆項目,就放置AND or OR
11203
				if($i<count($conf["WhereColumnName"])-1){
11204
 
11205
					$conf["whereCondition"]=$conf["whereCondition"]." ".$conf["WhereColumnAndOr"][$i]." ";
11206
 
11207
					}#if end	
11208
 
11209
				}#for end					
11210
 
11211
			}#if end
11212
 
11213
		#反之,套件變數設爲空字串
11214
		else{
11215
 
11216
			$conf["whereCondition"]="";
11217
 
11218
			}#else end
11219
 
11220
		#初始化 where in 語句
11221
		$whereIn=" ";
11222
 
11223
		#如果 $conf["whereIn"] 存在
11224
		if(isset($conf["whereIn"])){
11225
 
11226
			#如果 $conf["whereCondition"] 等於 空
11227
			if($conf["whereCondition"]!==""){
11228
 
11229
				#先加上串接的 AND
11230
				$whereIn=$whereIn."AND ";
11231
 
11232
				}#if end
11233
 
11234
			#反之為第一個where條件
11235
			else{
11236
 
11237
				#設置where開頭
11238
				$whereIn=$whereIn."where ";
11239
 
11240
				}#else end
11241
 
11242
			#針對每個要用 in 條件判斷的語句
11243
			for($i=0;$i<count($conf["whereIn"]);$i++){
11244
 
11245
				#取得要判斷的欄位
11246
				$col=$conf["whereIn"][$i][0];
11247
 
11248
				#加上 in 的開頭語句
11249
				$whereIn=$whereIn."`".$col."` in(";
11250
 
11251
				#針對每個 in 的值
11252
				for($j=0;$j<count($conf["whereIn"][$i][1]);$j++){
11253
 
11254
					#串接條件
11255
					$whereIn=$whereIn."'".mysqli_real_escape_string($mysqli,$conf["whereIn"][$i][1][$j])."'";
11256
 
11257
					#如果不是最後一個條件
11258
					if($j!==count($conf["whereIn"][$i][1])-1){
11259
 
11260
						#後面還有條件
11261
						$whereIn=$whereIn.",";
11262
 
11263
						}#if end
11264
 
11265
					#反之是最後一個條件
11266
					else{
11267
 
11268
						#後面沒有條件
11269
						$whereIn=$whereIn.")";
11270
 
11271
						}#else end
11272
 
11273
					}#for end
11274
 
11275
				}#for end
11276
 
11277
			#如果沒有in的條件
11278
			if($whereIn===" AND `".$col."` in(" OR $whereIn===" AND " OR $whereIn===" " OR $whereIn===" where "){
11279
 
11280
				#設為 ""
11281
				$whereIn="";
11282
 
11283
				}#if end
11284
 
11285
			}#if end
11286
 
11287
		#串接 where in 語句
11288
		$conf["whereCondition"]=$conf["whereCondition"].$whereIn;
11289
 
11290
		#初始化 where not in 語句
11291
		$whereNotIn=" ";	
11292
 
11293
		#如果 $conf["whereNotIn"] 存在
11294
		if(isset($conf["whereNotIn"])){
11295
 
11296
			#如果 $conf["whereCondition"] 等於 空
11297
			if(str_replace(" ","",$conf["whereCondition"])!==""){
11298
 
11299
				#先加上串接的 AND
11300
				$whereNotIn=$whereNotIn."AND ";
11301
 
11302
				}#if end
11303
 
11304
			#反之為第一個where條件
11305
			else{
11306
 
11307
				#設置where開頭
11308
				$whereNotIn=$whereNotIn."where ";
11309
 
11310
				}#else end
11311
 
11312
			#針對每個要用 in 條件判斷的語句
11313
			for($i=0;$i<count($conf["whereNotIn"]);$i++){
11314
 
11315
				#取得要判斷的欄位
11316
				$col=$conf["whereNotIn"][$i][0];
11317
 
11318
				#加上 in 的開頭語句
11319
				$whereNotIn=$whereNotIn."`".$col."` not in(";
11320
 
11321
				#針對每個 in 的值
11322
				for($j=0;$j<count($conf["whereNotIn"][$i][1]);$j++){
11323
 
11324
					#串接條件
11325
					$whereNotIn=$whereNotIn."'".mysqli_real_escape_string($mysqli,$conf["whereNotIn"][$i][1][$j])."'";
11326
 
11327
					#如果不是最後一個條件
11328
					if($j!==count($conf["whereNotIn"][$i][1])-1){
11329
 
11330
						#後面還有條件
11331
						$whereNotIn=$whereNotIn.",";
11332
 
11333
						}#if end
11334
 
11335
					#反之是最後一個條件
11336
					else{
11337
 
11338
						#後面沒有條件
11339
						$whereNotIn=$whereNotIn.")";
11340
 
11341
						}#else end
11342
 
11343
					}#for end
11344
 
11345
				}#for end
11346
 
11347
			#如果沒有in的條件
11348
			if($whereNotIn===" AND `".$col."` not in(" OR $whereNotIn===" AND " OR $whereNotIn===" " OR $whereNotIn===" where "){
11349
 
11350
				#設為 ""
11351
				$whereNotIn="";
11352
 
11353
				}#if end
11354
 
11355
			}#if end
11356
 
11357
		#串接 where not in 語句
11358
		$conf["whereCondition"]=$conf["whereCondition"].$whereNotIn;
11359
 
11360
		#如果 $conf["groupBy"] 有指定
11361
		if(isset($conf["groupBy"])){
11362
 
11363
			#初始化分類語句的字串
11364
			$groupByQueryStr="GROUP BY ";
11365
 
11366
			#設定要以哪些欄位爲分組的依據
11367
			for($i=0;$i<count($conf["groupBy"]);$i++){
11368
 
11369
				#如果不是最後一筆
11370
				if($i!=count($conf["groupBy"])-1){
11371
 
11372
					#語法裡面含有 , 代表還有其他欄位
11373
					$groupByQueryStr=$groupByQueryStr." `".$conf["groupBy"][$i]."` , ";
11374
 
11375
					}#if end
11376
 
11377
				#反之是最後一筆資料
11378
				else{
11379
 
11380
					#語法結尾沒有 , 代表沒有其他欄位
11381
					$groupByQueryStr=$groupByQueryStr." `".$conf["groupBy"][$i]."` ";
11382
 
11383
					}#else end
11384
 
11385
				}#for end
11386
 
11387
			#取得分組的語法
11388
			$conf["groupBy"]=$groupByQueryStr;
11389
 
11390
			}#if end
11391
 
11392
		#如果 $conf["groupBy"] 沒有設定
11393
		else{
11394
 
11395
			#則將其設爲空值
11396
			$conf["groupBy"]="";
11397
 
11398
			}#else end
11399
 
11400
		#要執行的sql語法
11401
		$result["sql"]=$queryStringFinal="SELECT * FROM `".$conf["selectedDataBaseName"]."`.`".$conf["selectedDataTableName"]."` ".$conf["whereCondition"]." ".$conf["groupBy"]." ".$queryStringOrder.$queryStringLimit;
11402
 
11403
		#執行 SQL 語法
11404
		#函式說明:
11405
		#執行mysql指令
11406
		#回傳結果::
11407
		#$result["status"],"true"為執行成功;"false"為執行失敗。
11408
		#$result["error"],錯誤訊息的陣列
11409
		#$result["function"],當前執行的涵式
11410
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
11411
		#$result["queryString"],mysql查詢的語言
11412
		#查詢號的解果,需要解析。
11413
		#必填參數:
11414
		$conf["db::execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
11415
		$conf["db::execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
11416
		$conf["db::execMysqlQuery"]["dbSql"]=$queryStringFinal;#要執行sql語法
11417
		#可省略參數:
11418
 
11419
		#如果 $conf["dbPassword"] 有設定
11420
		if(isset($conf["dbPassword"])){
11421
 
11422
			$conf["db::execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
11423
 
11424
			}#if end
11425
 
11426
		#如果 $conf["dbPort"] 有設定
11427
		if(isset($conf["dbPort"])){
11428
 
11429
			$conf["db::execMysqlQuery"]["dbPort"]=$conf["dbPort"];#爲連線到mysql-Server時要使用的port,可省略,若省略則代表預設的3306.
11430
 
11431
			}#if end
11432
		#$conf["dbLink"],物件,mysqli物件,由mysqli_connect()回傳的物件內容,若為數值則改用賬號密碼等資訊進行連線,反之則沿用連線物件.
11433
		$conf["db::execMysqlQuery"]["dbLink"]=$mysqli;			
11434
		$execMysqlQuery=db::execMysqlQuery($conf["db::execMysqlQuery"]);
11435
		unset($conf["db::execMysqlQuery"]);
11436
 
11437
		#如果執行錯誤
11438
		if($execMysqlQuery["status"]=="false"){
11439
 
11440
			#設置執行錯誤的識別
11441
			$result["status"]="false";
11442
 
11443
			#設置錯誤訊息
11444
			$result["error"]=$execMysqlQuery;
11445
 
11446
			#回傳錯誤訊息
11447
			return $result;
11448
 
11449
			}#if end
11450
 
11451
		#取得查詢後的結果
11452
		$result["sqlQueryResult"]=$execMysqlQuery["queryResource"];
11453
 
11454
		#取得符合條件的資料筆數
11455
		$result["dataCount"]=mysqli_num_rows($execMysqlQuery["queryResource"]);
11456
 
11457
		#執行到這邊代表執行成功
11458
		$result["status"]="true";
11459
 
11460
		#回傳查詢的結果;	
11461
		return $result;	
11462
 
11463
		}#end dataTableSelect
11464
 
11465
	/*
11466
	#函式說明:
11467
	#解析 dataTableSelect($conf) 後的結果,亦即將執行sql語法後所得到的結果解析放進變數裏面
11468
	#回傳結果:
11469
	#$result["status"],執行結果"true"為成功;"false"為失敗
11470
	#$result["error"],錯誤訊息
11471
	#$result["function"],儲存當前函數名稱
11472
	#$result["dataColumnName"],為資料欄位的名稱陣列.
11473
		#$result["dataColumnName"][$i]代表第一個欄位名稱.
11474
	#$result["dataContent"],爲資料的內容。
11475
	#$result["dataContent"][$conf["tableValueName"][$i]][$dataSetNum],
11476
		#$conf["tableValueName"][$i] 爲第 $i+1 個欄位的名稱.
11477
		#$dataSetNum 爲第$dataSetNum+1筆資料.
11478
		#若欄位不存在則會以空字串替代.
11479
	#$result["dataCount"],爲取得的資料筆數。
11480
	#必填參數:
11481
	$conf["sqlQueryResult"],object,爲執行sql語法所獲得的查詢結果。
11482
	$conf["sqlQueryResult"]="";
11483
	$conf["tableValueName"],字串陣列,爲該資料表列項目的每一項名稱,須爲陣列值,若為「array("*")」則代表所有欄位.
11484
	$conf["tableValueName"]=array();
11485
	$conf["dbAddress"],字串,爲mysql-Server的位置
11486
	$conf["dbAddress"]=$dbAddress;
11487
	$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號
11488
	$conf["dbAccount"]=$dbAccount;
11489
	#可省略參數:
11490
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼.
11491
	#$conf["dbPassword"]=$dbPassword;
11492
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,可省略,若省略則代表使用預設的3306 port.
11493
	#$conf["dbPort"]="";
11494
	#$conf["valueName"],字串陣列,爲該資料表列項目的每一項所要對應的變數名稱,預設為欄位的名稱($conf["tableValueName"]).
11495
	#$conf["valueName"]=$conf["tableValueName"];
11496
	#參考資料:
11497
	#http://www.w3school.com.cn/php/func_mysql_fetch_array.asp => 解析取得的資料表欄位時,能夠選擇回傳含有欄位名稱與數字代表的key.
11498
	#備註:
11499
	#無.
11500
	*/
11501
	public static function sendQueryDataToVariabele(&$conf){
11502
 
11503
		#初始化要回傳的內容
11504
		$result=array();
11505
 
11506
		#取得當前執行的函數名稱
11507
		$result["function"]=__FUNCTION__;
11508
 
11509
		#如果 $conf 不為陣列
11510
		if(gettype($conf)!="array"){
11511
 
11512
			#設置執行失敗
11513
			$result["status"]="false";
11514
 
11515
			#設置執行錯誤訊息
11516
			$result["error"][]="\$conf變數須為陣列形態";
11517
 
11518
			#如果傳入的參數為 null
11519
			if($conf==null){
11520
 
11521
				#設置執行錯誤訊息
11522
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
11523
 
11524
				}#if end
11525
 
11526
			#回傳結果
11527
			return $result;
11528
 
11529
			}#if end
11530
 
11531
		#檢查參數
11532
		#函式說明:
11533
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
11534
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
11535
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
11536
		#$result["function"],當前執行的函式名稱.
11537
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
11538
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
11539
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
11540
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
11541
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
11542
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
11543
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
11544
		#必填參數:
11545
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
11546
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
11547
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
11548
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("dbAddress","dbAccount","sqlQueryResult","tableValueName");
11549
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
11550
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","object","array");
11551
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
11552
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
11553
		#可省略參數:
11554
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
11555
		#$conf["canBeEmptyString"]="false";
11556
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
11557
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("dbPassword","dbPort","valueName");
11558
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
11559
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","array");
11560
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
11561
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null,"\$conf[\"tableValueName\"]");
11562
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
11563
		$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("valueName","tableValueName");
11564
		#參考資料:
11565
		#array_keys=>http://php.net/manual/en/function.array-keys.php
11566
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
11567
		unset($conf["variableCheck::checkArguments"]);
11568
 
11569
		#如果檢查失敗
11570
		if($checkResult["status"]=="false"){
11571
 
11572
			#設置執行失敗的訊息
11573
			$result["status"]="false";
11574
 
11575
			#設置錯誤訊息
11576
			$result["error"]=$checkResult;
11577
 
11578
			#回傳結果
11579
			return $result;
11580
 
11581
			}#if end
11582
 
11583
		#如果檢查不通過
11584
		if($checkResult["passed"]=="false"){
11585
 
11586
			#設置執行失敗的訊息
11587
			$result["status"]="false";
11588
 
11589
			#設置錯誤訊息
11590
			$result["error"]=$checkResult;
11591
 
11592
			#回傳結果
11593
			return $result;
11594
 
11595
			}#if end
11596
 
11597
		#給予初始值表示從0筆開始統計
11598
		$dataSetNum=0;
11599
 
11600
		#取得資料表的欄位數量
11601
		$columnCounts=count($conf["tableValueName"]);
11602
 
11603
		#初始化識別是否要匯出全部欄位的變數
11604
		$exportAll="false";
11605
 
11606
		#初始化儲存取得的欄位名稱陣列
11607
		$result["dataColumnName"]=array();
11608
 
11609
		#如果剛好只有一個元素
11610
		if($columnCounts==1){
11611
 
11612
			#如果第一個元素為 "*"
11613
			if($conf["tableValueName"][0]=="*"){
11614
 
11615
				#則代表要全部欄位均匯出.
11616
				$exportAll="true";
11617
 
11618
				#初始化計數的變數
11619
				$dataSetNum=0;
11620
 
11621
				#將讀取到的資料一次只讀取一列
11622
				while($row = mysqli_fetch_array($conf["sqlQueryResult"])){
11623
 
11624
					#筆數加1
11625
					$dataSetNum++;
11626
 
11627
					#針對每個欄位
11628
					foreach($row as $columnName => $columnValue){
11629
 
11630
						#取得欄位的內容並用欄位名稱作為key
11631
						$result["dataContent"][$columnName][]=$columnValue;
11632
 
11633
						#如果 $dataSetNum 等於 1
11634
						#亦即第一筆資料
11635
						if($dataSetNum==1 && gettype($columnName)!="integer"){
11636
 
11637
							#取得每個欄位名稱
11638
							$result["dataColumnName"][]=$columnName;
11639
 
11640
							}#if end
11641
 
11642
						}#foreach end
11643
 
11644
					}#while end
11645
 
11646
				#將資料筆數放進 $result["dataCount"] 裏面
11647
				$result["dataCount"]=$dataSetNum;
11648
 
11649
				}#if end
11650
 
11651
			}#if end
11652
 
11653
		#如果 $exportAll 等於 "fasle" 則代表要根據需求匯出指定的欄位.
11654
		if($exportAll=="false"){
11655
 
11656
			#如果 $conf["valueName"] 沒有設置
11657
			if(!isset($conf["valueName"])){
11658
 
11659
				#預設為 $conf["tableValueName"]
11660
				$conf["valueName"]=$conf["tableValueName"];
11661
 
11662
				}#if end
11663
 
11664
			#取得每個欄位名稱
11665
			$result["dataColumnName"]=$conf["tableValueName"];
11666
 
11667
			#將讀取到的資料一次只讀取一列
11668
			while($row = mysqli_fetch_array($conf["sqlQueryResult"])){
11669
 
11670
				#$i筆項列資料,則運行$i次。
11671
				for($i=0;$i<$columnCounts;$i++){			
11672
 
11673
					#如果欄位不存在
11674
					if(!isset($row[$conf["tableValueName"][$i]])){
11675
 
11676
						#將解析的資料內容用空字串替代放進$result["dataContent"]變數裏面
11677
						$result["dataContent"][$conf["valueName"][$i]][$dataSetNum] = "";
11678
 
11679
						}#if end
11680
 
11681
					#將解析的資料內容結果放進$result["dataContent"]變數裏面
11682
					$result["dataContent"][$conf["valueName"][$i]][$dataSetNum] = $row[$conf["tableValueName"][$i]];	
11683
 
11684
					}#for end
11685
 
11686
				#資料筆數編號加1
11687
				$dataSetNum++;	
11688
 
11689
				}#while end
11690
 
11691
			#將資料筆數放進 $result["dataCount"] 裏面
11692
			$result["dataCount"]=$dataSetNum;
11693
 
11694
			}#if end
11695
 
11696
 
11697
 
11698
		#執行道這邊代表執行成功
11699
		$result["status"]="true";
11700
 
11701
		#將取得的結果回傳
11702
		return $result;
11703
 
11704
		}#function sendQueryDataToVariabele end
11705
 
11706
	/*
11707
	#函式說明:
11708
	#一次取得資料庫、表的資料
11709
	#回傳結果:
11710
	#$result["status"],執行結果"true"為成功;"false"為執行失敗。
11711
	#$result["error"],錯誤訊息陣列。
11712
	#$result["function"],當前執行的漢書名稱.
11713
	#$result["argu"],使用的參數.
11714
	#$result["dataColumnName"],抓取的資料欄位名稱陣列.
11715
		#$result["dataColumnName"][$i]代表第$i+1個欄位名稱
11716
	#$result["dataContent"],爲資料的內容。
11717
	#$result["dataContent"][$conf["WhereColumnName"][$i]][$dataSetNum]
11718
		#$dataSetNum 爲第$dataSetNum+1筆資料
11719
		#$conf["WhereColumnName"][$i] 爲第 $i+1 個欄位的名稱
11720
	#$result["dataCount"],爲取得的資料筆數。
11721
	#$result["sql"],執行的sql字串.
11722
	#必填參數:
11723
	#$conf["dbAddress"],字串,爲dbServer的位置。
11724
	$conf["dbAddress"]=$dbAddress;
11725
	#$conf["dbAccount"],字串,爲登入dbServer的帳號。
11726
	$conf["dbAccount"]=$dbAccount;
11727
	#$conf["dbName"],字串,爲要存取的資料庫名稱
11728
	$conf["dbName"]=$dbName;
11729
	#$conf["tableName"],字串,爲要存取的資料表名稱
11730
	$conf["tableName"]="";
11731
	#$conf["columnYouWant"],字串陣列,你想要的欄位!,若設為「array("*")」則代表全部欄位.
11732
	$conf["columnYouWant"]=array();
11733
	#可省略參數:
11734
	#$conf["dbPassword"],字串,爲要存取dbServer的密碼.
11735
	#$conf["dbPassword"]=$dbPassword;
11736
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,可省略,若省略則代表使用預設的3306 port.
11737
	#$conf["dbPort"]="";
11738
	#$conf["WhereColumnName"],字串陣列,用於判斷語句的欄位項目陣列。
11739
	#$conf["WhereColumnName"]=array("");
11740
	#$conf["WhereColumnValue"],字串陣列,用於判斷語句的欄位數值陣列,若與LIKE搭配,則可以在關鍵自字串的左右名加上「%」符號,這樣就可以搜尋具有該字串的內容。
11741
	#$conf["WhereColumnValue"]=array("");
11742
	#$conf["WhereColumnCombine"],字串陣列,用於判斷語句當中需要()起來的判斷式,須爲陣列值,"s"代表「(」,"e"代表「)」 ,若無則須設爲""。
11743
	#$conf["WhereColumnCombine"]=array("");
11744
	#$conf["WhereColumnOperator"],字串陣列,用於判斷語句的比較符號陣列,可以用的符號有「"="、"!="、">"、"<"、"LIKE"、"NOT LIKE"」,預設都爲「=」。
11745
	#$conf["WhereColumnOperator"]=array("");
11746
	#$conf["WhereColumnAndOr"],字串陣列,用於判斷語句條件之間成立的條件是AND還是OR,須爲陣列值。其數量應爲要判斷的欄位數量減一。
11747
	#$conf["WhereColumnAndOr"]=array("");
11748
	#$conf["whereIn"],二維字串陣列,為每個in語句的內容,特定欄位數值等於陣列元素之一。array(array("colName",array("a","b","c")));代表欄位colName的值為a,b,c三者之一.
11749
	#$conf["whereIn"]=array(array("colName",array("a","b","c")));
11750
	#$conf["whereNotIn"],二維字串陣列,為每個not in語句的內容,array(array("colName",array("a","b","c")));代表欄位colName的值不為a,b,c三者之一.
11751
	#$conf["whereNotIn"]=array(array("colName",array("a","b","c")));
11752
	#$conf["orderItem"],字串,爲排序的項目依據,若要用隨機抽樣,可以用"rand()",可省略。
11753
	#$conf["orderItem"]="";
11754
	#$conf["ascORdesc"],字串,爲要低增還是遞減排序,asc爲遞增;desc爲遞減。
11755
	#$conf["ascORdesc"]="";
11756
	#$conf["numberStart"],字串,為從第幾筆開始讀取,預設為0,代筆第一筆。
11757
	#$conf["numberStart"]="0";
11758
	#$conf["numLimit"],字串,為要取幾筆資料,可以省略,省略則表示不限制數目。
11759
	#$conf["numLimit"]="30";
11760
	#$conf["groupBy"],字串陣列,爲要以哪幾個欄爲作爲分羣的依據(欄位相同的數值僅會取出一筆)。
11761
	#$conf["groupBy"]=array("");
11762
	#參考資料:
11763
	#無.
11764
	#備註:
11765
	#無.
11766
	*/
11767
	public static function fastGetDbData(&$conf){
11768
 
11769
		#初始化要回傳的內容
11770
		$result=array();
11771
 
11772
		#取得當前執行的函數名稱
11773
		$result["function"]=__FUNCTION__;
11774
 
11775
		#如果 $conf 不為陣列
11776
		if(gettype($conf)!="array"){
11777
 
11778
			#設置執行失敗
11779
			$result["status"]="false";
11780
 
11781
			#設置執行錯誤訊息
11782
			$result["error"][]="\$conf變數須為陣列形態";
11783
 
11784
			#如果傳入的參數為 null
11785
			if($conf==null){
11786
 
11787
				#設置執行錯誤訊息
11788
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
11789
 
11790
				}#if end
11791
 
11792
			#回傳結果
11793
			return $result;
11794
 
11795
			}#if end
11796
 
11797
		#取得使用的
11798
		$result["argu"]=$conf;
11799
 
11800
		#檢查參數
11801
		#函式說明:
11802
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
11803
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
11804
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
11805
		#$result["function"],當前執行的函式名稱.
11806
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
11807
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
11808
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
11809
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
11810
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
11811
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
11812
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
11813
		#必填參數:
11814
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
11815
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
11816
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
11817
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("dbAddress","dbAccount","dbName","tableName","columnYouWant");
11818
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
11819
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string","string","array");
11820
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
11821
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
11822
		#可省略參數:
11823
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
11824
		#$conf["canBeEmptyString"]="false";
11825
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
11826
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("dbPassword","dbPort","WhereColumnName","WhereColumnValue","WhereColumnCombine","WhereColumnOperator","WhereColumnAndOr","orderItem","ascORdesc","numberStart","numLimit","groupBy","whereIn","whereNotIn");
11827
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
11828
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","array","array","array","array","array","string","string","string","string","array","array","array");
11829
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
11830
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null,null,null,null,null,null,null,null,"0",null,null,null,null);
11831
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
11832
		$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("WhereColumnName","WhereColumnValue");
11833
		$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("WhereColumnValue","WhereColumnOperator");
11834
		#參考資料:
11835
		#array_keys=>http://php.net/manual/en/function.array-keys.php
11836
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
11837
		unset($conf["variableCheck::checkArguments"]);
11838
 
11839
		#如果檢查失敗
11840
		if($checkResult["status"]=="false"){
11841
 
11842
			#設置執行失敗的訊息
11843
			$result["status"]="false";
11844
 
11845
			#設置錯誤訊息
11846
			$result["error"]=$checkResult;
11847
 
11848
			#回傳結果
11849
			return $result;
11850
 
11851
			}#if end
11852
 
11853
		#如果檢查不通過
11854
		if($checkResult["passed"]=="false"){
11855
 
11856
			#設置執行失敗的訊息
11857
			$result["status"]="false";
11858
 
11859
			#設置錯誤訊息
11860
			$result["error"]=$checkResult;
11861
 
11862
			#回傳結果
11863
			return $result;
11864
 
11865
			}#if end
11866
 
11867
		#初始化要檢查的欄位
11868
		$colToCheck=array();
11869
 
11870
		#如果有指定要的欄位
11871
		if($conf["columnYouWant"]!==array("*")){
11872
 
11873
			#針對每個欄位
11874
			foreach($conf["columnYouWant"] as $col){
11875
 
11876
				#取得欄位名稱
11877
				$colToCheck[]=$col;
11878
 
11879
				}#foreach end			
11880
 
11881
			}#if end
11882
 
11883
		#如果有設置
11884
		if(isset($conf["WhereColumnName"])){
11885
 
11886
			#針對每個欄位
11887
			foreach($conf["WhereColumnName"] as $col){
11888
 
11889
				#取得欄位名稱
11890
				$colToCheck[]=$col;
11891
 
11892
				}#foreach end			
11893
 
11894
			}#if end
11895
 
11896
		#如果有設置 $conf["whereIn"]
11897
		if(isset($conf["whereIn"])){
11898
 
11899
			#針對每個 where in 條件
11900
			for($i=0;$i<count($conf["whereIn"]);$i++){
11901
 
11902
				#取得欄位名稱
11903
				$colToCheck[]=$conf["whereIn"][$i][0];
11904
 
11905
				}#for end
11906
 
11907
			}#if end
11908
 
11909
		#如果要檢查的欄位不是空陣列
11910
		if($colToCheck!==array()){
11911
 
11912
			#檢查需要判斷資料表欄位是否存在
11913
			#函式說明:
11914
			#檢查資料表的欄位是否存在
11915
			#回傳結果::
11916
			#設置執行錯誤的識別
11917
			#$result["function"],當前執行的函數名稱.
11918
			#$result["status"],"true"代表執行成功;"false"代表執行失敗.
11919
			#$result["error"],錯誤訊息.
11920
			#$result["warning"],警告訊息陣列
11921
			#$result["passed"],是否通過檢查,"true"代表通過;"false"代表不通過.
11922
			#其餘的結果代表參數不正確
11923
			#必填參數:
11924
			#$conf["dbAddr"],字串,爲mysql-Server的位置
11925
			$conf["db::checkTableColExists"]["dbAddr"]=$conf["dbAddress"]; 
11926
			#$conf["dbAcct"],字串,爲用於連入mysql-Server時要使用的帳號
11927
			$conf["db::checkTableColExists"]["dbAcct"]=$conf["dbAccount"];
11928
			#$conf["dbName"],字串,爲指定的資料庫名稱
11929
			$conf["db::checkTableColExists"]["dbName"]=$conf["dbName"];
11930
			#$conf["dtName"],字串,為要檢查是否存在的資料表名稱
11931
			$conf["db::checkTableColExists"]["dtName"]=$conf["tableName"];
11932
			#$conf["col"],字串陣列,要檢查的欄位名稱.
11933
			$conf["db::checkTableColExists"]["col"]=array_unique($colToCheck);
11934
			#可省略參數
11935
 
11936
			#如果有設置 $conf["dbPassword"]
11937
			if(isset($conf["dbPassword"])){
11938
 
11939
				#$conf["dbPass"],爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼 
11940
				$conf["db::checkTableColExists"]["dbPass"]=$conf["dbPassword"];
11941
 
11942
				}#if end
11943
 
11944
			#如果有設置 $conf["dbPort"]
11945
			if(isset($conf["dbPort"])){
11946
 
11947
				#$conf["dbPort"],爲連線到mysql-Server時要使用的port,可省略,若省略則代表預設的port 3306 
11948
				$conf["db::checkTableColExists"]["dbPort"]=$conf["dbPort"];
11949
 
11950
				}#if end
11951
 
11952
			$checkTableColExists=db::checkTableColExists($conf["db::checkTableColExists"]);
11953
			unset($conf["db::checkTableColExists"]);
11954
 
11955
			#如果檢查失敗
11956
			if($checkTableColExists["status"]==="false"){
11957
 
11958
				#設置執行失敗
11959
				$result["status"]="false";
11960
 
11961
				#設置執行錯誤訊息
11962
				$result["error"]=$checkTableColExists;
11963
 
11964
				#回傳結果
11965
				return $result;
11966
 
11967
				}#if end
11968
 
11969
			#如果檢查不通過
11970
			if($checkTableColExists["passed"]==="false"){
11971
 
11972
				#設置執行失敗
11973
				$result["status"]="false";
11974
 
11975
				#設置執行錯誤訊息
11976
				$result["error"]=$checkTableColExists;
11977
 
11978
				#回傳結果
11979
				return $result;
11980
 
11981
				}#if end
11982
 
11983
			}#if end
11984
 
11985
		#函式說明:
11986
		#dataTableSelectCustom的改良版
11987
		#回傳的參數:
11988
		#$result["status"],執行結果"true"為成功;"false"為執行失敗。
11989
		#$result["error"],錯誤訊息陣列。
11990
		#$result["sql"],執行的sql語法。
11991
		#$result["sqlQueryResult"]#爲資料連線處理完畢之後的結果,需要 sendQueryDataToVariabele 涵式來解析。
11992
		#$result["connectInformation"]#連結到資料庫的資訊。
11993
		#$result["dataCount"]#符合條件的資料筆數
11994
		#必填參數:
11995
		$conf["db"]["dataTableSelectCustomV2"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置。
11996
		$conf["db"]["dataTableSelectCustomV2"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號。
11997
		$conf["db"]["dataTableSelectCustomV2"]["selectedDataBaseName"]=$conf["dbName"];#要選取的資料庫名稱	。
11998
		$conf["db"]["dataTableSelectCustomV2"]["selectedDataTableName"]=$conf["tableName"];#爲欲選擇的資料表名稱。
11999
		#可省略參數:
12000
 
12001
		#如果存在 $conf["dbPassword"]
12002
		if(isset($conf["dbPassword"])){
12003
 
12004
			#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼。
12005
			$conf["db"]["dataTableSelectCustomV2"]["dbPassword"]=$conf["dbPassword"];
12006
 
12007
			}#if end
12008
 
12009
		#如果存在 $conf["dbPort"]
12010
		if(isset($conf["dbPort"])){
12011
 
12012
			#爲連線到mysql-Server時要使用的port,可省略,若省略則代表使用預設的3306 port
12013
			$conf["db"]["dataTableSelectCustomV2"]["dbPort"]=$conf["dbPort"];
12014
 
12015
			}#if end
12016
 
12017
		#如果存在 $conf["WhereColumnCombine"]
12018
		if(isset($conf["WhereColumnCombine"])){
12019
 
12020
			#用於判斷語句當中需要()起來的判斷式,須爲陣列值,"s"代表「(」,"e"代表「)」 ,若無則須設爲""。
12021
			$conf["db"]["dataTableSelectCustomV2"]["WhereColumnCombine"]=$conf["WhereColumnCombine"];
12022
 
12023
			}#if end
12024
 
12025
		#如果 $conf["WhereColumnName"] 存在
12026
		if(isset($conf["WhereColumnName"])){
12027
 
12028
			$conf["db"]["dataTableSelectCustomV2"]["WhereColumnName"]=$conf["WhereColumnName"];#用於判斷語句的欄位項目陣列。
12029
 
12030
			}#if end	
12031
 
12032
		#如果存在 $conf["WhereColumnOperator"]
12033
		if(isset($conf["WhereColumnOperator"])){
12034
 
12035
			#用於判斷語句的比較符號陣列,可以用的符號有「"="、">"、"<"、"LIKE"、"NOT LIKE"」,預設都爲「=」。
12036
			$conf["db"]["dataTableSelectCustomV2"]["WhereColumnOperator"]=$conf["WhereColumnOperator"];
12037
 
12038
			}#if end
12039
 
12040
		#如果 $conf["WhereColumnValue"] 有設置
12041
		if(isset($conf["WhereColumnValue"])){
12042
 
12043
			$conf["db"]["dataTableSelectCustomV2"]["WhereColumnValue"]=$conf["WhereColumnValue"];#用於判斷語句的欄位數值陣列,若與LIKE搭配,則可以在關鍵自字串的左右名加上「%」符號,這樣就可以搜尋具有該字串的內容。
12044
 
12045
			}#if end
12046
 
12047
		#如果 $conf["WhereColumnAndOr"] 存在
12048
		if(isset($conf["WhereColumnAndOr"])){
12049
 
12050
			#用於判斷語句條件之間成立的條件是AND還是OR,須爲陣列值。其數量應爲要判斷的欄位數量減一。
12051
			$conf["db"]["dataTableSelectCustomV2"]["WhereColumnAndOr"]=$conf["WhereColumnAndOr"];
12052
 
12053
			}#if end
12054
 
12055
		#如果 $conf["orderItem"] 存在
12056
		if(isset($conf["orderItem"])){
12057
 
12058
			#爲排序的項目依據,若要用隨機抽樣,可以用"rand()",可省略。
12059
			$conf["db"]["dataTableSelectCustomV2"]["orderItem"]=$conf["orderItem"];
12060
 
12061
			}#if end
12062
 
12063
		#如果 $conf["ascORdesc"] 存在
12064
		if(isset($conf["ascORdesc"])){
12065
 
12066
			#爲要低增還是遞減排序,asc爲遞增;desc爲遞減。
12067
			$conf["db"]["dataTableSelectCustomV2"]["ascORdesc"]=$conf["ascORdesc"];
12068
 
12069
			}#if end
12070
 
12071
		#如果 $conf["numberStart"] 存在
12072
		if(isset($conf["numberStart"])){
12073
 
12074
			$conf["db"]["dataTableSelectCustomV2"]["numberStart"]=$conf["numberStart"];
12075
 
12076
			}#if end
12077
 
12078
		#如果 $conf["numLimit"] 存在
12079
		if(isset($conf["numLimit"])){
12080
 
12081
			#為要取幾筆資料,可以省略,省略則表示不限制數目。
12082
			$conf["db"]["dataTableSelectCustomV2"]["number"]=$conf["numLimit"];
12083
 
12084
			}#if end
12085
 
12086
		#如果 $conf["groupBy"] 存在
12087
		if(isset($conf["groupBy"])){
12088
 
12089
			#爲要以那個欄爲作爲分羣的依據(該欄位相同的數值僅會取出一筆)。
12090
			$conf["db"]["dataTableSelectCustomV2"]["groupBy"]=$conf["groupBy"];
12091
 
12092
			}#if end
12093
 
12094
		#如果 $conf["whereIn"] 存在
12095
		if(isset($conf["whereIn"])){
12096
 
12097
			#where in 條件		
12098
			$conf["db"]["dataTableSelectCustomV2"]["whereIn"]=$conf["whereIn"];
12099
 
12100
			}#if end
12101
 
12102
		#如果 $conf["whereNotIn"] 存在
12103
		if(isset($conf["whereNotIn"])){
12104
 
12105
			#where not in 條件	
12106
			$conf["db"]["dataTableSelectCustomV2"]["whereNotIn"]=$conf["whereNotIn"];
12107
 
12108
			}#if end
12109
 
12110
		$dataTableSelectCustomV2=db::dataTableSelect($conf["db"]["dataTableSelectCustomV2"]);
12111
		unset($conf["db"]);
12112
 
12113
		#如果sql查詢失敗
12114
		#如果 $dataTableSelectCustomV2["status"] 等於 "false"
12115
		if($dataTableSelectCustomV2["status"]=="false"){
12116
 
12117
			#則設置執行錯誤的識別
12118
			$result["status"]="false";
12119
 
12120
			#設置錯誤訊息
12121
			$result["error"]=$dataTableSelectCustomV2;
12122
 
12123
			#回傳結果
12124
			return $result;
12125
 
12126
			}#if end
12127
 
12128
		#取得執行的sql字串
12129
		$result["sql"]=$dataTableSelectCustomV2["sql"];
12130
 
12131
		#解析 dataTableSelect($conf) 後的結果,亦即將執行sql語法後所得到的結果解析放進變數裏面
12132
		#回傳結果:
12133
		#$result["status"],執行結果"true"為成功;"false"為執行失敗。
12134
		#$result["error"],錯誤訊息陣列。
12135
		#$result["dataColumnName"],為資料欄位的名稱陣列.
12136
		#$result["dataColumnName"][$i]代表第一個欄位名稱.
12137
		#$result["dataContent"],爲資料的內容。
12138
		#$result["dataContent"][$conf["tableValueName"][$i]][$dataSetNum],
12139
			#$dataSetNum 爲第$dataSetNum+1筆資料
12140
			#$conf["tableValueName"][$i] 爲第 $i+1 個欄位的名稱
12141
		#$result["dataCount"],爲取得的資料筆數。
12142
		#必填參數:
12143
		$conf["db"]["sendQueryDataToVariabele"]["sqlQueryResult"]=$dataTableSelectCustomV2["sqlQueryResult"];#爲執行sql語法所獲得的查詢結果。
12144
		$conf["db"]["sendQueryDataToVariabele"]["tableValueName"]=$conf["columnYouWant"];#$conf["tableValueName"]=array();#爲該資料表列項目的每一項名稱,須爲陣列值,若為「array("*")」則代表所有欄位.
12145
		$conf["db"]["sendQueryDataToVariabele"]["valueName"]=$conf["columnYouWant"];#爲該資料表列項目的每一項所要對應的變數名稱,須爲陣列值。
12146
		$conf["db"]["sendQueryDataToVariabele"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
12147
		$conf["db"]["sendQueryDataToVariabele"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
12148
		#可省略參數:
12149
 
12150
		#如果存在 $conf["dbPassword"]
12151
		if(isset($conf["dbPassword"])){
12152
 
12153
			#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼。
12154
			$conf["db"]["sendQueryDataToVariabele"]["dbPassword"]=$conf["dbPassword"];
12155
 
12156
			}#if end
12157
 
12158
		#如果存在 $conf["dbPort"]
12159
		if(isset($conf["dbPort"])){
12160
 
12161
			#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表使用預設 port 3306
12162
			$conf["db"]["sendQueryDataToVariabele"]["dbPort"]=$conf["dbPort"];
12163
 
12164
			}#if end
12165
 
12166
		$sendQueryDataToVariabele=db::sendQueryDataToVariabele($conf["db"]["sendQueryDataToVariabele"]);
12167
		unset($conf["db"]);
12168
 
12169
		#如果 $sendQueryDataToVariabele["status"] 等於 "false"
12170
		if($sendQueryDataToVariabele["status"]=="false"){
12171
 
12172
			#設置執行錯誤的識別
12173
			$result["status"]="false";
12174
 
12175
			#設置錯誤訊息
12176
			$result["error"]=$sendQueryDataToVariabele;
12177
 
12178
			#回傳結果
12179
			return $result;
12180
 
12181
			}#if end
12182
 
12183
		#如果 $sendQueryDataToVariabele["dataContent"] 沒有設置
12184
		if(!isset($sendQueryDataToVariabele["dataContent"])){
12185
 
12186
			#那就代表沒有找到符合的資料
12187
			$sendQueryDataToVariabele["dataContent"]=NULL;
12188
 
12189
			#取得抓取到的資料內容
12190
			$result["dataContent"]=$sendQueryDataToVariabele["dataContent"];
12191
 
12192
			}#if end
12193
 
12194
		#反之代表有資料
12195
		else{
12196
 
12197
			#取得抓取到的資料內容
12198
			$result["dataContent"]=$sendQueryDataToVariabele["dataContent"];
12199
 
12200
			#抓取欄位名稱
12201
			$result["dataColumnName"]=$sendQueryDataToVariabele["dataColumnName"];
12202
 
12203
			}#else end
12204
 
12205
		#如果 $sendQueryDataToVariabele["dataCount"] 沒有設定
12206
		if(!isset($sendQueryDataToVariabele["dataCount"])){
12207
 
12208
			#則代表沒有抓到符合的資料
12209
			(int)$sendQueryDataToVariabele["dataCount"]=0;
12210
 
12211
			#取得資料筆數
12212
			$result["dataCount"]=$sendQueryDataToVariabele["dataCount"];
12213
 
12214
			}#if end
12215
 
12216
		#反之代表有符合的資料
12217
		else{
12218
 
12219
			#取得抓取到的資料筆數
12220
			$result["dataCount"]=$sendQueryDataToVariabele["dataCount"];
12221
 
12222
			}#else end
12223
 
12224
		#執行到這邊表示執行成功
12225
		$result["status"]="true";
12226
 
12227
		#回傳結果
12228
		return $result;
12229
 
12230
		}#function fastGetDbData end
12231
 
12232
	/*
12233
	#函式說明:
12234
	#透過一個父資料表取得多個關聯子資料表的資料,並合併成一張表
12235
	#回傳結果:
12236
	#$result["status"],執行結果"true"為成功;"false"為執行失敗。
12237
	#$result["error"],錯誤訊息陣列。
12238
	#$reuslt["function"],當前執行的函數
12239
	#$result["parentTable"]["dataContent"],爲合併了子資料表欄位的父資料表的內容。
12240
	#$result["parentTable"]["dataContent"][$conf["WhereColumnName"][$i]][$dataSetNum]
12241
		#$dataSetNum 爲第$dataSetNum+1筆資料
12242
		#$conf["WhereColumnName"][$i] 爲第 $i+1 個欄位的名稱
12243
	#$result["parentTable"]["dataCount"],爲取得的資料筆數。
12244
	#必填參數:
12245
	#$conf["dbAddress"],字串陣列,爲每個dbServer的位置。
12246
	$conf["dbAddress"]=array($dbAddress);
12247
	#$conf["dbAccount"],字串陣列,爲登入每個dbServer的帳號。
12248
	$conf["dbAccount"]=array($dbAccount);
12249
	#$conf["dbName"],字串陣列,爲每個要存取的資料庫名稱
12250
	$conf["dbName"]=array($dbName);
12251
	#$conf["tableName"],字串陣列,爲每個要存取的資料表名稱,$conf["tableName"][0]為父資料表.
12252
	$conf["tableName"]=array("");
12253
	#$conf["linkColumnName"]=array(array(""));#二維字串陣列,為可以從父表關連到其他資料表的欄位名稱.
12254
		#$conf["linkColumnName"][$i]=array("parentColumnName","childColumnName"),為父資料表的"parentColumnName"欄位跟第$i+1個關聯資料表的"childColumnName"關聯.
12255
	$conf["linkColumnName"]=array(array(""));
12256
	#$conf["columnYouWant"]=array(array(""));#二維字串陣列,為每個資料表依序想要的欄位.
12257
	$conf["columnYouWant"]=array(array(""));#二維字串陣列,為每個資料表依序想要的欄位.
12258
	#可省略參數:
12259
	#$conf["dbPassword"],字串陣列,爲要存取每個dbServer的密碼
12260
	#$conf["dbPassword"]=array($dbPassword);
12261
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,可省略,若省略則代表使用預設的3306 port.
12262
	#$conf["dbPort"]="";
12263
	#$conf["WhereColumnName"],字串陣列,用於判斷語句的欄位項目陣列。
12264
	#$conf["WhereColumnName"]=array("");
12265
	#$conf["WhereColumnValue"],字串陣列,用於判斷語句的欄位數值陣列,若與LIKE搭配,則可以在關鍵自字串的左右名加上「%」符號,這樣就可以搜尋具有該字串的內容。
12266
	#$conf["WhereColumnValue"]=array("");	
12267
	#$conf["WhereColumnCombine"],字串陣列,用於判斷語句當中需要()起來的判斷式,須爲陣列值,"s"代表「(」,"e"代表「)」 ,若無則須設爲""。
12268
	#$conf["WhereColumnCombine"]=array("");
12269
	#$conf["WhereColumnOperator"],字串陣列,用於判斷語句的比較符號陣列,可以用的符號有「"="、">"、"<"、"LIKE"、"NOT LIKE"」,預設都爲「=」。
12270
	#$conf["WhereColumnOperator"]=array("");
12271
	#$conf["WhereColumnAndOr"],字串陣列,用於判斷語句條件之間成立的條件是AND還是OR,須爲陣列值。其數量應爲要判斷的欄位數量減一。
12272
	#$conf["WhereColumnAndOr"]=array("");
12273
	#$conf["whereIn"],二維字串陣列,為每個in語句的內容,特定欄位數值等於陣列元素之一。array(array("colName",array("a","b","c")));代表欄位colName的值為a,b,c三者之一.
12274
	#$conf["whereIn"]=array(array("colName",array("a","b","c")));
12275
	#$conf["whereNotIn"],二維字串陣列,為每個not in語句的內容,array(array("colName",array("a","b","c")));代表欄位colName的值不為a,b,c三者之一.
12276
	#$conf["whereNotIn"]=array(array("colName",array("a","b","c")));
12277
	#$conf["orderItem"],字串,排序的項目依據,若要用隨機抽樣,可以用"rand()",可省略。
12278
	#$conf["orderItem"]="";
12279
	#$conf["ascORdesc"],字串,要低增還是遞減排序,asc爲遞增;desc爲遞減。
12280
	#$conf["ascORdesc"]="";
12281
	#$conf["numberStart"],字串,從第幾筆開始讀取,預設為"0",代筆第一筆。
12282
	#$conf["numberStart"]="0";
12283
	#$conf["numLimit"],字串,要取幾筆資料,可以省略,省略則表示不限制數目。
12284
	#$conf["numLimit"]="30";
12285
	#$conf["groupBy"],字串陣列,爲要以哪幾個欄爲作爲分羣的依據(欄位相同的數值僅會取出一筆)。
12286
	#$conf["groupBy"]=array();
12287
	#參考資料:
12288
	#無.
12289
	#備註:
12290
	#無.
12291
	*/
12292
	public static function fastGetMultiLinkedDbData(&$conf){
12293
 
12294
		#初始化要回傳的內容
12295
		$result=array();
12296
 
12297
		#取得當前執行的函數名稱
12298
		$result["function"]=__FUNCTION__;
12299
 
12300
		#如果 $conf 不為陣列
12301
		if(gettype($conf)!="array"){
12302
 
12303
			#設置執行失敗
12304
			$result["status"]="false";
12305
 
12306
			#設置執行錯誤訊息
12307
			$result["error"][]="\$conf變數須為陣列形態";
12308
 
12309
			#如果傳入的參數為 null
12310
			if($conf==null){
12311
 
12312
				#設置執行錯誤訊息
12313
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
12314
 
12315
				}#if end
12316
 
12317
			#回傳結果
12318
			return $result;
12319
 
12320
			}#if end
12321
 
12322
		#檢查參數
12323
		#函式說明:
12324
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
12325
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
12326
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
12327
		#$result["function"],當前執行的函式名稱.
12328
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
12329
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
12330
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
12331
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
12332
		#必填參數:
12333
		#$conf["variableCheck.checkArguments"]["varInput"],陣列變數,要檢查的陣列變數.
12334
		$conf["variableCheck.checkArguments"]["varInput"]=&$conf;
12335
		#$conf["variableCheck.checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
12336
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableName"]=array("dbAddress","dbAccount","dbName","tableName","linkColumnName","columnYouWant");
12337
		#$conf["variableCheck.checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
12338
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableType"]=array("array","array","array","array","array","array");
12339
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
12340
		$conf["variableCheck.checkArguments"]["referenceVarKey"]="variableCheck.checkArguments";
12341
		#可省略參數:
12342
		#$conf["variableCheck.checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"false"。
12343
		#$conf["variableCheck.checkArguments"]["canBeEmptyString"]="false";
12344
		#$conf["variableCheck.checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
12345
		$conf["variableCheck.checkArguments"]["skipableVariableName"]=array("dbPassword","WhereColumnName","WhereColumnValue","WhereColumnCombine","WhereColumnOperator","WhereColumnAndOr","orderItem","ascORdesc","numberStart","numLimit","groupBy","whereIn","whereNotIn");
12346
		#$conf["variableCheck.checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
12347
		$conf["variableCheck.checkArguments"]["skipableVariableType"]=array("array","array","array","array","array","array","string","string","string","string","array","array","array");
12348
		#$conf["variableCheck.checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定.
12349
		#$conf["variableCheck.checkArguments"]["skipableVarDefaultValue"]=array("");
12350
		$checkResult=variableCheck::checkArguments($conf["variableCheck.checkArguments"]);
12351
		unset($conf["variableCheck.checkArguments"]);
12352
 
12353
		#如果檢查出錯
12354
		if($checkResult["status"]=="false"){
12355
 
12356
			#設置錯誤識別
12357
			$result["status"]="false";
12358
 
12359
			#設置錯誤訊息
12360
			$result["error"]=$checkResult;
12361
 
12362
			#回傳結果
12363
			return $result;
12364
 
12365
			}#if end
12366
 
12367
		#如果檢查出錯
12368
		if($checkResult["passed"]=="false"){
12369
 
12370
			#設置錯誤識別
12371
			$result["status"]="false";
12372
 
12373
			#設置錯誤訊息
12374
			$result["error"]=$checkResult;
12375
 
12376
			#回傳結果
12377
			return $result;
12378
 
12379
			}#if end
12380
 
12381
		#取得父表的資料
12382
		#函式說明:
12383
		#一次取得資料庫、表的資料
12384
		#回傳結果:
12385
		#$result["status"],執行結果"true"為成功;"false"為執行失敗。
12386
		#$result["error"],錯誤訊息陣列。
12387
		#$result["dataContent"],爲資料的內容。
12388
			#$result["dataContent"][$conf["WhereColumnName"][$i]][$dataSetNum]
12389
			#$dataSetNum 爲第$dataSetNum+1筆資料
12390
			#$conf["WhereColumnName"][$i] 爲第 $i+1 個欄位的名稱
12391
		#$result["dataCount"],爲取得的資料筆數。
12392
		#必填參數:
12393
		$conf["db"]["fastGetDbData"]["dbAddress"]=$conf["dbAddress"][0];#爲dbServer的位置。
12394
		$conf["db"]["fastGetDbData"]["dbAccount"]=$conf["dbAccount"][0];#爲登入dbServer的帳號。
12395
		$conf["db"]["fastGetDbData"]["dbName"]=$conf["dbName"][0];#爲要存取的資料庫名稱
12396
		$conf["db"]["fastGetDbData"]["tableName"]=$conf["tableName"][0];#爲要存取的資料表名稱
12397
		$conf["db"]["fastGetDbData"]["columnYouWant"]=$conf["columnYouWant"][0];#你想要的欄位!
12398
		#可省略參數:
12399
 
12400
		#如果 $conf["dbPassword"][0] 有設置
12401
		if(isset($conf["dbPassword"][0])){
12402
 
12403
			$conf["db"]["fastGetDbData"]["dbPassword"]=$conf["dbPassword"][0];#爲要存取dbServer的密碼
12404
 
12405
			}#if end
12406
 
12407
		#如果 $conf["WhereColumnName"] 有設置
12408
		if(isset($conf["WhereColumnName"])){
12409
 
12410
			$conf["db"]["fastGetDbData"]["WhereColumnName"]=$conf["WhereColumnName"];#用於判斷語句的欄位項目陣列。
12411
 
12412
			}#if end
12413
 
12414
		#如果 $conf["WhereColumnValue"] 有設置
12415
		if(isset($conf["WhereColumnValue"])){
12416
 
12417
			$conf["db"]["fastGetDbData"]["WhereColumnValue"]=$conf["WhereColumnValue"];#用於判斷語句的欄位數值陣列,若與LIKE搭配,則可以在關鍵自字串的左右名加上「%」符號,這樣就可以搜尋具有該字串的內容。
12418
 
12419
			}#if end
12420
 
12421
		#如果 $conf["WhereColumnCombine"] 有設置
12422
		if(isset($conf["WhereColumnCombine"])){
12423
 
12424
			$conf["db"]["fastGetDbData"]["WhereColumnCombine"]=$conf["WhereColumnCombine"];#用於判斷語句當中需要()起來的判斷式,須爲陣列值,"s"代表「(」,"e"代表「)」 ,若無則須設爲""。
12425
 
12426
			}#if end
12427
 
12428
		#如果 $conf["WhereColumnOperator"] 有設置
12429
		if(isset($conf["WhereColumnOperator"])){
12430
 
12431
			$conf["db"]["fastGetDbData"]["WhereColumnOperator"]=$conf["WhereColumnOperator"];#用於判斷語句的比較符號陣列,可以用的符號有「"="、">"、"<"、"LIKE"、"NOT LIKE"」,預設都爲「=」。
12432
 
12433
			}#if end
12434
 
12435
		#如果 $conf["WhereColumnAndOr"][$i] 有設置
12436
		if(isset($conf["WhereColumnAndOr"])){
12437
 
12438
			$conf["db"]["fastGetDbData"]["WhereColumnAndOr"]=$conf["WhereColumnAndOr"];#用於判斷語句條件之間成立的條件是AND還是OR,須爲陣列值。其數量應爲要判斷的欄位數量減一。
12439
 
12440
			}#if end
12441
 
12442
		#如果 $conf["orderItem"] 有設置
12443
		if(isset($conf["orderItem"])){
12444
 
12445
			$conf["db"]["fastGetDbData"]["orderItem"]=$conf["orderItem"];#爲排序的項目依據,若要用隨機抽樣,可以用"rand()",可省略。
12446
 
12447
			}#if end
12448
 
12449
		#如果 $conf["ascORdesc"] 有設置
12450
		if(isset($conf["ascORdesc"])){
12451
 
12452
			$conf["db"]["fastGetDbData"]["ascORdesc"]=$conf["ascORdesc"];#爲要低增還是遞減排序,asc爲遞增;desc爲遞減。
12453
 
12454
			}#if end
12455
 
12456
		#如果 $conf["numberStart"] 有設置
12457
		if(isset($conf["numberStart"])){
12458
 
12459
			$conf["db"]["fastGetDbData"]["numberStart"]=$conf["numberStart"];#為從第幾筆開始讀取,預設為0,代筆第一筆。
12460
 
12461
			}#if end
12462
 
12463
		#如果 $conf["numLimit"] 有設置
12464
		if(isset($conf["numLimit"])){
12465
 
12466
			$conf["db"]["fastGetDbData"]["numLimit"]=$conf["numLimit"];#為要取幾筆資料,可以省略,省略則表示不限制數目。
12467
 
12468
			}#if end
12469
 
12470
		#如果 $conf["groupBy"] 有設置
12471
		if(isset($conf["groupBy"])){
12472
 
12473
			$conf["db"]["fastGetDbData"]["groupBy"]=$conf["groupBy"];#爲要以哪幾個欄爲作爲分羣的依據(欄位相同的數值僅會取出一筆)。
12474
 
12475
			}#if end
12476
 
12477
		#如果 $conf["whereIn"] 存在
12478
		if(isset($conf["whereIn"])){
12479
 
12480
			#where in 條件		
12481
			$conf["db"]["fastGetDbData"]["whereIn"]=$conf["whereIn"];
12482
 
12483
			}#if end
12484
 
12485
		#如果 $conf["whereNotIn"] 存在
12486
		if(isset($conf["whereNotIn"])){
12487
 
12488
			#where not in 條件	
12489
			$conf["db"]["fastGetDbData"]["whereNotIn"]=$conf["whereNotIn"];
12490
 
12491
			}#if end
12492
 
12493
		#儲存到 $result["mainTable"] 陣列裡面
12494
		$result["parentTable"]=db::fastGetDbData($conf["db"]["fastGetDbData"]);
12495
		unset($conf["db"]["fastGetDbData"]);
12496
 
12497
		#如果 $result["mainTable"]["status"] 為 "false"
12498
		if($result["parentTable"]["status"]=="false"){
12499
 
12500
			#取得錯誤訊息
12501
			$result["error"]=$result["parentTable"]["error"];
12502
 
12503
			#設置執行結果為 "false"
12504
			$result["status"]="false";
12505
 
12506
			#回傳結果
12507
			return $result;
12508
 
12509
			}#if end
12510
 
12511
		#根據 $conf["linkColumnName"] 的數量
12512
		for($i=0;$i<count($conf["linkColumnName"]);$i++){
12513
 
12514
			#取得父資料表的關聯欄位名稱
12515
			$parentTableLinkColumnName=$conf["linkColumnName"][$i][0];
12516
 
12517
			#取得子資料表的關聯欄位名稱
12518
			$childTableLinkColumnName=$conf["linkColumnName"][$i][1];
12519
 
12520
			#根據父資料表的資料筆數
12521
			for($j=0;$j<$result["parentTable"]["dataCount"];$j++){
12522
 
12523
				#如果要連結的欄位不在 select 的欄位裡面
12524
				if(!isset($result["parentTable"]["dataContent"][$parentTableLinkColumnName])){
12525
 
12526
					#設置執行錯誤
12527
					$result["status"]="false";
12528
 
12529
					#設置執行錯誤內容
12530
					$result["error"]="欄位 ".$parentTableLinkColumnName." 必須在參數 columnYouWant 裡面.";
12531
 
12532
					#回傳結果
12533
					return $result;
12534
 
12535
					}#if end
12536
 
12537
				#父資料表第$j筆資料關聯欄位的數值內容
12538
				$parentTableLinkColumnValue=$result["parentTable"]["dataContent"][$parentTableLinkColumnName][$j];
12539
 
12540
				#var_dump($parentTableLinkColumnValue);
12541
 
12542
				#根據第$j筆資料的父關聯欄位數值來尋找子關聯資料表的欄位數值
12543
				#函式說明:
12544
				#一次取得資料庫、表的資料
12545
				#回傳結果:
12546
				#$result["status"],執行結果"true"為成功;"false"為執行失敗。
12547
				#$result["error"],錯誤訊息陣列。
12548
				#$result["dataContent"],爲資料的內容。
12549
				#$result["dataContent"][$conf["WhereColumnName"][$i]][$dataSetNum]
12550
					#$dataSetNum 爲第$dataSetNum+1筆資料
12551
					#$conf["WhereColumnName"][$i] 爲第 $i+1 個欄位的名稱
12552
				#$result["dataCount"],爲取得的資料筆數。
12553
				#必填參數:
12554
				$conf["db"]["fastGetDbData"]["dbAddress"]=$conf["dbAddress"][$i+1];#爲dbServer的位置。
12555
				$conf["db"]["fastGetDbData"]["dbAccount"]=$conf["dbAccount"][$i+1];#爲登入dbServer的帳號。
12556
				$conf["db"]["fastGetDbData"]["dbName"]=$conf["dbName"][$i+1];#爲要存取的資料庫名稱
12557
				$conf["db"]["fastGetDbData"]["tableName"]=$conf["tableName"][$i+1];#爲要存取的資料表名稱
12558
				$conf["db"]["fastGetDbData"]["columnYouWant"]=$conf["columnYouWant"][$i+1];#你想要的欄位!
12559
				#可省略參數:
12560
 
12561
				#如果 $conf["dbPassword"][$i+1] 有設定
12562
				if(isset($conf["dbPassword"][$i+1])){
12563
 
12564
					#則設置其連線密碼
12565
					$conf["db"]["fastGetDbData"]["dbPassword"]=$conf["dbPassword"][$i+1];#爲要存取dbServer的密碼
12566
 
12567
					}#if end
12568
 
12569
				#如果 $conf["dbPort"][$i+1] 有設定
12570
				if(isset($conf["dbPort"][$i+1])){
12571
 
12572
					#則設置其連線的 port
12573
					$conf["db"]["fastGetDbData"]["dbPort"]=$conf["dbPort"][$i+1];#爲要存取dbServer的port
12574
 
12575
					}#if end
12576
 
12577
				$conf["db"]["fastGetDbData"]["WhereColumnName"]=array($childTableLinkColumnName);#用於判斷語句的欄位項目陣列。
12578
				$conf["db"]["fastGetDbData"]["WhereColumnValue"]=array($parentTableLinkColumnValue);#用於判斷語句的欄位數值陣列,若與LIKE搭配,則可以在關鍵自字串的左右名加上「%」符號,這樣就可以搜尋具有該字串的內容。
12579
				#$conf["WhereColumnCombine"]=array("");#用於判斷語句當中需要()起來的判斷式,須爲陣列值,"s"代表「(」,"e"代表「)」 ,若無則須設爲""。
12580
				#$conf["WhereColumnOperator"]=array("");#用於判斷語句的比較符號陣列,可以用的符號有「"="、">"、"<"、"LIKE"、"NOT LIKE"」,預設都爲「=」。
12581
				#$conf["WhereColumnAndOr"]=array("");#用於判斷語句條件之間成立的條件是AND還是OR,須爲陣列值。其數量應爲要判斷的欄位數量減一。
12582
				#$conf["orderItem"]="";#爲排序的項目依據,若要用隨機抽樣,可以用"rand()",可省略。
12583
				#$conf["ascORdesc"]="";#爲要低增還是遞減排序,asc爲遞增;desc爲遞減。
12584
				#$conf["numberStart"]="0";#為從第幾筆開始讀取,預設為0,代筆第一筆。
12585
				#$conf["numLimit"]="30";#為要取幾筆資料,可以省略,省略則表示不限制數目。
12586
				#$conf["groupBy"]=array("");#爲要以哪幾個欄爲作爲分羣的依據(欄位相同的數值僅會取出一筆)。
12587
				$childTable[$j]=db::fastGetDbData($conf["db"]["fastGetDbData"]);
12588
				unset($conf["db"]["fastGetDbData"]);
12589
 
12590
				#如果取得資料失敗
12591
				if($childTable[$j]["status"]=="false"){
12592
 
12593
					#取得錯誤訊息
12594
					$result["error"]=$childTable[$j];
12595
 
12596
					#設置執行結果為 "false"
12597
					$result["status"]="false";
12598
 
12599
					#回傳結果
12600
					return $result;
12601
 
12602
					}#if end
12603
 
12604
				#如果 $childTable[$j]["dataContent"] 有設置,則代表有符合的資料
12605
				if(isset($childTable[$j]["dataContent"])){
12606
 
12607
					#針對每個取得的新欄位
12608
					foreach($childTable[$j]["dataContent"] as $newColumnNameArray=>$newColumnNameValue){
12609
 
12610
						#新增第$j筆的欄位名稱與數值
12611
						$result["parentTable"]["dataContent"][$conf["tableName"][$i+1].".".$newColumnNameArray][$j]=$newColumnNameValue[0];
12612
 
12613
						}#foreach end
12614
 
12615
					}#if end
12616
 
12617
				#反之代表 $childTable[$j]["dataContent"] 沒有設置,沒有符合的資料
12618
				else{
12619
 
12620
					#根據每個要取得的欄位名稱
12621
					foreach($conf["columnYouWant"][$i+1] as $newColumnName){
12622
 
12623
						#新增第$j筆的欄位名稱與數值
12624
						$result["parentTable"]["dataContent"][$conf["tableName"][$i+1].".".$newColumnName][$j]="";
12625
 
12626
						}#foreach end
12627
 
12628
					}#else end
12629
 
12630
				}#for end
12631
 
12632
			}#for end
12633
 
12634
		#執行到這邊代表執行成功
12635
		#設置執行結果為 "true"
12636
		$result["status"]="true";
12637
 
12638
		#回傳結果
12639
		return $result;
12640
 
12641
		}#function fastGetMutiLinkedDbData end
12642
 
12643
	/*
12644
	#函式說明:
12645
	#透過php來join多張資料表資料,提供各個欄位的包含資料庫、資料表、的資訊,會產生sql inner join的效果,資料會越來越多.
12646
	#回傳結果:
12647
	#$result["status"],執行結果"true"為成功;"false"為執行失敗。
12648
	#$result["error"],錯誤訊息陣列。
12649
	#$reuslt["function"],當前執行的函數
12650
	#$result["content"],爲合併了子資料表欄位的父資料表的內容。
12651
	#$result["content"][$conf["WhereColumnName"][$i]][$dataSetNum]
12652
		#$dataSetNum 爲第$dataSetNum+1筆資料
12653
		#$conf["WhereColumnName"][$i] 爲第 $i+1 個欄位的名稱
12654
	#$result["parentTable"]["dataCount"],爲取得的資料筆數。
12655
	#必填參數:
12656
	#$conf["dbInfo"]["資料庫名稱"],字串陣列,爲要存取的"資料庫名稱"的連線資訊.
12657
	#$conf["dbIfno"]["資料庫名稱"]["dbAddr"],字串,dbServer的位置.
12658
	#$conf["dbInfo"]["資料庫名稱"]["dbAddr"]="";
12659
	#$conf["dbIfno"]["資料庫名稱"]["dbAcct"],字串,dbServer的連線帳號.
12660
	#$conf["dbInfo"]["資料庫名稱"]["dbAcct"]="";	
12661
	#$conf["mainTable"],字串,為 主資料庫.資料表 的名稱,例如 "dbA.dtA".
12662
	$conf["mainTable"]="";
12663
	#$conf["linkColumnName"],二字串陣列,為資料表間相連結的欄位名稱,格式為 array("mergedDb.mergedDt.mergedCol","linkDb.linkDt.linkCol") 就代表當前組好的欄位 mergedDb.mergedDt.mergedCol 跟資料庫 linkDB 表 linkDt 欄位 linkCol 進行資料的配對。
12664
	$conf["linkColumnName"]=array(array(""));	
12665
	#可省略參數:
12666
	#$conf["dbInfo"]["資料庫名稱"]["dbPass"],字串,dbServer的連線密碼.
12667
	#$conf["dbInfo"]["資料庫名稱"]["dbPass"]="";
12668
	#$conf["dbInfo"]["資料庫名稱"]["dbPort"],字串,db連線用的port.
12669
	#$conf["dbInfo"]["資料庫名稱"]["dbPort"]="";
12670
	#$conf["columnYouWant"],字串陣列,為想要的資料表欄位,格式為 "dbName.dtName.colName".
12671
	#$conf["columnYouWant"]=array();
12672
	#$conf["mainDtWhereColName"],字串陣列,用於主表判斷語句的欄位項目陣列.
12673
	#$conf["mainDtWhereColName"]=array("");
12674
	#$conf["mainDtWhereColVal"]=,字串陣列,用於主表判斷語句的欄位項目數值陣列,若與LIKE搭配,則可以在關鍵自字串的左右名加上「%」符號,這樣就可以搜尋具有該字串的內容.
12675
	#$conf["mainDtWhereColVal"]=array("");
12676
	#$conf["mainDtWhereColCombine"],字串陣列,用於主表判斷語句當中需要()起來的判斷式,須爲陣列值,"s"代表「(」,"e"代表「)」 ,若無則須設爲""。
12677
	#$conf["mainDtWhereColCombine"]=array("");
12678
	#$conf["mainWhereColumnOperator"],字串陣列,用於判斷語句的比較符號陣列,可以用的符號有「"="、">"、"<"、"LIKE"、"NOT LIKE"」,預設都爲「=」。
12679
	#$conf["mainWhereColumnOperator"]=array("");
12680
	#$conf["mainWhereColumnAndOr"],字串陣列,用於判斷語句條件之間成立的條件是AND還是OR,須爲陣列值。其數量應爲要判斷的欄位數量減一。
12681
	#$conf["mainWhereColumnAndOr"]=array("");
12682
	#$conf["mainWhereIn"],字串陣列,為每個in語句的內容,特定欄位數值等於陣列元素之一。array(array("colName",array("a","b","c")));代表欄位colName的值為a,b,c三者之一.
12683
	#$conf["mainWhereIn"]=array(array("colName",array("a","b","c")));
12684
	#$conf["mainWhereNotIn"],字串陣列,為每個not in語句的內容,array(array("colName",array("a","b","c")));代表欄位colName的值不為a,b,c三者之一.
12685
	#$conf["mainWhereNotIn"]=array(array("colName",array("a","b","c")));
12686
	#$conf["mainNumberStart"],字串,從第幾筆開始讀取,預設為"0",代筆第一筆。
12687
	#$conf["mainNumberStart"]="0";
12688
	#$conf["mainNumLimit"],字串,要取幾筆資料,可以省略,省略則表示不限制數目.
12689
	#$conf["mainNumLimit"]="30";
12690
	#$conf["mainGroupBy"],字串陣列,爲要以哪幾個欄爲作爲分羣的依據(欄位相同的數值僅會取出一筆)。
12691
	#$conf["mainGroupBy"]=array();
12692
	#$conf["mainOrderItem"],字串,組好的資料的排序項目依據
12693
	#$conf["mainOrderItem"]="";
12694
	#$conf["mainAscORdesc"],字串,組好的資料要低增還是遞減排序,asc爲遞增;desc爲遞減,預設不做處理.
12695
	#$conf["mainAscORdesc"]="";	
12696
	#參考資料:
12697
	#無.
12698
	#備註:
12699
	#無.
12700
	*/
12701
	public static function joinByPHP(&$conf=array()){
12702
 
12703
		#初始化要回傳的內容
12704
		$result=array();
12705
 
12706
		#取得當前執行的函數名稱
12707
		$result["function"]=__FUNCTION__;
12708
 
12709
		#如果 $conf 不為陣列
12710
		if(gettype($conf)!="array"){
12711
 
12712
			#設置執行失敗
12713
			$result["status"]="false";
12714
 
12715
			#設置執行錯誤訊息
12716
			$result["error"][]="\$conf變數須為陣列形態";
12717
 
12718
			#如果傳入的參數為 null
12719
			if($conf==null){
12720
 
12721
				#設置執行錯誤訊息
12722
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
12723
 
12724
				}#if end
12725
 
12726
			#回傳結果
12727
			return $result;
12728
 
12729
			}#if end
12730
 
12731
		#檢查參數
12732
		#函式說明:
12733
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
12734
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
12735
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
12736
		#$result["function"],當前執行的函式名稱.
12737
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
12738
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
12739
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
12740
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
12741
		#必填參數:
12742
		#$conf["variableCheck.checkArguments"]["varInput"],陣列變數,要檢查的陣列變數.
12743
		$conf["variableCheck.checkArguments"]["varInput"]=&$conf;
12744
		#$conf["variableCheck.checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
12745
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableName"]=array("dbInfo","mainTable","linkColumnName");
12746
		#$conf["variableCheck.checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
12747
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableType"]=array("array","string","array");
12748
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
12749
		$conf["variableCheck.checkArguments"]["referenceVarKey"]="variableCheck.checkArguments";
12750
		#可省略參數:
12751
		#$conf["variableCheck.checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"false"。
12752
		#$conf["variableCheck.checkArguments"]["canBeEmptyString"]="false";
12753
		#$conf["variableCheck.checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
12754
		$conf["variableCheck.checkArguments"]["skipableVariableName"]=array("columnYouWant","mainDtWhereColName","mainDtWhereColVal","mainDtWhereColCombine","mainWhereColumnOperator","mainWhereColumnAndOr","mainWhereIn","mainWhereNotIn","mainNumberStart","mainNumLimit","mainGroupBy","mainOrderItem","mainAscORdesc");
12755
		#$conf["variableCheck.checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
12756
		$conf["variableCheck.checkArguments"]["skipableVariableType"]=array("array","array","array","array","array","array","array","array","string","string","array","string","string");
12757
		#$conf["variableCheck.checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定.
12758
		#$conf["variableCheck.checkArguments"]["skipableVarDefaultValue"]=array("");
12759
		$checkResult=variableCheck::checkArguments($conf["variableCheck.checkArguments"]);
12760
		unset($conf["variableCheck.checkArguments"]);
12761
 
12762
		#如果檢查出錯
12763
		if($checkResult["status"]=="false"){
12764
 
12765
			#設置錯誤識別
12766
			$result["status"]="false";
12767
 
12768
			#設置錯誤訊息
12769
			$result["error"]=$checkResult;
12770
 
12771
			#回傳結果
12772
			return $result;
12773
 
12774
			}#if end
12775
 
12776
		#如果檢查出錯
12777
		if($checkResult["passed"]=="false"){
12778
 
12779
			#設置錯誤識別
12780
			$result["status"]="false";
12781
 
12782
			#設置錯誤訊息
12783
			$result["error"]=$checkResult;
12784
 
12785
			#回傳結果
12786
			return $result;
12787
 
12788
			}#if end
12789
 
12790
		#取得 $conf["mainTable"] 的資料
12791
 
12792
		#檢查主表是否為 db.dt 的
12793
		$foundDot=strpos($conf["mainTable"],'.');
12794
 
12795
		#如果不是
12796
		if(!$foundDot){
12797
 
12798
			#設置錯誤識別
12799
			$result["status"]="false";
12800
 
12801
			#設置錯誤訊息
12802
			$result["error"][]="參數 \$conf[\"mainTable\"] 必須為 資料庫名稱.資料表名稱";
12803
 
12804
			#回傳結果
12805
			return $result;
12806
 
12807
			}#if end
12808
 
12809
		#反之
12810
		else{
12811
 
12812
			#用 . 去切割字串
12813
			$dbdtsplitedstr=explode('.',$conf["mainTable"]);
12814
 
12815
			#如果切割出來不等於兩段
12816
			if(count($dbdtsplitedstr)!==2){
12817
 
12818
				#設置錯誤識別
12819
				$result["status"]="false";
12820
 
12821
				#設置錯誤訊息
12822
				$result["error"][]="參數 \$conf[\"mainTable\"] 必須為 資料庫名稱.資料表名稱";
12823
 
12824
				#回傳結果
12825
				return $result;
12826
 
12827
				}#if end
12828
 
12829
			#取得 mainTable 的 db name
12830
			$mainDb=&$dbdtsplitedstr[0];
12831
 
12832
			#取得 mainTable 的名稱
12833
			$mainDt=&$dbdtsplitedstr[1];
12834
 
12835
			}#else end
12836
 
12837
		#若主資料表連線參數不存在
12838
		if(!isset($conf["dbInfo"][$mainDb])){
12839
 
12840
			#設置錯誤識別
12841
			$result["status"]="false";
12842
 
12843
			#設置錯誤訊息
12844
			$result["error"][]="參數 \$conf[\"dbInfo\"][$mainDb] 必須提供";
12845
 
12846
			#回傳結果
12847
			return $result;
12848
 
12849
			}#if end
12850
 
12851
		#檢查主表的參數
12852
		#函式說明:
12853
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
12854
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
12855
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
12856
		#$result["function"],當前執行的函式名稱.
12857
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
12858
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
12859
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
12860
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
12861
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
12862
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
12863
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
12864
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
12865
		#必填參數:
12866
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
12867
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf["dbInfo"][$mainDb];	
12868
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
12869
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
12870
		#可以省略的參數:
12871
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
12872
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("dbAddr","dbAcct");
12873
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
12874
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
12875
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
12876
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
12877
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
12878
		#$conf["canNotBeEmpty"]=array();
12879
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
12880
		#$conf["canBeEmpty"]=array();
12881
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
12882
		$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("dbPass","dbPort");
12883
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
12884
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("dbPass","dbPort");
12885
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
12886
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
12887
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
12888
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null);
12889
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
12890
		#$conf["disallowAllSkipableVarIsEmpty"]="";
12891
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
12892
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
12893
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
12894
		#$conf["arrayCountEqualCheck"][]=array();
12895
		#參考資料:
12896
		#array_keys=>http://php.net/manual/en/function.array-keys.php
12897
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
12898
		unset($conf["variableCheck::checkArguments"]);
12899
 
12900
		#如果執行失敗
12901
		if($checkArguments["status"]==="false"){
12902
 
12903
			#設置錯誤識別
12904
			$result["status"]="false";
12905
 
12906
			#設置錯誤訊息
12907
			$result["error"]=$checkArguments;
12908
 
12909
			#回傳結果
12910
			return $result;
12911
 
12912
			}#if end
12913
 
12914
		#如果檢查不通過
12915
		if($checkArguments["passed"]==="false"){
12916
 
12917
			#設置錯誤識別
12918
			$result["status"]="false";
12919
 
12920
			#設置錯誤訊息
12921
			$result["error"]=$checkArguments;
12922
 
12923
			#回傳結果
12924
			return $result;
12925
 
12926
			}#if end
12927
 
12928
		#函式說明:
12929
		#一次取得資料庫、表的資料
12930
		#回傳結果:
12931
		#$result["status"],執行結果"true"為成功;"false"為執行失敗。
12932
		#$result["error"],錯誤訊息陣列。
12933
		#$result["function"],當前執行的漢書名稱.
12934
		#$result["dataColumnName"],抓取的資料欄位名稱陣列.
12935
			#$result["dataColumnName"][$i]代表第$i+1個欄位名稱
12936
		#$result["dataContent"],爲資料的內容。
12937
		#$result["dataContent"][$conf["WhereColumnName"][$i]][$dataSetNum]
12938
			#$dataSetNum 爲第$dataSetNum+1筆資料
12939
			#$conf["WhereColumnName"][$i] 爲第 $i+1 個欄位的名稱
12940
		#$result["dataCount"],爲取得的資料筆數。
12941
		#$result["sql"],執行的sql字串.
12942
		#必填參數:
12943
		$conf["db::fastGetDbData"]["dbAddress"]=$conf["dbInfo"][$mainDb]["dbAddr"];#爲dbServer的位置。
12944
		$conf["db::fastGetDbData"]["dbAccount"]=$conf["dbInfo"][$mainDb]["dbAcct"];#爲登入dbServer的帳號。
12945
		$conf["db::fastGetDbData"]["dbName"]=$mainDb;#爲要存取的資料庫名稱
12946
		$conf["db::fastGetDbData"]["tableName"]=$mainDt;#爲要存取的資料表名稱
12947
		$conf["db::fastGetDbData"]["columnYouWant"]=array("*");#你想要的欄位!,若設為「array("*")」則代表全部欄位.
12948
		#可省略參數:
12949
 
12950
		#如果有給予連線密碼
12951
		if(isset($conf["dbInfo"][$mainDb]["dbPass"])){
12952
 
12953
			$conf["db::fastGetDbData"]["dbPassword"]=$conf["dbInfo"][$mainDb]["dbPass"];#爲要存取dbServer的密碼
12954
 
12955
			}#if end
12956
 
12957
		#如果有給予連線port
12958
		if(isset($conf["dbInfo"][$mainDb]["dbPort"])){
12959
 
12960
			$conf["db::fastGetDbData"]["dbPort"]=$conf["dbInfo"][$mainDb]["dbPort"];#爲要存取dbServer的port
12961
 
12962
			}#if end
12963
 
12964
		#如果有設置 $conf["mainDtWhereColName"]
12965
		if(isset($conf["mainDtWhereColName"])){
12966
 
12967
			#設置參數
12968
			$conf["db::fastGetDbData"]["WhereColumnName"]=$conf["mainDtWhereColName"];
12969
 
12970
			}#if end
12971
 
12972
		#如果有設置 $conf["mainDtWhereColVal"]
12973
		if(isset($conf["mainDtWhereColVal"])){
12974
 
12975
			#設置參數
12976
			$conf["db::fastGetDbData"]["WhereColumnValue"]=$conf["mainDtWhereColVal"];#用於判斷語句的欄位數值陣列,若與LIKE搭配,則可以在關鍵自字串的左右名加上「%」符號,這樣就可以搜尋具有該字串的內容。
12977
 
12978
			}#if end
12979
 
12980
		#如果有設置 $conf["mainDtWhereColCombine"]
12981
		if(isset($conf["mainDtWhereColCombine"])){
12982
 
12983
			#設置參數
12984
			$conf["db::fastGetDbData"]["WhereColumnCombine"]=$conf["mainDtWhereColCombine"];#用於判斷語句當中需要()起來的判斷式,須爲陣列值,"s"代表「(」,"e"代表「)」 ,若無則須設爲""。
12985
 
12986
			}#if end
12987
 
12988
		#如果有設置 $conf["mainWhereColumnOperator"]
12989
		if(isset($conf["mainWhereColumnOperator"])){
12990
 
12991
			#設置參數
12992
			$conf["db::fastGetDbData"]["WhereColumnOperator"]=$conf["mainWhereColumnOperator"];#用於判斷語句的比較符號陣列,可以用的符號有「"="、"!="、">"、"<"、"LIKE"、"NOT LIKE"」,預設都爲「=」。
12993
 
12994
			}#if end
12995
 
12996
		#如果有設置 $conf["mainWhereColumnAndOr"]
12997
		if(isset($conf["mainWhereColumnAndOr"])){
12998
 
12999
			#設置參數
13000
			$conf["db::fastGetDbData"]["WhereColumnAndOr"]=$conf["mainWhereColumnAndOr"];#用於判斷語句條件之間成立的條件是AND還是OR,須爲陣列值。其數量應爲要判斷的欄位數量減一。
13001
 
13002
			}#if end
13003
 
13004
		#如果有設置 $conf["mainWhereIn"]
13005
		if(isset($conf["mainWhereIn"])){
13006
 
13007
			#$conf["whereIn"],二維字串陣列,為每個in語句的內容,特定欄位數值等於陣列元素之一。array(array("colName",array("a","b","c")));代表欄位colName的值為a,b,c三者之一.
13008
			$conf["db::fastGetDbData"]["whereIn"]=$conf["mainWhereIn"];
13009
 
13010
			}#if end
13011
 
13012
		#如果有設置 $conf["mainWhereNotIn"]
13013
		if(isset($conf["mainWhereNotIn"])){
13014
 
13015
			#設置參數
13016
			#$conf["whereNotIn"],二維字串陣列,為每個not in語句的內容,array(array("colName",array("a","b","c")));代表欄位colName的值不為a,b,c三者之一.
13017
			$conf["db::fastGetDbData"]["whereNotIn"]=$conf["mainWhereNotIn"];
13018
 
13019
			}#if end
13020
 
13021
		#如果有設置 $conf["mainNumberStart"]
13022
		if(isset($conf["mainNumberStart"])){
13023
 
13024
			#設置參數
13025
			$conf["db::fastGetDbData"]["numberStart"]=$conf["mainNumberStart"];#為從第幾筆開始讀取,預設為0,代筆第一筆。
13026
 
13027
			}#if end
13028
 
13029
		#如果有設置 $conf["mainNumLimit"]
13030
		if(isset($conf["mainNumLimit"])){
13031
 
13032
			#設置參數
13033
			$conf["db::fastGetDbData"]["numLimit"]=$conf["mainNumLimit"];#為要取幾筆資料,可以省略,省略則表示不限制數目。
13034
 
13035
			}#if end
13036
 
13037
		#如果有設置 $conf["mainGroupBy"]
13038
		if(isset($conf["mainGroupBy"])){
13039
 
13040
			#設置參數
13041
			$conf["db::fastGetDbData"]["groupBy"]=$conf["mainGroupBy"];#爲要以哪幾個欄爲作爲分羣的依據(欄位相同的數值僅會取出一筆)。
13042
 
13043
			}#if end
13044
 
13045
		#如果有設置 $conf["mainOrderItem"]
13046
		if(isset($conf["mainOrderItem"])){
13047
 
13048
			#設置參數
13049
			$conf["db::fastGetDbData"]["orderItem"]=$conf["mainOrderItem"];#爲排序的項目依據,若要用隨機抽樣,可以用"rand()",可省略。
13050
 
13051
			}#if end
13052
 
13053
		#如果有設置 $conf["mainAscORdesc"]
13054
		if(isset($conf["mainAscORdesc"])){
13055
 
13056
			#設置參數
13057
			#$conf["mainAscORdesc"],字串,組好的資料要低增還是遞減排序,asc爲遞增;desc爲遞減,預設不做處理.
13058
			$conf["db::fastGetDbData"]["mainAscORdesc"]=$conf["mainAscORdesc"];
13059
 
13060
			}#if end
13061
 
13062
		$fastGetDbData=db::fastGetDbData($conf["db::fastGetDbData"]);
13063
		unset($conf["db::fastGetDbData"]);
13064
 
13065
		#如果執行失敗
13066
		if($fastGetDbData["status"]==="false"){
13067
 
13068
			#設置錯誤識別
13069
			$result["status"]="false";
13070
 
13071
			#設置錯誤訊息
13072
			$result["error"]=$fastGetDbData;
13073
 
13074
			#回傳結果
13075
			return $result;
13076
 
13077
			}#if end
13078
 
13079
		#var_dump($fastGetDbData);
13080
 
13081
		#初始化儲存合併好的資料
13082
		$merged=array();
13083
 
13084
		#如果該存在的變數不存在
13085
		if(!isset($fastGetDbData["dataColumnName"])){
13086
 
13087
			#設置錯誤識別
13088
			$result["status"]="false";
13089
 
13090
			#設置錯誤訊息
13091
			$result["error"]=$fastGetDbData;
13092
 
13093
			#回傳結果
13094
			return $result;
13095
 
13096
			}#if end
13097
 
13098
		#針對每個欄位
13099
		foreach($fastGetDbData["dataColumnName"] as $colName){
13100
 
13101
			#將當前資料的欄位用 dbName.dtName.dataColName 儲存
13102
			$merged[$mainDb.".".$mainDt.".".$colName]=$fastGetDbData["dataContent"][$colName];
13103
 
13104
			}#foreach end
13105
 
13106
		#移除變數節省記憶體
13107
		unset($fastGetDbData);
13108
 
13109
		#取得陣列元素數目
13110
		$mergedCount=count($merged);
13111
 
13112
		#移除以數字為欄位索引的變數
13113
		for($i=0;$i<$mergedCount/2;$i++){
13114
 
13115
			#移除索引
13116
			unset($merged[$i]);
13117
 
13118
			}#for end
13119
 
13120
		#var_dump($merged);exit;
13121
 
13122
		#針對每個 $conf["linkColumnName"] 
13123
		foreach($conf["linkColumnName"] as $linkCondition){
13124
 
13125
			#如果不是陣列
13126
			if(gettype($linkCondition)!=="array"){
13127
 
13128
				#設置錯誤識別
13129
				$result["status"]="false";
13130
 
13131
				#設置錯誤訊息
13132
				$result["error"][]="參數 linkColumnName 的陣列元素應該為陣列.";
13133
 
13134
				#回傳結果
13135
				return $result;
13136
 
13137
				}#if end
13138
 
13139
			#如果數量不為2
13140
			if(count($linkCondition)!==2){
13141
 
13142
				#設置錯誤識別
13143
				$result["status"]="false";
13144
 
13145
				#設置錯誤訊息
13146
				$result["error"][]="參數 linkColumnName 的陣列元素應為有兩個元素的陣列.";
13147
 
13148
				#回傳結果
13149
				return $result;
13150
 
13151
				}#if end
13152
 
13153
			#取得原始欄位的名稱
13154
			$oriCol=&$linkCondition[0];	
13155
 
13156
			#如果用來比對的原欄位不存在
13157
			if(!isset($merged[$oriCol])){
13158
 
13159
				#設置錯誤識別
13160
				$result["status"]="false";
13161
 
13162
				#設置錯誤訊息
13163
				$result["error"][]="用來比對的原始資料沒有欄位 「".$oriCol."」 存在.";
13164
 
13165
				#回傳結果
13166
				return $result;
13167
 
13168
				}#if end
13169
 
13170
			#取得要增加的欄位名稱
13171
			$newCol=&$linkCondition[1];	
13172
 
13173
			#檢查增加的欄位名稱是否有 "."
13174
			$foundDot=strpos($newCol,'.');
13175
 
13176
			#如果不是
13177
			if(!$foundDot){
13178
 
13179
				#設置錯誤識別
13180
				$result["status"]="false";
13181
 
13182
				#設置錯誤訊息
13183
				$result["error"][]="參數 linkColumnName 的欄位格式 ".$newCol." 必須為 資料庫名稱.資料表名稱.資料欄位名稱";
13184
 
13185
				#回傳結果
13186
				return $result;
13187
 
13188
				}#if end
13189
 
13190
			#反之
13191
			else{
13192
 
13193
				#用 . 去切割字串
13194
				$dbdtsplitedstr=explode('.',$newCol);
13195
 
13196
				#如果切割出來不等於兩段
13197
				if(count($dbdtsplitedstr)!==3){
13198
 
13199
					#設置錯誤識別
13200
					$result["status"]="false";
13201
 
13202
					#設置錯誤訊息
13203
					$result["error"][]="參數 linkColumnName 的欄位格式 ".$newCol." 必須為 資料庫名稱.資料表名稱.資料欄位名稱";
13204
 
13205
					#回傳結果
13206
					return $result;
13207
 
13208
					}#if end
13209
 
13210
				#取得 linkTable 的 db name
13211
				$linkDb=&$dbdtsplitedstr[0];
13212
 
13213
				#取得 linkTable 的名稱
13214
				$linkDt=&$dbdtsplitedstr[1];
13215
 
13216
				#取得 linkCol 的名稱
13217
				$linkCol=&$dbdtsplitedstr[2];
13218
 
13219
				}#else end
13220
 
13221
			#檢查次表的參數
13222
			#函式說明:
13223
			#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
13224
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13225
			#$reuslt["error"],執行不正常結束的錯訊息陣列.
13226
			#$result["function"],當前執行的函式名稱.
13227
			#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
13228
			#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
13229
			#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
13230
			#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
13231
			#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
13232
			#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
13233
			#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
13234
			#$result["notNeedVar"],字串陣列,多餘的參數名稱.
13235
			#必填參數:
13236
			#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
13237
			$conf["variableCheck::checkArguments"]["varInput"]=&$conf["dbInfo"][$linkDb];	
13238
			#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
13239
			$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
13240
			#可以省略的參數:
13241
			#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
13242
			$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("dbAddr","dbAcct");
13243
			#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
13244
			$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
13245
			#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
13246
			$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
13247
			#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
13248
			#$conf["canNotBeEmpty"]=array();
13249
			#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
13250
			#$conf["canBeEmpty"]=array();
13251
			#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
13252
			$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("dbPass");
13253
			#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
13254
			$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("dbPass");
13255
			#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
13256
			$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
13257
			#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
13258
			$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null);
13259
			#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
13260
			#$conf["disallowAllSkipableVarIsEmpty"]="";
13261
			#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
13262
			#$conf["disallowAllSkipableVarIsEmptyArray"]="";
13263
			#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
13264
			#$conf["arrayCountEqualCheck"][]=array();
13265
			#參考資料:
13266
			#array_keys=>http://php.net/manual/en/function.array-keys.php
13267
			$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
13268
			unset($conf["variableCheck::checkArguments"]);
13269
 
13270
			#var_dump($checkArguments);
13271
			#exit;
13272
 
13273
			#如果執行失敗
13274
			if($checkArguments["status"]==="false"){
13275
 
13276
				#設置錯誤識別
13277
				$result["status"]="false";
13278
 
13279
				#設置錯誤訊息
13280
				$result["error"]=$checkArguments;
13281
 
13282
				#回傳結果
13283
				return $result;
13284
 
13285
				}#if end
13286
 
13287
			#如果檢查不通過
13288
			if($checkArguments["passed"]==="false"){
13289
 
13290
				#設置錯誤識別
13291
				$result["status"]="false";
13292
 
13293
				#設置錯誤訊息
13294
				$result["error"]=$checkArguments;
13295
 
13296
				#回傳結果
13297
				return $result;
13298
 
13299
				}#if end
13300
 
13301
			#初始化新合併過後的資料
13302
			$newMerged=&$merged;
13303
 
13304
			#初始化儲存既有的欄位名稱
13305
			$mergedColName=array_keys($merged);
13306
 
13307
			#取得既有的欄位的數量
13308
			$mergedColCount=count($mergedColName);		
13309
 
13310
			#主表有幾筆資料就執行幾次
13311
			foreach($merged[$oriCol] as $index=>$mainColVal){
13312
 
13313
				#函式說明:
13314
				#一次取得資料庫、表的資料
13315
				#回傳結果:
13316
				#$result["status"],執行結果"true"為成功;"false"為執行失敗。
13317
				#$result["error"],錯誤訊息陣列。
13318
				#$result["function"],當前執行的漢書名稱.
13319
				#$result["dataColumnName"],抓取的資料欄位名稱陣列.
13320
					#$result["dataColumnName"][$i]代表第$i+1個欄位名稱
13321
				#$result["dataContent"],爲資料的內容。
13322
				#$result["dataContent"][$conf["WhereColumnName"][$i]][$dataSetNum]
13323
					#$dataSetNum 爲第$dataSetNum+1筆資料
13324
					#$conf["WhereColumnName"][$i] 爲第 $i+1 個欄位的名稱
13325
				#$result["dataCount"],爲取得的資料筆數。
13326
				#$result["sql"],執行的sql字串.
13327
				#必填參數:
13328
				$conf["db::fastGetDbData"]["dbAddress"]=$conf["dbInfo"][$linkDb]["dbAddr"];#爲dbServer的位置。
13329
				$conf["db::fastGetDbData"]["dbAccount"]=$conf["dbInfo"][$linkDb]["dbAcct"];#爲登入dbServer的帳號。
13330
				$conf["db::fastGetDbData"]["dbName"]=$linkDb;#爲要存取的資料庫名稱
13331
				$conf["db::fastGetDbData"]["tableName"]=$linkDt;#爲要存取的資料表名稱
13332
				$conf["db::fastGetDbData"]["columnYouWant"]=array("*");#你想要的欄位!,若設為「array("*")」則代表全部欄位.
13333
				#可省略參數:
13334
 
13335
				#如果有設置次表的密碼
13336
				if(isset($conf["dbInfo"][$linkDb]["dbPass"])){
13337
 
13338
					$conf["db::fastGetDbData"]["dbPassword"]=$conf["dbInfo"][$linkDb]["dbPass"];#爲要存取dbServer的密碼
13339
 
13340
					}#if end			
13341
 
13342
				$conf["db::fastGetDbData"]["WhereColumnName"]=array($linkCol);#用於判斷語句的欄位項目陣列。
13343
				$conf["db::fastGetDbData"]["WhereColumnValue"]=array($mainColVal);#用於判斷語句的欄位數值陣列,若與LIKE搭配,則可以在關鍵自字串的左右名加上「%」符號,這樣就可以搜尋具有該字串的內容。
13344
				#$conf["WhereColumnCombine"]=array("");#用於判斷語句當中需要()起來的判斷式,須爲陣列值,"s"代表「(」,"e"代表「)」 ,若無則須設爲""。
13345
				#$conf["WhereColumnOperator"]=array("");#用於判斷語句的比較符號陣列,可以用的符號有「"="、"!="、">"、"<"、"LIKE"、"NOT LIKE"」,預設都爲「=」。
13346
				#$conf["WhereColumnAndOr"]=array("");#用於判斷語句條件之間成立的條件是AND還是OR,須爲陣列值。其數量應爲要判斷的欄位數量減一。
13347
				#$conf["whereIn"],二維字串陣列,為每個in語句的內容,特定欄位數值等於陣列元素之一。array(array("colName",array("a","b","c")));代表欄位colName的值為a,b,c三者之一.
13348
				#$conf["whereIn"]=array(array("colName",array("a","b","c")));
13349
				#$conf["whereNotIn"],二維字串陣列,為每個not in語句的內容,array(array("colName",array("a","b","c")));代表欄位colName的值不為a,b,c三者之一.
13350
				#$conf["whereNotIn"]=array(array("colName",array("a","b","c")));
13351
				#$conf["orderItem"]="";#爲排序的項目依據,若要用隨機抽樣,可以用"rand()",可省略。
13352
				#$conf["ascORdesc"]="";#爲要低增還是遞減排序,asc爲遞增;desc爲遞減。
13353
				#$conf["numberStart"]="0";#為從第幾筆開始讀取,預設為0,代筆第一筆。
13354
				#$conf["db::fastGetDbData"]["numLimit"]="1";#為要取幾筆資料,可以省略,省略則表示不限制數目。
13355
				#$conf["groupBy"]=array("");#爲要以哪幾個欄爲作爲分羣的依據(欄位相同的數值僅會取出一筆)。
13356
				$fastGetDbData=db::fastGetDbData($conf["db::fastGetDbData"]);
13357
				unset($conf["db::fastGetDbData"]);
13358
 
13359
				#如果query失敗
13360
				if($fastGetDbData["status"]==="false"){
13361
 
13362
					#設置執行失敗
13363
					$result["status"]="false";
13364
 
13365
					#設置錯誤訊息
13366
					$result["error"]=$fastGetDbData;
13367
 
13368
					#回傳結果;
13369
					return $result;
13370
 
13371
					}#if end
13372
 
13373
				#如果如果沒有符合的資料
13374
				if($fastGetDbData["dataCount"]===0){
13375
 
13376
					#如果有欄位名稱存在
13377
					if(isset($fastGetDbData["dataColumnName"])){
13378
 
13379
						#次表有幾個欄位就執行幾次
13380
						foreach($fastGetDbData["dataColumnName"] as $linkedColName){
13381
 
13382
							#給予NULL
13383
							$newMerged[$linkDb.".".$linkDt.".".$linkedColName][$index]=NULL;
13384
 
13385
							}#foreach end					
13386
 
13387
						}#if end
13388
 
13389
					}#if end
13390
 
13391
				#反之有資料
13392
				else{
13393
 
13394
					#次表有幾個欄位就執行幾次
13395
					foreach($fastGetDbData["dataColumnName"] as $linkedColName){
13396
 
13397
						#設置新的欄位資料
13398
						$newMerged[$linkDb.".".$linkDt.".".$linkedColName][$index]=$fastGetDbData["dataContent"][$linkedColName][0];
13399
 
13400
						}#foreach end
13401
 
13402
					#有幾筆資料就執行幾次
13403
					for($i=1;$i<$fastGetDbData["dataCount"];$i++){
13404
 
13405
						#取得資新料的索引
13406
						$newMergedDataIndex=count($newMerged[$mergedColName[0]]);
13407
 
13408
						#有幾個欄位就執行幾次
13409
						for($j=0;$j<$mergedColCount;$j++){
13410
 
13411
							#複製既有的欄位資料
13412
							$newMerged[$mergedColName[$j]][$newMergedDataIndex]=$newMerged[$mergedColName[$j]][$index];
13413
 
13414
							}#for end							
13415
 
13416
						#次表有幾個欄位就執行幾次
13417
						foreach($fastGetDbData["dataColumnName"] as $linkedColName){	
13418
 
13419
							#加上新的欄位資料
13420
							$newMerged[$linkDb.".".$linkDt.".".$linkedColName][$newMergedDataIndex]=$fastGetDbData["dataContent"][$linkedColName][$i];
13421
 
13422
							}#foreach end
13423
 
13424
						}#for end					
13425
 
13426
					}#else end
13427
 
13428
				}#foreach end
13429
 
13430
			}#foreach end
13431
 
13432
		#如果有設置要的欄位
13433
		if(isset($conf["columnYouWant"])){
13434
 
13435
			#初始化儲存僅需要的欄位
13436
			$filteredCol=array();
13437
 
13438
			#依照每個需要的欄位
13439
			foreach($conf["columnYouWant"] as $colYouWant){
13440
 
13441
				#如果要的欄位不存在
13442
				if(!isset($newMerged[$colYouWant])){
13443
 
13444
					#設置執行不正常;  
13445
					$result["status"]="false";
13446
 
13447
					#設置錯誤訊息
13448
					$result["error"][]="欄位 ".$colYouWant." 不存在於查詢後的結果!";
13449
 
13450
					#回傳結果
13451
					return $result;
13452
 
13453
					}#if end
13454
 
13455
				#取得欄位內容
13456
				$filteredCol[$colYouWant]=&$newMerged[$colYouWant];
13457
 
13458
				}#foreach end
13459
 
13460
			#置換成篩選過後的欄位資訊
13461
			$newMerged=$filteredCol;
13462
 
13463
			}#if end
13464
 
13465
		#設置執行正常
13466
		$result["status"]="true";
13467
 
13468
		#設置join完的資料;
13469
		$result["content"]=$merged;
13470
 
13471
		#回傳結果
13472
		return $result;
13473
 
13474
		}#function joinByPHP end
13475
 
13476
	/*
13477
	#函式說明:
13478
	#取得該資料表總共有幾筆資料
13479
	#回傳變數:
13480
	#$result["status"],爲執行是否正常,若爲"true"則成功,若爲"false"則表示失敗了
13481
	#$result["function"],當前執行的函數名稱
13482
	#$result["error"],錯誤訊息
13483
	#$result["dataCount"],資料表裏面的資料筆數。
13484
	#必填參數:
13485
	#$conf["dbAddress"],字串,爲mysql-Server的位置.
13486
	$conf["dbAddress"]=$dbAddress;
13487
	#$conf["dbAccount"]字串,爲用於連入mysql-Server時要使用的帳號.
13488
	$conf["dbAccount"]=$dbAccount;
13489
	#$conf["selectedDataBaseName"],字串,要選取的資料庫名稱	
13490
	$conf["selectedDataBaseName"]=$dbName;
13491
	#$conf["selectedDataTableName"],字串,為要計算的對象資料表
13492
	$conf["selectedDataTableName"]="";#為要計算的對象資料表
13493
	#可省略參數:
13494
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼.
13495
	#$conf["dbPassword"]=$dbPassword;
13496
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,可省略,若省略則代表用預設的 port 3306.
13497
	#$conf["dbPort"]=$dbPort;
13498
	#參考資料:
13499
	#無.
13500
	#備註:
13501
	#無.
13502
	*/	
13503
	public static function getDataCountsInTable($conf){
13504
 
13505
		#初始化要回傳的內容
13506
		$result=array();
13507
 
13508
		#取得當前執行的函數名稱
13509
		$result["function"]=__FUNCTION__;
13510
 
13511
		#如果 $conf 不為陣列
13512
		if(gettype($conf)!="array"){
13513
 
13514
			#設置執行失敗
13515
			$result["status"]="false";
13516
 
13517
			#設置執行錯誤訊息
13518
			$result["error"][]="\$conf變數須為陣列形態";
13519
 
13520
			#如果傳入的參數為 null
13521
			if($conf==null){
13522
 
13523
				#設置執行錯誤訊息
13524
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
13525
 
13526
				}#if end
13527
 
13528
			#回傳結果
13529
			return $result;
13530
 
13531
			}#if end
13532
 
13533
		#檢查參數
13534
		#函式說明:
13535
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
13536
		#回傳結果:
13537
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13538
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
13539
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
13540
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
13541
		#必填參數:
13542
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
13543
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("dbAddress","dbPassword","selectedDataBaseName","selectedDataTableName");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
13544
		#可省略參數:
13545
		#$conf["variableCheck"]["isexistMuti"]["variableType"]=array();#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
13546
		#$conf["variableCheck"]["isexistMuti"]"canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
13547
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
13548
		unset($conf["variableCheck"]["isexistMuti"]);
13549
 
13550
		#如果 $checkResult["status"] 等於 "false"
13551
		if($checkResult["status"]=="false"){
13552
 
13553
			#設置錯識別
13554
			$result["status"]="false";
13555
 
13556
			#設置錯誤訊息
13557
			$result["error"]=$checkResult;
13558
 
13559
			#回傳結果
13560
			return $result;
13561
 
13562
			}#if end
13563
 
13564
		#如果 $checkResult["passed"] 等於 "false"
13565
		if($checkResult["passed"]=="false"){
13566
 
13567
			#設置錯識別
13568
			$result["passed"]="false";
13569
 
13570
			#設置錯誤訊息
13571
			$result["error"]=$checkResult;
13572
 
13573
			#回傳結果
13574
			return $result;
13575
 
13576
			}#if end
13577
 
13578
		#函式說明:
13579
		#執行mysql指令
13580
		#回傳結果::
13581
		#$result["status"],"true"為執行成功;"false"為執行失敗。
13582
		#$result["error"],錯誤訊息的陣列
13583
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
13584
		#$result["queryString"],mysql查詢的語言
13585
		#查詢號的解果,需要解析。
13586
		#必填參數:
13587
		$conf["db"]["execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
13588
		$conf["db"]["execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
13589
		$conf["db"]["execMysqlQuery"]["dbSql"]="select count(*) from ".$conf["selectedDataBaseName"].".".$conf["selectedDataTableName"]." ;";#要執行sql語法
13590
		#可省略參數:
13591
 
13592
		#如果 $conf["dbPassword"] 有設定
13593
		if(isset($conf["dbPassword"])){
13594
 
13595
			$conf["db"]["execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
13596
 
13597
			}#if end
13598
 
13599
		#如果 $conf["dbPort"] 有設定
13600
		if(isset($conf["dbPort"])){
13601
 
13602
			$conf["db"]["execMysqlQuery"]["dbPort"]=$conf["dbPort"];#爲連線到mysql-Server時要使用的port,可省略,若省略則代表預設的 port.
13603
 
13604
			}#if end
13605
 
13606
		#執行查尋	
13607
		$countResult=db::execMysqlQuery($conf["db"]["execMysqlQuery"]);
13608
		unset($conf["db"]["execMysqlQuery"]);
13609
 
13610
		#如果執行失敗
13611
		if($countResult["status"]=="false"){
13612
 
13613
			#設置錯誤識別
13614
			$result["status"]="false";
13615
 
13616
			#設置錯誤訊息
13617
			$result["error"]=$countResult;
13618
 
13619
			#回傳結果
13620
			return $result;
13621
 
13622
			}#if end
13623
 
13624
		#解析 dataTableSelect($conf) 後的結果,亦即將執行sql語法後所得到的結果解析放進變數裏面
13625
		#回傳結果:
13626
		#$result["status"],執行結果"true"為成功;"false"為失敗
13627
		#$result["error"],錯誤訊息
13628
		#$result["dataColumnName"],為資料欄位的名稱陣列.
13629
			#$result["dataColumnName"][$i]代表第一個欄位名稱.
13630
		#$result["dataContent"],爲資料的內容。
13631
		#$result["dataContent"][$conf["tableValueName"][$i]][$dataSetNum],
13632
			#$dataSetNum 爲第$dataSetNum+1筆資料
13633
			#$conf["tableValueName"][$i] 爲第 $i+1 個欄位的名稱
13634
		#$result["dataCount"],爲取得的資料筆數。
13635
		#必填參數:
13636
		$conf["db"]["sendQueryDataToVariabele"]["sqlQueryResult"]=$countResult["queryResource"];#爲執行sql語法所獲得的查詢結果。
13637
		$conf["db"]["sendQueryDataToVariabele"]["tableValueName"]=array("count(*)");#爲該資料表列項目的每一項名稱,須爲陣列值,若為「array("*")」則代表所有欄位.
13638
		$conf["db"]["sendQueryDataToVariabele"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
13639
		$conf["db"]["sendQueryDataToVariabele"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
13640
		#可省略參數:
13641
 
13642
		#如果 $conf["dbPassword"] 有設置
13643
		if(isset($conf["dbPassword"])){
13644
 
13645
			$conf["db"]["sendQueryDataToVariabele"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
13646
 
13647
			}#if end
13648
 
13649
		#如果 $conf["dbPort"] 有設置
13650
		if(isset($conf["dbPort"])){
13651
 
13652
			$conf["db"]["sendQueryDataToVariabele"]["dbPort"]=$conf["dbPort"];#爲連線到mysql-Server時要使用的port,可省略,若省略則代表預設的port 3306
13653
 
13654
			}#if end
13655
 
13656
		$conf["db"]["sendQueryDataToVariabele"]["valueName"]=array("count");#陣列,爲該資料表列項目的每一項所要對應的變數名稱,預設為欄位的名稱($conf["tableValueName"]).
13657
		#參考資料:
13658
		#http://www.w3school.com.cn/php/func_mysql_fetch_array.asp => 解析取得的資料表欄位時,能夠選擇回傳含有欄位名稱與數字代表的key.
13659
		$getCountResult=db::sendQueryDataToVariabele($conf["db"]["sendQueryDataToVariabele"]);
13660
		unset($conf["db"]["sendQueryDataToVariabele"]);
13661
 
13662
		#如果 $getCountResult["status"] 等於 "false"
13663
		if($getCountResult["status"]=="false"){
13664
 
13665
			#設置錯誤識別
13666
			$result["status"]="false";
13667
 
13668
			#設置錯誤訊息
13669
			$result["error"]=$getCountResult;
13670
 
13671
			#回傳結果
13672
			return $result;
13673
 
13674
			}#if end
13675
 
13676
		#取得資料筆數
13677
		$result["dataCount"]=$getCountResult["dataContent"]["count"][0];
13678
 
13679
		#執行到這邊代表執行正常
13680
		$result["status"]="true";
13681
 
13682
		#回傳查詢的結果;	
13683
		return $result;	
13684
 
13685
		}#function getDataCountsInTable end
13686
 
13687
	/*
13688
	#函式說明:
13689
	#插入資料到指定的資料表裡面,插入資料完畢可以選擇是否要進行轉址。
13690
	#回傳結果:	
13691
	#$result["status"],爲查詢是否成功,若爲"true"則成功,若爲"false"則表示失敗了.
13692
	#$result["error"],錯誤訊息.
13693
	#$result["sql"],執行的sql語法.
13694
	#$result["lastInsertId"],新增的資料id.
13695
	#$result["function"],當前執行的涵式
13696
	#必填參數:
13697
	#$conf["dbAddress"],字串,爲mysql-Server的位置
13698
	$conf["dbAddress"]=$dbAddress;
13699
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號
13700
	$conf["dbAccount"]=$dbAccount;
13701
	#$conf["selectedDataBaseName"],字串,要選取的資料庫名稱
13702
	$conf["selectedDataBaseName"]=$dbName;
13703
	#$conf["tableName"],字串,爲要插入資料的資料表名稱
13704
	$conf["tableName"]="";
13705
	#$conf["columnName"],字串陣列,爲資料表的項目名稱.例如:$conf["columnName"]=array("columnName1","columnName2","columnName3",...);
13706
	$conf["columnName"]=array();
13707
	#$conf["insertValue"],字串陣列,爲要插入度數值.#例如:$conf["insertValue"]=array("insertValue1","insertValue2","insertValue3",...);
13708
	$conf["insertValue"]=array();
13709
	#可省略參數:
13710
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
13711
	#$conf["dbPassword"]=$dbPassword;
13712
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,可省略,若省略則代表用預設的 3306 port.
13713
	#$conf["dbPort"]=$dbPort;
13714
	#參考資料:
13715
	#http://www.javaworld.com.tw/jute/post/view?bid=21&id=173738&sty=1
13716
	#備註:
13717
	#無.
13718
	*/	
13719
	public static function insertData($conf){
13720
 
13721
		#初始化要回傳的內容
13722
		$result=array();
13723
 
13724
		#取得當前執行的函數名稱
13725
		$result["function"]=__FUNCTION__;
13726
 
13727
		#如果 $conf 不為陣列
13728
		if(gettype($conf)!="array"){
13729
 
13730
			#設置執行失敗
13731
			$result["status"]="false";
13732
 
13733
			#設置執行錯誤訊息
13734
			$result["error"][]="\$conf變數須為陣列形態";
13735
 
13736
			#如果傳入的參數為 null
13737
			if($conf==null){
13738
 
13739
				#設置執行錯誤訊息
13740
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
13741
 
13742
				}#if end
13743
 
13744
			#回傳結果
13745
			return $result;
13746
 
13747
			}#if end
13748
 
13749
		#函式說明:
13750
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
13751
		#回傳結果:
13752
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
13753
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
13754
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
13755
		#必填參數:
13756
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
13757
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("dbAddress","dbAccount","selectedDataBaseName","tableName","columnName","insertValue");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
13758
		#可省略參數:
13759
		$conf["variableCheck"]["isexistMuti"]["variableType"]=array("string","string","string","string","array","array");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
13760
		#$conf["variableCheck"]["isexistMuti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
13761
		#備註:
13762
		#功能與checkExistAndType函式相同
13763
		$variableCheck=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
13764
		unset($conf["variableCheck"]["isexistMuti"]);
13765
 
13766
		#如果 $variableCheck["status"] 等於 "false"
13767
		if($variableCheck["status"]=="false"){
13768
 
13769
			#設置執行錯誤的識別
13770
			$result["status"]="false";
13771
 
13772
			#設置執行錯誤的訊息
13773
			$result["error"]=$variableCheck;
13774
 
13775
			#回傳結果
13776
			return $result;
13777
 
13778
			}#if end
13779
 
13780
		#如果 $variableCheck["passed"] 等於 "false"
13781
		if($variableCheck["passed"]=="false"){
13782
 
13783
			#設置執行錯誤的識別
13784
			$result["status"]="false";
13785
 
13786
			#設置執行錯誤的訊息
13787
			$result["error"]=$variableCheck;
13788
 
13789
			#回傳結果
13790
			return $result;
13791
 
13792
			}#if end
13793
 
13794
		#連線到資料庫
13795
		#函式說明:
13796
		#連線到資料庫,結果會回傳一個陣列
13797
		#$result["status"],若連線成功則爲"true",連線失敗則爲"false".
13798
		#$result["connectInformation"],爲回傳的mysql連線資訊.
13799
		#$result["error"],錯誤訊息	.
13800
		#$result["function"],當前執行的函數名稱.	
13801
		#必填參數:
13802
		$conf["db"]["dbConnect"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
13803
		$conf["db"]["dbConnect"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
13804
		#$conf["dbName"],字串,爲要連的資料庫名稱
13805
		$conf["db"]["dbConnect"]["dbName"]=$conf["selectedDataBaseName"];
13806
		#可省略參數:
13807
 
13808
		#如果 $conf["dbPassword"] 有設定
13809
		if(isset($conf["dbPassword"])){
13810
 
13811
			$conf["db"]["dbConnect"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
13812
 
13813
			}#if end
13814
 
13815
		#如果 $conf["dbPort"] 有設定
13816
		if(isset($conf["dbPort"])){
13817
 
13818
			$conf["db"]["dbConnect"]["dbPort"]=$conf["dbPort"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
13819
 
13820
			}#if end
13821
 
13822
		$con=db::dbConnect($conf["db"]["dbConnect"]);
13823
		unset($conf["db"]);
13824
 
13825
		#如果連線到資料庫失敗
13826
		if($con["status"]==="false"){
13827
 
13828
			#設置執行失敗
13829
			$result["status"]="false";
13830
 
13831
			#設置執行錯誤訊息
13832
			$result["error"]=$con;
13833
 
13834
			#回傳結果
13835
			return $result;
13836
 
13837
			}#if end
13838
 
13839
		#var_dump($con);	
13840
 
13841
		#取得mysqli物件
13842
		$mysqli=$con["connectInformation"];
13843
 
13844
		#輸入資料到 資料表 board 的語法
13845
		$str1="insert into `".$conf["selectedDataBaseName"]."`.`".$conf["tableName"]."`(";
13846
 
13847
		#取得一筆資料有幾個項目
13848
		$count=count($conf["columnName"]);
13849
 
13850
		#跑 $count-1 次,插入第一筆到最倒數第二筆
13851
		for($i=0;$i<=($count-2);$i++){
13852
 
13853
			#放入欲插入的項目名稱			
13854
			$str1=$str1."`".$conf["columnName"][$i]."`".",";
13855
 
13856
			}#for end
13857
 
13858
		#插入最後一筆項目名稱
13859
		$lastItem = ($count-1);
13860
		$str1=$str1."`".$conf["columnName"][$lastItem]."`)";  
13861
 
13862
		#要插入的數值語法開始
13863
		$str2=" values (";
13864
 
13865
		#跑 $count-1 次
13866
		for($i=0;$i<=($count-2);$i++){
13867
 
13868
			#插入第一筆到最倒數第二筆的資料內容	
13869
			$str2=$str2."'".mysqli_real_escape_string($mysqli,$conf["insertValue"][$i])."',";
13870
 
13871
			}#for end
13872
 
13873
		#插入最後一筆的資料內容
13874
		$lastItem = ($count-1);
13875
		$str2=$str2."'".mysqli_real_escape_string($mysqli,$conf["insertValue"][$lastItem])."');";  
13876
 
13877
		#合併要執行的sql語法
13878
		$sqlString=$str1.$str2;
13879
 
13880
		#執行sql語法
13881
		#函式說明:
13882
		#執行mysql指令
13883
		#回傳結果::
13884
		#$result["status"],"true"為執行成功;"false"為執行失敗。
13885
		#$result["error"],錯誤訊息的陣列
13886
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
13887
		#$result["queryConn"],用於資料庫操作的變數.
13888
		#$result["queryString"],mysql查詢的語言
13889
		#查詢號的解果,需要解析。
13890
		#必填參數:
13891
		$conf["db::execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
13892
		$conf["db::execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
13893
		$conf["db::execMysqlQuery"]["dbSql"]=$sqlString;#要執行sql語法
13894
		#可省略參數: 
13895
 
13896
		#如果 $conf["dbPassword"] 有設置
13897
		if(isset($conf["dbPassword"])){
13898
 
13899
			$conf["db::execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
13900
 
13901
			}#if end
13902
 
13903
		#如果 $conf["dbPort"] 有設置
13904
		if(isset($conf["dbPort"])){
13905
 
13906
			$conf["db::execMysqlQuery"]["dbPort"]=$conf["dbPort"];#爲連線到mysql-Server時要使用的port,可省略,若省略則代表預設的3306 port.
13907
 
13908
			}#if end
13909
 
13910
		#$conf["dbLink"],物件,mysqli物件,由mysqli_connect()回傳的物件內容,若為數值則改用賬號密碼等資訊進行連線,反之則沿用連線物件.
13911
		$conf["db::execMysqlQuery"]["dbLink"]=$mysqli;
13912
		#$conf["autoClose],字串,"true"代表要自動斷線,預設為"true"會自動斷線
13913
		$conf["db::execMysqlQuery"]["autoClose"]="false";
13914
		$mysqlQueryResult=db::execMysqlQuery($conf["db::execMysqlQuery"]);
13915
		unset($conf["db::execMysqlQuery"]);
13916
 
13917
		#若執行 query 語法失敗
13918
		if($mysqlQueryResult["status"]=="false"){
13919
 
13920
			#設置執行錯誤識別
13921
			$result["status"]="false";
13922
 
13923
			#設置錯誤訊息
13924
			$result["error"]=$mysqlQueryResult;				
13925
 
13926
			#回傳結果
13927
			return $result;
13928
 
13929
			}#else end
13930
 
13931
		#取得新增的該筆記錄id
13932
		$result["lastInsertId"]=mysqli_insert_id($mysqlQueryResult["queryConn"]);
13933
 
13934
		#取得執行的sql字串
13935
		$result["sql"]=$mysqlQueryResult["queryString"];
13936
 
13937
		#執行到這邊代表執行成功
13938
		$result["status"]="true";
13939
 
13940
		#回傳結果
13941
		return $result;
13942
 
13943
		}#function insertData end
13944
 
13945
	/*
13946
	#函式說明:	
13947
	#更新資料表裏面的資料
13948
	#回傳結果:	
13949
	#$result["status"],爲查詢是否成功,若爲0則成功,若爲1則表示失敗了
13950
	#$result["error"],錯誤訊息
13951
	#$result["function"],當前執行的函數名稱
13952
	#$result["sql"],執行的sql語法.
13953
	#$result["argu"],使用的參數.
13954
	#必填參數:
13955
	#$conf["fileArgu"],字串,變數__FILE__的內容.
13956
	$conf["fileArgu"]=__FILE__;
13957
	#$conf["dbAddress"],字串,爲mysql-Server的位置
13958
	$conf["dbAddress"]=$dbAddress;
13959
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號
13960
	$conf["dbAccount"]=$dbAccount;
13961
	#$conf["selectedDataBaseName"],字串,要選取的資料庫名稱
13962
	$conf["selectedDataBaseName"]=$dbName;
13963
	#$conf["tableName"],字串,要修改的資料表名稱
13964
	$conf["tableName"]="";
13965
	#$conf["whereColumn"],字串陣列,爲用來判斷要更新的哪筆資料的欄位名稱,須爲陣列值
13966
	$conf["whereColumn"]=array("");
13967
	#$conf["whereValue"],字串陣列,為用來判斷是要更新哪筆資料的欄位對應數值,須爲陣列值
13968
	$conf["whereValue"]=array("");
13969
	#$conf["tableColumnName"],字串陣列,資料表項目的名稱陣列
13970
	$conf["tableColumnName"]=array("");
13971
	#$conf["updateDataValue"],字串陣列,要更改成對應資料表項目的內容,須為陣列值
13972
	$conf["updateDataValue"]=array("");
13973
	#可省略參數:
13974
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼.
13975
	#$conf["dbPassword"]=$dbPassword;
13976
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,可省略,若省略則代表使用預設的port 3306.
13977
	#$conf["dbPort"]=$dbPort;
13978
	#參考資料:
13979
	#無.
13980
	#備註:
13981
	#無.
13982
	*/
13983
	public static function updateDataTableContent($conf){
13984
 
13985
		#初始化要回傳的內容
13986
		$result=array();
13987
 
13988
		#取得當前執行的函數名稱
13989
		$result["function"]=__FUNCTION__;
13990
 
13991
		#如果 $conf 不為陣列
13992
		if(gettype($conf)!=="array"){
13993
 
13994
			#設置執行失敗
13995
			$result["status"]="false";
13996
 
13997
			#設置執行錯誤訊息
13998
			$result["error"][]="\$conf變數須為陣列形態";
13999
 
14000
			#如果傳入的參數為 null
14001
			if($conf==null){
14002
 
14003
				#設置執行錯誤訊息
14004
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
14005
 
14006
				}#if end
14007
 
14008
			#回傳結果
14009
			return $result;
14010
 
14011
			}#if end
14012
 
14013
		#儲存使用的參數
14014
		$result["argu"]=$conf;
14015
 
14016
		#函式說明:
14017
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
14018
		#回傳結果:
14019
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14020
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
14021
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
14022
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
14023
		#必填參數:
14024
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
14025
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("fileArgu","dbAddress","dbAccount","selectedDataBaseName","tableName","whereColumn","whereValue","tableColumnName","updateDataValue");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
14026
		#可省略參數:
14027
		$conf["variableCheck"]["isexistMuti"]["variableType"]=array("string","string","string","string","string","array","array","array","array");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
14028
		#$conf["variableCheck"]["isexistMuti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
14029
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
14030
		unset($conf["variableCheck"]["isexistMuti"]);
14031
 
14032
		#如果檢查參數作業出錯
14033
		if($checkResult["status"]==="false"){
14034
 
14035
			#設置執行錯誤識別
14036
			$result["status"]="false";
14037
 
14038
			#設置錯誤訊息
14039
			$result["error"]=$checkResult;
14040
 
14041
			#回傳結果
14042
			return $result;
14043
 
14044
			}#if end
14045
 
14046
		#如果檢查沒通過
14047
		if($checkResult["passed"]==="false"){
14048
 
14049
			#設置執行錯誤識別
14050
			$result["status"]="false";
14051
 
14052
			#設置錯誤訊息
14053
			$result["error"]=$checkResult;
14054
 
14055
			#回傳結果
14056
			return $result;
14057
 
14058
			}#if end
14059
 
14060
		#將陣列變數 $conf["whereColumn"] 與 $conf["whereValue"] 對應的變數中不存在的 $conf["whereValue"][$i] 元素去掉,並同時調整 $conf["whereColumn"] 使兩者變數的元素數量均相同。
14061
		#函式說明:
14062
		#比對兩個陣列變數,如果其中一個陣列變數的元素不存在,則將之消去,然後進行替補。另一個陣列變數則也要做同步的動作。
14063
		#回傳結果::
14064
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常。
14065
		#$result["error"],錯誤訊息。
14066
		#$result["content"],組合成新值的一維陣列。
14067
		#$result["function"],當前執行的函數名稱。
14068
		#必填參數:
14069
		$conf_compareAndModify2Arrays["arraysA"]=$conf["tableColumnName"];#用來跟陣列變數B比較的陣列變數A
14070
		$conf_compareAndModify2Arrays["arraysB"]=$conf["updateDataValue"];#用來跟陣列變數A比較的陣列變數B
14071
		$compareAndModifyTwoArrays=arrays::compareAndModifyTwoArrays($conf_compareAndModify2Arrays);
14072
		unset($conf_compareAndModify2Arrays);
14073
 
14074
		#如果 arrays::compareAndModifyTwoArrays 執行失敗
14075
		if($compareAndModifyTwoArrays["status"]==="false"){
14076
 
14077
			#設置執行錯誤識別
14078
			$result["status"]="false";
14079
 
14080
			#設置錯誤訊息
14081
			$result["error"]=$compareAndModifyTwoArrays;
14082
 
14083
			#回傳結果
14084
			return $result;
14085
 
14086
			}#if end
14087
 
14088
		#將整理好的 $result["compareAndModify2Arrays"]["A"] 放到 $conf["whereColumn"] ; $result["compareAndModify2Arrays"]["B"] 放到 $conf["whereValue"]
14089
		$conf["tableColumnName"]=$compareAndModifyTwoArrays["newArraysA"];
14090
		$conf["updateDataValue"]=$compareAndModifyTwoArrays["newArraysB"];
14091
 
14092
		#更新 $conf["selectedDatabaseName"].$tableName 資料表
14093
		$selectUpdateTableSql="UPDATE `".$conf["selectedDataBaseName"]."`.`".$conf["tableName"]."` "; 
14094
 
14095
		#更新資料表資料語法的一部分
14096
		$chooseColumnSql="SET ";
14097
 
14098
		#取得一筆資料有幾個項目
14099
		$counts=count($conf["tableColumnName"]);
14100
 
14101
		#儲存宣告shell變數的指令陣列
14102
		$shellVarDefined=array();
14103
 
14104
		#儲存要宣告的變數
14105
		$varDefined=array();
14106
 
14107
		#有$count欄項目,
14108
		for($i=0;$i<$counts;$i++){
14109
 
14110
			#如果是最後一項要更新的資料
14111
			if($i==($counts-1)){
14112
 
14113
				#如果內容不為字串
14114
				if(gettype($conf["updateDataValue"][$i])!=="string"){
14115
 
14116
					#設置執行錯誤識別
14117
					$result["status"]="false";
14118
 
14119
					#設置錯誤訊息
14120
					$result["error"][]="欲使用的變數不為字串";
14121
 
14122
					#設置錯誤訊息
14123
					$result["error"][]=$conf["updateDataValue"][$i];
14124
 
14125
					#回傳結果
14126
					return $result;
14127
 
14128
					}#if end
14129
 
14130
				#定義 shell script 變數
14131
				$shellVarDefined[]=array("cmd"=>"x".$i."=","param"=>array($conf["updateDataValue"][$i]));
14132
 
14133
				#定義變數
14134
				#$varDefined[]="select @x".$i." := '\${x".$i."}';";
14135
				$varDefined[]="select @x".$i." := \${x".$i."};";
14136
 
14137
				#將要更新的內容字串串接,結尾無逗號                             
14138
				$chooseColumnSql = $chooseColumnSql."`".$conf["tableColumnName"][$i]."`= @x".$i." ";
14139
 
14140
				}#判斷式結束
14141
 
14142
			#如果不是最後一項要更新的資料
14143
			if($i!=($counts-1)){
14144
 
14145
				#定義 shell script 變數
14146
				$shellVarDefined[]=array("cmd"=>"x".$i."=","param"=>array($conf["updateDataValue"][$i]));
14147
 
14148
				#sql定義變數
14149
				#$varDefined[]="select @x".$i." := '\${x".$i."}';";
14150
				$varDefined[]="select @x".$i." := \${x".$i."};";
14151
 
14152
				#將要更新的內容字串串接,結尾有逗號
14153
				$chooseColumnSql = $chooseColumnSql."`".$conf["tableColumnName"][$i]."`= @x".$i." ,";
14154
 
14155
				}#判斷式結束
14156
 
14157
			}#回圈結束
14158
 
14159
		#取得條件有幾項
14160
		$conditionArrayCounts=count($conf["whereColumn"]);				
14161
 
14162
		#構成條件式
14163
		for($i=0;$i<$conditionArrayCounts;$i++){
14164
 
14165
			#如果是第一筆
14166
			if($i==0){
14167
 
14168
				#尋找的條件式
14169
				$condition="WHERE `".$conf["whereColumn"][$i]."` = '".$conf["whereValue"][$i]."'";
14170
 
14171
				#測試有無抓到第一個條件
14172
				#var_dump($condition);
14173
 
14174
				}#判斷式結束
14175
 
14176
			#如果不是第一筆
14177
			if($i!=0){
14178
 
14179
				#其它條件
14180
				$condition=$condition." AND `".$conf["whereColumn"][$i]."` = '".$conf["whereValue"][$i]."'";
14181
 
14182
				#測試有無抓到其它條件
14183
				#var_dump($condition);
14184
 
14185
				}#判斷式結束
14186
 
14187
			}#迴圈結束
14188
 
14189
		#初始化定義變數的sql
14190
		$varDefineStr="";
14191
 
14192
		#針對每個要使用的數值
14193
		foreach($varDefined as $index=>$var){
14194
 
14195
			#累加定義變數的sql
14196
			$varDefineStr=$varDefineStr.$var;
14197
 
14198
			}#foreach end
14199
 
14200
		#合併所有的語法成一句完整的語法 
14201
		$sqlString = $varDefineStr.$selectUpdateTableSql.$chooseColumnSql.$condition;
14202
 
14203
		#設置取得執行的sql語法
14204
		$result["sql"]=$sqlString;
14205
 
14206
		#函式說明:
14207
		#用shell執行mysql指令.
14208
		#回傳結果::
14209
		#$result["status"],"true"為執行成功;"false"為執行失敗。
14210
		#$result["error"],錯誤訊息的陣列
14211
		#$result["function"],當前執行的涵式
14212
		#$result["queryString"],mysql查詢的語言.
14213
		#必填參數:
14214
		#$conf["fileArgu"],字串,變數__FILE__的內容.
14215
		$conf["db::shell"]["fileArgu"]=$conf["fileArgu"];
14216
		#$conf["dbSql"],字串,要執行sql語法
14217
		$conf["db::shell"]["dbSql"]=$sqlString;
14218
		#$conf["dbAddress"],字串,爲mysql-Server的位置。
14219
		$conf["db::shell"]["dbAddress"]=$conf["dbAddress"];
14220
		#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號。
14221
		$conf["db::shell"]["dbAccount"]=$conf["dbAccount"]; 
14222
		#可省略參數:
14223
		$conf["db::shell"]["pre"]=$shellVarDefined;
14224
 
14225
		#如果有設定密碼
14226
		if(isset($conf["dbPassword"])){
14227
 
14228
			#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼。
14229
			$conf["db::shell"]["dbPassword"]=$conf["dbPassword"];
14230
 
14231
			}#if end
14232
 
14233
		#$conf["dbName"],字串,爲要連的資料庫名稱
14234
		$conf["db::shell"]["dbName"]=$conf["selectedDataBaseName"];
14235
 
14236
		#如果有設定port
14237
		if(isset($conf["dbPort"])){
14238
 
14239
			#$conf["dbPort"],字串,為連線到mysql-Server時對應的port,可省略,預設為3306.
14240
			$conf["db::shell"]["dbPort"]=$conf["dbPort"];
14241
 
14242
			}#if end
14243
 
14244
		$shell=db::shell($conf["db::shell"]);
14245
		unset($conf["db::shell"]);
14246
 
14247
		/* debug
14248
		$fsock=fopen("/var/www/html/log/log.txt","a");
14249
		fwrite($fsock,"func:".__CLASS__." line:".__LINE__.":".print_r($shell,true).PHP_EOL.PHP_EOL);
14250
		fclose($fsock);
14251
		*/
14252
 
14253
		#如果執行sql失敗
14254
		if($shell["status"]==="false"){
14255
 
14256
			#設置執行不正常
14257
			$result["status"]="false";	
14258
 
14259
			#設置錯誤訊息
14260
			$result["error"]=$shell;
14261
 
14262
			#回傳結果
14263
			return $result;
14264
 
14265
			}#if end
14266
 
14267
		#設置執行正常
14268
		$result["status"]="true";
14269
 
14270
		#回傳結果
14271
		return $result;
14272
 
14273
		}#function updateDataTableContent end
14274
 
14275
	/*
14276
	#函式說明:
14277
	#將滿足條件的資料從資料表中刪除
14278
	#回傳結果:	
14279
	#$result["status"],爲查詢是否成功,若爲0則成功,若爲1則表示失敗了
14280
	#$result["function"],當前執行的函數名稱.
14281
	#$result["error"],錯誤訊息
14282
	#$result["sql"],執行的語法
14283
	#必填參數:
14284
	#$conf["dbAddress"],字串,爲mysql-Server的位置
14285
	$conf["dbAddress"]=$dbAddress;
14286
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號
14287
	$conf["dbAccount"]=$dbAccount;
14288
	#$conf["selectedDataBaseName"],字串,要選取的資料庫名稱
14289
	$conf["selectedDataBaseName"]=$dbName;
14290
	#$conf["selectedDataTableName"],字串,要選取的資料表的名稱
14291
	$conf["selectedDataTableName"]="";
14292
	#$conf["whereColumn"],字串陣列,爲用來判斷要刪除的哪筆資料的欄位名稱,須爲陣列值
14293
	$conf["whereColumn"]=array("");
14294
	#$conf["whereValue"]=,字串陣列,為用來判斷是要刪除哪筆資料的欄位對應數值,須爲陣列值
14295
	$conf["whereValue"]=array("");	
14296
	#可省略參數:
14297
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
14298
	#$conf["dbPassword"]=$dbPassword;
14299
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,可省略,若省略則代表使用預設的port 3306.
14300
	#$conf["dbPort"]=$dbPort;
14301
	#$conf["WhereColumnOperator"],字串陣列,用於判斷語句的比較符號陣列,可以用的符號有「"="、">"、"<"、"LIKE"、"NOT LIKE"」,預設都爲「=」。
14302
	#$conf["WhereColumnOperator"]=array("");
14303
	#$conf["WhereColumnAndOr"]=array("");#用於判斷語句條件之間成立的條件是AND還是OR,須爲陣列值,預設皆爲AND。其數量應爲要判斷的欄位數量減一。
14304
	#$conf["WhereColumnAndOr"]=array("");
14305
	#參考資料:
14306
	#無.
14307
	#備註:
14308
	#無.
14309
	*/	
14310
	public static function deleteDataFromTable(&$conf){
14311
 
14312
		#初始化要回傳的內容
14313
		$result=array();
14314
 
14315
		#取得當前執行的函數名稱
14316
		$result["function"]=__FUNCTION__;
14317
 
14318
		#如果 $conf 不為陣列
14319
		if(gettype($conf)!="array"){
14320
 
14321
			#設置執行失敗
14322
			$result["status"]="false";
14323
 
14324
			#設置執行錯誤訊息
14325
			$result["error"][]="\$conf變數須為陣列形態";
14326
 
14327
			#如果傳入的參數為 null
14328
			if($conf==null){
14329
 
14330
				#設置執行錯誤訊息
14331
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
14332
 
14333
				}#if end
14334
 
14335
			#回傳結果
14336
			return $result;
14337
 
14338
			}#if end
14339
 
14340
		#檢查參數
14341
		#函式說明:
14342
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
14343
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14344
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
14345
		#$result["function"],當前執行的函式名稱.
14346
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
14347
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
14348
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
14349
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
14350
		#必填參數:
14351
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
14352
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
14353
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
14354
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("dbAddress","dbAccount","selectedDataBaseName","selectedDataTableName","whereColumn","whereValue");
14355
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
14356
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string","string","array","array");
14357
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
14358
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
14359
		#可省略參數:
14360
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
14361
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
14362
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
14363
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("dbPassword","dbPort","WhereColumnOperator","WhereColumnAndOr");
14364
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
14365
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","array","array");
14366
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
14367
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null,null,null);
14368
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
14369
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("WhereColumnOperator","WhereColumnAndOr");
14370
		#var_dump($conf["variableCheck::checkArguments"]);
14371
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
14372
		unset($conf["variableCheck::checkArguments"]);
14373
 
14374
		#如果檢查作業出出錯
14375
		if($checkResult["status"]=="false"){
14376
 
14377
			#設置錯誤識別
14378
			$result["status"]="false";
14379
 
14380
			#設置錯誤訊息
14381
			$result["error"]=$checkResult;
14382
 
14383
			#回傳結果
14384
			return $result;
14385
 
14386
			}#if end
14387
 
14388
		#如果檢查作業出出錯
14389
		if($checkResult["passed"]=="false"){
14390
 
14391
			#設置錯誤識別
14392
			$result["status"]="false";
14393
 
14394
			#設置錯誤訊息
14395
			$result["error"]=$checkResult;
14396
 
14397
			#回傳結果
14398
			return $result;
14399
 
14400
			}#if end
14401
 
14402
		#刪除資料的語法開始,指定了表格的名稱
14403
		$sql="DELETE FROM `".$conf["selectedDataBaseName"]."`.`".$conf["selectedDataTableName"]."` ";
14404
 
14405
		#取得有幾個條件
14406
		$counts=count($conf["whereColumn"]);
14407
 
14408
		#連線到資料庫
14409
		#函式說明:
14410
		#連線到資料庫,結果會回傳一個陣列
14411
		#$result["status"],若連線成功則爲"true",連線失敗則爲"false".
14412
		#$result["connectInformation"],爲回傳的mysql連線資訊.
14413
		#$result["error"],錯誤訊息	.
14414
		#$result["function"],當前執行的函數名稱.	
14415
		#必填參數:
14416
		$conf["db"]["dbConnect"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
14417
		$conf["db"]["dbConnect"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
14418
		#$conf["dbName"],字串,爲要連的資料庫名稱
14419
		$conf["db"]["dbConnect"]["dbName"]=$conf["selectedDataBaseName"];
14420
		#可省略參數:
14421
 
14422
		#如果 $conf["dbPassword"] 有設定
14423
		if(isset($conf["dbPassword"])){
14424
 
14425
			$conf["db"]["dbConnect"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
14426
 
14427
			}#if end
14428
 
14429
		#如果 $conf["dbPort"] 有設定
14430
		if(isset($conf["dbPort"])){
14431
 
14432
			$conf["db"]["dbConnect"]["dbPort"]=$conf["dbPort"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
14433
 
14434
			}#if end
14435
 
14436
		$con=db::dbConnect($conf["db"]["dbConnect"]);
14437
		unset($conf["db"]);
14438
 
14439
		#如果連線到資料庫失敗
14440
		if($con["status"]==="false"){
14441
 
14442
			#設置執行失敗
14443
			$result["status"]="false";
14444
 
14445
			#設置執行錯誤訊息
14446
			$result["error"]=$con;
14447
 
14448
			#回傳結果
14449
			return $result;
14450
 
14451
			}#if end
14452
 
14453
		#var_dump($con);	
14454
 
14455
		#取得mysqli物件
14456
		$mysqli=$con["connectInformation"];
14457
 
14458
		#條件語句
14459
		for($i=0;$i<$counts;$i++){
14460
 
14461
			#如果 $conf["WhereColumnOperator"] 不存在
14462
			if(!isset($conf["WhereColumnOperator"])){
14463
 
14464
				#如果 $conf["WhereColumnOperator"][$i] 不存在
14465
				if(!isset($conf["WhereColumnOperator"][$i])){
14466
 
14467
					#設置為 "="
14468
					$conf["WhereColumnOperator"][$i]="=";
14469
 
14470
					}#if end
14471
 
14472
				}#if end
14473
 
14474
			#反之若 $conf["WhereColumnOperator"][$i] 不存在
14475
			else if(!isset($conf["WhereColumnOperator"][$i])){
14476
 
14477
				#設置為 "="
14478
				$conf["WhereColumnOperator"][$i]="=";
14479
 
14480
				}#if end
14481
 
14482
			#以下變數應該要為字串
14483
			$checkedVar["whereColumn"]=$conf["whereColumn"][$i];
14484
			$checkedVar["WhereColumnOperator"]=$conf["WhereColumnOperator"][$i];
14485
			$checkedVar["whereValue"]=$conf["whereValue"][$i];
14486
 
14487
			#函式說明:
14488
			#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
14489
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14490
			#$reuslt["error"],執行不正常結束的錯訊息陣列.
14491
			#$result["function"],當前執行的函式名稱.
14492
			#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
14493
			#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
14494
			#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
14495
			#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
14496
			#必填參數:
14497
			#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
14498
			$conf["variableCheck::checkArguments"]["varInput"]=&$checkedVar;
14499
			#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
14500
			$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("whereColumn","WhereColumnOperator","whereValue");
14501
			#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
14502
			$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string");
14503
			#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
14504
			$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
14505
			#可省略參數:
14506
			#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
14507
			#$conf["canBeEmptyString"]="false";
14508
			#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
14509
			#$conf["skipableVariableName"]=array();
14510
			#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
14511
			#$conf["skipableVariableType"]=array();
14512
			#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
14513
			#$conf["skipableVarDefaultValue"]=array("");
14514
			#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
14515
			#$conf["arrayCountEqualCheck"][]=array();
14516
			$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
14517
			unset($conf["variableCheck::checkArguments"]);
14518
 
14519
			#如果檢查失敗
14520
			if($checkResult["status"]=="false"){
14521
 
14522
				#設置執行錯誤
14523
				$result["status"]="false";
14524
 
14525
				#設置執行錯誤訊息
14526
				$result["error"]=$checkResult;
14527
 
14528
				#回傳結果
14529
				return $result;
14530
 
14531
				}#if end
14532
 
14533
			#如果檢查失敗
14534
			if($checkResult["passed"]=="false"){
14535
 
14536
				#設置執行錯誤
14537
				$result["status"]="false";
14538
 
14539
				#設置執行錯誤訊息
14540
				$result["error"]=$checkResult;
14541
 
14542
				#回傳結果
14543
				return $result;
14544
 
14545
				}#if end
14546
 
14547
			#如果是第一筆
14548
			if($i==0){
14549
 
14550
				#如果 $conf["WhereColumnOperator"] 存在
14551
				if(isset($conf["WhereColumnOperator"])){
14552
 
14553
					#設定第一個條件
14554
					$sql = $sql." WHERE `".$conf["whereColumn"][$i]. "` ".$conf["WhereColumnOperator"][$i]." '". mysqli_real_escape_string($mysqli,$conf["whereValue"][$i])."'";
14555
 
14556
					}#if end
14557
 
14558
				#反之 $conf["WhereColumnOperator"] 不存在
14559
				else{
14560
 
14561
					#設定第一個條件
14562
					$sql = $sql." WHERE `".$conf["whereColumn"][$i]. "` = '". mysqli_real_escape_string($mysqli,$conf["whereValue"][$i])."'"; 
14563
 
14564
					}#else end
14565
 
14566
				}#判斷式
14567
 
14568
			#如果不是第一個條件
14569
			if($i!=0){
14570
 
14571
				#如果 $conf["WhereColumnAndOr"] 不存在 
14572
				if(!isset($conf["WhereColumnAndOr"])){
14573
 
14574
					#將 $conf["WhereColumnAndOr"] 裏面的元素置換爲 AND
14575
					#函式說明:
14576
					#建立一個陣列,可以指派陣列的內容,然後回傳
14577
					#回傳結果::
14578
					#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14579
					#$result["function"],當前執行的函數名稱.
14580
					#$result["error"],錯誤訊息陣列.
14581
					#$result["content"],爲陣列變數內容
14582
					#必填參數:
14583
					$conf_arrays_create["arrayContent"]=array("AND");#陣列元素的內容,須爲陣列值。
14584
					#可省略參數:
14585
					$conf_arrays_create["arrayCounts"]=$counts-1;#爲陣列的元素有幾個,若沒設定,則數量爲$conf["arrayContent"]裏的元素數量
14586
					$conf_arrays_create["theSameAs"]="true";#若設爲"true",則所有元素內容都跟第一個元素內容相同
14587
					$create=arrays::create($conf_arrays_create);
14588
					unset($conf_arrays_create);
14589
 
14590
					#如果建立陣列失敗
14591
					if($create["status"]=="false"){
14592
 
14593
						#設置執行錯誤
14594
						$result["status"]="false";
14595
 
14596
						#設置執行錯誤訊息
14597
						$result["error"]=$create;
14598
 
14599
						#回傳結果
14600
						return $result;
14601
 
14602
						}#if end
14603
 
14604
					#取得 $conf["WhereColumnAndOr"] 參數內容
14605
					$conf["WhereColumnAndOr"]=$create["content"];
14606
 
14607
					}#if end
14608
 
14609
				#如果 $conf["WhereColumnOperator"] 存在
14610
				if(isset($conf["WhereColumnOperator"])){
14611
 
14612
					#設定其它條件
14613
					$sql=$sql." ".$conf["WhereColumnAndOr"][$i-1]." `".$conf["whereColumn"][$i]. "` ".$conf["WhereColumnOperator"][$i]." '".mysqli_real_escape_string($mysqli,$conf["whereValue"][$i])."'";			
14614
 
14615
					}#if end			
14616
 
14617
				#反之 $conf["WhereColumnOperator"] 不存在
14618
				else{
14619
 
14620
					#設定其它條件
14621
					$sql=$sql." ".$conf["WhereColumnAndOr"][$i-1]." `".$conf["whereColumn"][$i]. "` = '".mysqli_real_escape_string($mysqli,$conf["whereValue"][$i])."'";			
14622
 
14623
					}#else end
14624
 
14625
				}#判斷式
14626
 
14627
			}#迴圈結束
14628
 
14629
		#sql語法結束
14630
		$sqlString=$sql.";";			
14631
 
14632
		#執行sql語法
14633
		#函式說明:
14634
		#執行mysql指令
14635
		#回傳結果::
14636
		#$result["status"],"true"為執行成功;"false"為執行失敗。
14637
		#$result["error"],錯誤訊息的陣列
14638
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
14639
		#$result["queryString"],mysql查詢的語言
14640
		#查詢號的解果,需要解析。
14641
		#必填參數:
14642
		$conf["db"]["execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
14643
		$conf["db"]["execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
14644
		$conf["db"]["execMysqlQuery"]["dbSql"]=$sqlString;#要執行sql語法
14645
		#可省略參數: 
14646
 
14647
		#如果 $conf["dbPassword"] 有設置
14648
		if(isset($conf["dbPassword"])){
14649
 
14650
			$conf["db"]["execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
14651
 
14652
			}#if end
14653
 
14654
		#如果 $conf["dbPort"] 有設置
14655
		if(isset($conf["dbPort"])){
14656
 
14657
			$conf["db"]["execMysqlQuery"]["dbPort"]=$conf["dbPort"];#爲連線到mysql-Server時要使用的port,可省略,若省略則代表預設的 3306 port.
14658
 
14659
			}#if end
14660
 
14661
		#$conf["dbLink"],物件,mysqli物件,由mysqli_connect()回傳的物件內容,若為數值則改用賬號密碼等資訊進行連線,反之則沿用連線物件.
14662
		$conf["db"]["execMysqlQuery"]["dbLink"]=$mysqli;
14663
 
14664
		$db["execMysqlQuery"]=db::execMysqlQuery($conf["db"]["execMysqlQuery"]);
14665
		unset($conf["db"]["execMysqlQuery"]);
14666
 
14667
		#如果sql執行有誤
14668
		if($db["execMysqlQuery"]["status"]=="false"){
14669
 
14670
			#設置錯誤識別
14671
			$result["status"]="false";
14672
 
14673
			#設置錯誤訊息
14674
			$result["error"]=$db["execMysqlQuery"];
14675
 
14676
			#回傳結果
14677
			return $result;
14678
 
14679
			}#if end
14680
 
14681
		#取得執行的sql語法
14682
		$result["sql"]=$db["execMysqlQuery"]["queryString"];
14683
 
14684
		#執行到這邊表執行成功
14685
		$result["status"]="true";
14686
 
14687
		#回傳結果
14688
		return $result;
14689
 
14690
		}#函式結束
14691
 
14692
	/*
14693
	#函式說明:
14694
	#取得目標資料庫底下所有資料表的索引鍵,可作為foreign key的可用欄位,欄位必須為index key或primary key.
14695
	#回傳結果::
14696
	#$result["status"],執行是否成功"true"為執行成功,"false"為執行失敗。
14697
	#$result["error"],執行的錯誤訊息.
14698
	#$result["function"],當前執行函式名稱.
14699
	#$result["content"][$i]["tableName"],欄位所屬的資料表名稱.
14700
	#$result["content"][$i]["columnKey"],是"primary key"還是"index key".
14701
	#$result["content"][$i]["columnName"],欄位名稱.
14702
	#$result["content"][$i]["typeAndLength"],欄位儲存形態與長度限制.
14703
	#$result["content"][$i]["tableDotColumnName"],欄位的「鍵所屬資料表名稱.鍵欄位名稱」.
14704
	#$result["content"][$i]["tableDotColumnVarType"],「資料索引鍵所屬資料表名稱.索引鍵欄位名稱 儲存變數型別與長度」.
14705
	#$result["indexKey"]["tableName"],index key欄位所屬的資料表陣列
14706
	#$result["indexKey"]["columnName"],index key的欄位名稱陣列
14707
	#$result["indexKey"]["typeAndLength"],index key的欄位儲存型態與長度限制陣列
14708
	#$result["indexKey"]["tableDotColumnName"],index key的 「資料索引鍵所屬資料表名稱.索引鍵欄位名稱」 陣列
14709
	#$result["indexKey"]["tableDotColumnVarType"],index key的 「資料索引鍵所屬資料表名稱.索引鍵欄位名稱 儲存變數型別與長度」 陣列
14710
	#$result["primaryKey"][$tableCount]["dtName"],主鍵所屬的資料表名稱,若沒有主鍵則為null.
14711
	#$result["primaryKey"][$tableCount]["columnName"],資料表的主鍵欄位名稱,若沒有主鍵則為null.
14712
	#$result["primaryKey"][$tableCount]["columnVarType"],資料表的主鍵欄位的儲存形態,若沒有主鍵則為null..
14713
	#$result["primaryKey"][$tableCount]["columnVarLengthLimit"],資料表的主鍵欄位的儲存長度限制,若沒有主鍵則為null.
14714
	#$result["primaryKey"][$tableCount]["columnVarTypeAndLengthLimit"],儲存當前資料表的主鍵欄位的儲存形態與長度限制,若沒有主鍵則為null.
14715
	#必填參數:
14716
	#$conf["dbAddress"],字串,爲mysql-Server的位置
14717
	$conf["dbAddress"]=$dbAddress;
14718
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號
14719
	$conf["dbAccount"]=$dbAccount;
14720
	#$conf["selectedDataBaseName"],字串,爲目標資料表所屬的資料庫
14721
	$conf["selectedDataBaseName"]="";#
14722
	#可省略參數:
14723
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
14724
	#$conf["dbPassword"]=$dbPassword;#
14725
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,可省略,若省略則代表使用預設的port 3306.
14726
	#$conf["dbPort"]=$dbPort;
14727
	#參考資料:
14728
	#無.
14729
	#備註:
14730
	#目前只能取得一個資料庫的所有索引鍵.
14731
	*/
14732
	public static function getAllIndexKeyInAllDataBase(&$conf){
14733
 
14734
		#初始化要回傳的內容
14735
		$result=array();
14736
 
14737
		#取得當前執行的函數名稱
14738
		$result["function"]=__FUNCTION__;
14739
 
14740
		#如果 $conf 不為陣列
14741
		if(gettype($conf)!="array"){
14742
 
14743
			#設置執行失敗
14744
			$result["status"]="false";
14745
 
14746
			#設置執行錯誤訊息
14747
			$result["error"][]="\$conf變數須為陣列形態";
14748
 
14749
			#如果傳入的參數為 null
14750
			if($conf==null){
14751
 
14752
				#設置執行錯誤訊息
14753
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
14754
 
14755
				}#if end
14756
 
14757
			#回傳結果
14758
			return $result;
14759
 
14760
			}#if end
14761
 
14762
		#檢查參數
14763
		#函式說明:
14764
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
14765
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14766
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
14767
		#$result["function"],當前執行的函式名稱.
14768
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
14769
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
14770
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
14771
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
14772
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
14773
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
14774
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
14775
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
14776
		#必填參數:
14777
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
14778
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
14779
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
14780
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("dbAddress","dbAccount","selectedDataBaseName");
14781
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
14782
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string");
14783
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
14784
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
14785
		#可省略參數:
14786
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
14787
		#$conf["canBeEmptyString"]="false";
14788
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或集合.
14789
		$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("dbPassword","dbPort");
14790
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
14791
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("dbPassword","dbPort");
14792
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
14793
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
14794
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
14795
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null);
14796
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
14797
		#$conf["arrayCountEqualCheck"][]=array();
14798
		#參考資料:
14799
		#array_keys=>http://php.net/manual/en/function.array-keys.php
14800
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
14801
		unset($conf["variableCheck::checkArguments"]);
14802
 
14803
		#如果檢查有誤
14804
		if($checkResult["status"]=="false"){
14805
 
14806
			#設置執行錯誤的識別
14807
			$result["status"]="false";
14808
 
14809
			#設置錯誤訊息
14810
			$result["error"]=$checkResult;
14811
 
14812
			#回傳結果
14813
			return $result;
14814
 
14815
			}#if end
14816
 
14817
		#如果檢查不通過
14818
		if($checkResult["passed"]=="false"){
14819
 
14820
			#設置執行錯誤的識別
14821
			$result["status"]="false";
14822
 
14823
			#設置錯誤訊息
14824
			$result["error"]=$checkResult;
14825
 
14826
			#回傳結果
14827
			return $result;
14828
 
14829
			}#if end
14830
 
14831
		#取得資料表列表
14832
		#查詢特定資料庫裡的資料表列表,會回傳查詢的結果
14833
		#$result["connectStatus"],若成功則爲0,失敗則爲1。
14834
		#$result["connectInformation"],爲回傳的mysql連線資訊。
14835
		#$result["tableName"] 爲查詢的資料庫名稱陣列,
14836
			#第一筆資料庫名稱爲$result["tableName"][0],
14837
			#第二筆資料庫名稱爲$result["tableName"][1],
14838
			#其餘以此類推。
14839
		#$result["dataCounts"] 爲資料庫的總筆數
14840
		#必填參數:
14841
		$conf["db"]["getDataTableList"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
14842
		$conf["db"]["getDataTableList"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
14843
		$conf["db"]["getDataTableList"]["selectedDataBaseName"]=$conf["selectedDataBaseName"];#爲指定的資料庫名稱
14844
		#可省略參數:
14845
 
14846
		#如果有設定 $conf["dbPassword"]
14847
		if(isset($conf["dbPassword"])){
14848
 
14849
			#則套用設定
14850
			$conf["db"]["getDataTableList"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
14851
 
14852
			}#if end
14853
 
14854
		#如果有設定 $conf["dbPort"]
14855
		if(isset($conf["dbPort"])){
14856
 
14857
			#則套用設定
14858
			$conf["db"]["getDataTableList"]["dbPort"]=$conf["dbPort"];#爲連線到mysql-Server時要使用的port,預設為3306.
14859
 
14860
			}#if end
14861
 
14862
		#原始語法:
14863
		#show tables FROM databaseName,代表檢視databaseName裡面的資料表清單。
14864
		$tableList=db::getDataTableList($conf["db"]["getDataTableList"]);
14865
		unset($conf["db"]);
14866
 
14867
		#debug
14868
		#var_dump($tableList);
14869
 
14870
		#如果 資料表清單 取得失敗
14871
		if($tableList["status"]=="false"){
14872
 
14873
			#設置執行錯誤的識別
14874
			$result["status"]="fasle";
14875
 
14876
			#設置錯誤訊息
14877
			$result["error"]="取得資料表清單失敗";
14878
 
14879
			#回傳結果
14880
			return $result;
14881
 
14882
			}#if end
14883
 
14884
		#初始化資料表的計數變數
14885
		$tableCount=0;
14886
 
14887
		#初始化儲存 index key
14888
		$result["indexKey"]=array();
14889
 
14890
		#初始化儲存index key所屬的表格 
14891
		$result["indexKey"]["tableName"]=array();
14892
 
14893
		#根據每個資料表
14894
		foreach($tableList["tableName"] as $tableName){
14895
 
14896
			#取得該資料表的欄位資訊
14897
			#函式說明:
14898
			#取得資料表所有欄位的詳細資訊
14899
			#回傳的內容:
14900
			#$result["status"],執行結果,"true"代表執行成功;"false"代表執行失敗
14901
			#$result["error"],錯誤訊息陣列
14902
			#$result["sql"],執行的sql語法
14903
			#$result["oriInput"],原始的資料表欄位資訊
14904
			#$result["everyLine"],逐行的欄位資訊
14905
			#$result["tableName"],當前查詢的資料表名稱
14906
			#$result["engine"],資料表使用的儲存引擎
14907
			#$result["charset"],資料表預設的編碼
14908
			#$result["columnName"][$i],各欄位的名稱陣列,$i爲0開始的數字,也可以使用欄位的名稱。
14909
			#$result["columnVarTypeAndLengthLimit"][$i],各欄位儲存的變數形態與長度限制,$i爲0開始的數字,也可以使用欄位的名稱。
14910
			#$result["columnVarType"][$i],各欄位變數儲存的型態,$i爲1開始的數字,也可以使用欄位的名稱.
14911
			#$result["columnVarLengthLimit"][$i],個欄位變數的長度限制,若不存在其限制,則為"",$i爲1開始的數字,也可以使用欄位的名稱.
14912
			#$result["columnNotNull"][$i],各欄位是否可以不爲null,"true"爲可以不爲null;"false"爲可以爲"null",$i爲0開始的數字,也可以使用欄位的名稱。
14913
			#$result["columnAutoIncrement"][$i],各欄位是否會自動加1,"true"爲會;"false"爲不會,$i爲0開始的數字,也可以使用欄位的名稱。
14914
			#$result["columnDefault"][$i],各欄位的預設內容,若無則爲"沒有指定",$i爲0開始的數字,也可以使用欄位的名稱。
14915
			#$result["columnOnUpdateAction"][$i],當資料有修改時,該欄位的內容要怎麼因應,$i爲0開始的數字,也可以使用欄位的名稱。
14916
			#$result["columnCharacterSet"][$i],各欄位使用的CharacterSet,$i爲0開始的數字,也可以使用欄位的名稱。
14917
			#$result["columnCollate"][$i],各欄位使用的Collate,$i爲0開始的數字,也可以使用欄位的名稱。
14918
			#$result["key"]["exist"],該資料表是否有索引鍵,"true"代表有;"false"代表沒有。
14919
			#$result["key"][$j],該資料表的索引鍵陣列,$j爲0開始的數字,也可以使用欄位的名稱。
14920
			#$result["keyConstraintName"][$j],該資料表用於識別索引鍵的CONSTRAINT名稱陣列,$j爲0開始的數字,也可以使用欄位的名稱。
14921
			#$result["primaryKey"],該資料表的主鍵
14922
			#$result["foreignKey"]["exist"],該資料表是否有foreign key,"true"代表有;"fasle"代表沒有。
14923
			#$result["foreignKey"]["constraintName"][$k],用來識別外鍵的CONSTRAINT名稱陣列,$k爲0開始的數字,也可以使用欄位的名稱。
14924
			#$result["foreignKey"]["columnName"][$k],外鍵的名稱陣列,$k爲0開始的數字,也可以使用欄位的名稱。
14925
			#$result["foreignKey"]["referencesTable"][$k],外鍵參照的欄位,$k爲0開始的數字
14926
			#$result["foreignKey"]["referencesColumn"][$k],外鍵參照的欄位屬於哪個資料表,$k爲0開始的數字
14927
			#$result["foreignKey"]["OnUpdateAction"][$l],當參照的欄位資料更新時,會怎麼同步,$l爲0開始的數字
14928
			#$result["foreignKey"]["OnDeleteAction"][$m],當參照的欄位資料移除時,會怎麼同步,$m爲0開始的數字
14929
			#必填參數:
14930
			$conf["db"]["getTableColumnDetailInfo"]["dbAddress"]=$conf["dbAddress"];#資料庫的網路位置
14931
			$conf["db"]["getTableColumnDetailInfo"]["dbAccount"]=$conf["dbAccount"];#連線到資料庫要用的帳號
14932
			$conf["db"]["getTableColumnDetailInfo"]["selectedDataBase"]=$conf["selectedDataBaseName"];#連線到資料庫要選擇的資料庫
14933
			$conf["db"]["getTableColumnDetailInfo"]["selectedDataTable"]=$tableName;#連線到資料庫要檢視的資料表
14934
			#可省略參數:
14935
 
14936
			#如果有設定 $conf["dbPassword"]
14937
			if(isset($conf["dbPassword"])){
14938
 
14939
				#則套用設定
14940
				$conf["db"]["getTableColumnDetailInfo"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
14941
 
14942
				}#if end
14943
 
14944
			#如果有設定 $conf["dbPort"]
14945
			if(isset($conf["dbPort"])){
14946
 
14947
				#則套用設定
14948
				$conf["db"]["getTableColumnDetailInfo"]["dbPort"]=$conf["dbPort"];#爲連線到mysql-Server時要使用的port,預設為3306.
14949
 
14950
				}#if end
14951
 
14952
			$columnData=db::getTableColumnDetailInfo($conf["db"]["getTableColumnDetailInfo"]);
14953
			unset($conf["db"]["getTableColumnDetailInfo"]);
14954
 
14955
			#如果取得資料表結構詳細資訊失敗
14956
			if($columnData["status"]=="false"){
14957
 
14958
				#設置執行錯誤的識別
14959
				$result["status"]="fasle";
14960
 
14961
				#設置錯誤訊息
14962
				$result["error"]=$columnData;
14963
 
14964
				#回傳結果
14965
				return $result;
14966
 
14967
				}#if end
14968
 
14969
			#儲存當前資料表的主鍵所屬資料表名稱
14970
			$result["primaryKey"][$tableCount]["dtName"]=$tableName;
14971
 
14972
			#如果該資料表沒有主鍵
14973
			if(!isset($columnData["primaryKey"])){
14974
 
14975
				#將數值設為null
14976
 
14977
				#儲存當前資料表的主鍵欄位名稱
14978
				$result["primaryKey"][$tableCount]["columnName"]=null;
14979
 
14980
				#儲存當前資料表的主鍵欄位的儲存形態
14981
				$result["primaryKey"][$tableCount]["columnVarType"]=null;
14982
 
14983
				#儲存當前資料表的主鍵欄位的儲存長度限制
14984
				$result["primaryKey"][$tableCount]["columnVarLengthLimit"]=null;
14985
 
14986
				#儲存當前資料表的主鍵欄位的儲存形態與長度限制
14987
				$result["primaryKey"][$tableCount]["columnVarTypeAndLengthLimit"]=null;
14988
 
14989
				}#if end
14990
 
14991
			#反之有主鍵
14992
			else{
14993
 
14994
				#儲存當前資料表的主鍵欄位名稱
14995
				$result["primaryKey"][$tableCount]["columnName"]=$columnData["primaryKey"];
14996
 
14997
				#儲存當前資料表的主鍵欄位的儲存形態
14998
				$result["primaryKey"][$tableCount]["columnVarType"]=$columnData["columnVarType"][$columnData["primaryKey"]];
14999
 
15000
				#儲存當前資料表的主鍵欄位的儲存長度限制
15001
				$result["primaryKey"][$tableCount]["columnVarLengthLimit"]=$columnData["columnVarLengthLimit"][$columnData["primaryKey"]];
15002
 
15003
				#儲存當前資料表的主鍵欄位的儲存形態與長度限制
15004
				$result["primaryKey"][$tableCount]["columnVarTypeAndLengthLimit"]=$columnData["columnVarTypeAndLengthLimit"][$columnData["primaryKey"]];
15005
 
15006
				}#else end
15007
 
15008
			#資料表計數加1
15009
			$tableCount++;			
15010
 
15011
			#如果有index key
15012
			if($columnData["key"]["exist"]=="true"){
15013
 
15014
				#依據每個index key
15015
				for($i=0;$i<count($columnData["key"]);$i++){
15016
 
15017
					#如果該元素不存在
15018
					if(!isset($columnData["key"][$i])){
15019
 
15020
						#中斷迴圈
15021
						break;
15022
 
15023
						}#if end
15024
 
15025
					#取得其index key欄位
15026
					$tempColumnName=$result["indexKey"]["columnName"][]=$columnData["key"][$i];
15027
 
15028
					#如果 $columnData["columnVarTypeAndLengthLimit"][$i] 有設置
15029
					if(isset($columnData["columnVarTypeAndLengthLimit"][$tempColumnName])){
15030
 
15031
						#取得該欄位的儲存變數型別與長度限制
15032
						$result["indexKey"]["typeAndLength"][]=$columnData["columnVarTypeAndLengthLimit"][$tempColumnName];
15033
 
15034
						}#if end
15035
 
15036
					#反之
15037
					else{
15038
 
15039
						#將 得該欄位的儲存變數型別與長度限制 設為 ""
15040
						$result["indexKey"]["typeAndLength"][]="";
15041
 
15042
						}#else end	
15043
 
15044
					#取得其index key的所屬資料表
15045
					$result["indexKey"]["tableName"][]=$tableName;
15046
 
15047
					}#for end
15048
 
15049
				}#if end
15050
 
15051
			}#foreach end
15052
 
15053
		#根據每個索引鍵欄位與其所屬的資料表來建立 「索引鍵所屬資料表名稱.索引鍵欄位名稱 儲存變數型別與長度」 格式的陣列
15054
		for($i=0;$i<count($result["indexKey"]["tableName"]);$i++){
15055
 
15056
			#設置 索引鍵所屬資料表名稱.索引鍵欄位名稱 格式的陣列
15057
			$result["indexKey"]["tableDotColumnName"][]=$result["indexKey"]["tableName"][$i].".".$result["indexKey"]["columnName"][$i];
15058
 
15059
			#設置 索引鍵所屬資料表名稱.索引鍵欄位名稱 欄位儲存型態與長度限制 格式的陣列
15060
			$result["indexKey"]["tableDotColumnVarType"][]=$result["indexKey"]["tableName"][$i].".".$result["indexKey"]["columnName"][$i]." ".$result["indexKey"]["typeAndLength"][$i];
15061
 
15062
			}#for end
15063
 
15064
		#組裝主鍵與索引鍵的資訊
15065
		#$result["content"][$i]["tableName"],欄位所屬的資料表名稱.
15066
		#$result["content"][$i]["columnKey"],是"primary key"還是"index key".
15067
		#$result["content"][$i]["columnName"],欄位名稱.
15068
		#$result["content"][$i]["typeAndLength"],欄位儲存形態與長度限制.
15069
		#$result["content"][$i]["tableDotColumnName"],欄位的「鍵所屬資料表名稱.鍵欄位名稱」.
15070
		#$result["content"][$i]["tableDotColumnVarType"],「資料索引鍵所屬資料表名稱.索引鍵欄位名稱 儲存變數型別與長度」.
15071
		#$result["indexKey"]["tableName"],index key欄位所屬的資料表陣列
15072
		#$result["indexKey"]["columnName"],index key的欄位名稱陣列
15073
		#$result["indexKey"]["typeAndLength"],index key的欄位儲存型態與長度限制陣列
15074
		#$result["indexKey"]["tableDotColumnName"],index key的 「資料索引鍵所屬資料表名稱.索引鍵欄位名稱」 陣列
15075
		#$result["indexKey"]["tableDotColumnVarType"],index key的 「資料索引鍵所屬資料表名稱.索引鍵欄位名稱 儲存變數型別與長度」 陣列
15076
		#$result["primaryKey"][$tableCount]["dtName"],主鍵所屬的資料表名稱,若沒有主鍵則為null.
15077
		#$result["primaryKey"][$tableCount]["columnName"],資料表的主鍵欄位名稱,若沒有主鍵則為null.
15078
		#$result["primaryKey"][$tableCount]["columnVarType"],資料表的主鍵欄位的儲存形態,若沒有主鍵則為null..
15079
		#$result["primaryKey"][$tableCount]["columnVarLengthLimit"],資料表的主鍵欄位的儲存長度限制,若沒有主鍵則為null.
15080
		#$result["primaryKey"][$tableCount]["columnVarTypeAndLengthLimit"],儲存當前資料表的主鍵欄位的儲存形態與長度限制,若沒有主鍵則為null.
15081
 
15082
		#能夠被外鍵參照的欄位計數
15083
		$referenceColumnCount=0;
15084
 
15085
		#有幾個主鍵就執行幾次
15086
		for($i=0;$i<count($result["primaryKey"]);$i++){
15087
 
15088
			#暫存當前資料表的名稱
15089
			$dtName=$result["primaryKey"][$i]["dtName"];
15090
 
15091
			#如果主鍵欄位名稱不為 null,亦即有主鍵
15092
			if($result["primaryKey"][$i]["columnName"]!=null){
15093
 
15094
				#儲存欄位所屬的資料表名稱.
15095
				$result["content"][$referenceColumnCount]["tableName"]=$dtName;
15096
 
15097
				#儲存是"primary key"還是"index key".
15098
				$result["content"][$referenceColumnCount]["columnKey"]="primary key";
15099
 
15100
				#儲存欄位名稱
15101
				$result["content"][$referenceColumnCount]["columnName"]=$result["primaryKey"][$i]["columnName"];
15102
 
15103
				#儲存欄位儲存形態與長度限制.
15104
				$result["content"][$referenceColumnCount]["typeAndLength"]=$result["primaryKey"][$i]["columnVarLengthLimit"];
15105
 
15106
				#儲存欄位的「鍵所屬資料表名稱.鍵欄位名稱」.
15107
				$result["content"][$referenceColumnCount]["tableDotColumnName"]=$dtName.".".$result["primaryKey"][$i]["columnName"];
15108
 
15109
				#儲存欄位的「資料索引鍵所屬資料表名稱.索引鍵欄位名稱 儲存變數型別與長度」.
15110
				$result["content"][$referenceColumnCount]["tableDotColumnVarType"]=$dtName.".".$result["primaryKey"][$i]["columnName"]." ".$result["primaryKey"][$i]["columnVarTypeAndLengthLimit"];
15111
 
15112
				#能夠被外鍵參照的欄位計數加1
15113
				$referenceColumnCount++;	
15114
 
15115
				}#if end
15116
 
15117
			#用當前資料表的名稱取得索引鍵的資訊
15118
 
15119
			#所有資料表有幾個索引鍵就執行幾次
15120
			for($j=0;$j<count($result["indexKey"]["tableName"]);$j++){
15121
 
15122
				#如果是當前資料表的索引鍵
15123
				if($result["indexKey"]["tableName"][$j]==$dtName){
15124
 
15125
					#儲存欄位所屬的資料表名稱.
15126
					$result["content"][$referenceColumnCount]["tableName"]=$dtName;
15127
 
15128
					#儲存是"primary key"還是"index key".
15129
					$result["content"][$referenceColumnCount]["columnKey"]="index key";
15130
 
15131
					#儲存欄位名稱
15132
					$result["content"][$referenceColumnCount]["columnName"]=$result["indexKey"]["columnName"][$j];
15133
 
15134
					#儲存欄位儲存形態與長度限制.
15135
					$result["content"][$referenceColumnCount]["typeAndLength"]=$result["indexKey"]["typeAndLength"][$j];
15136
 
15137
					#儲存欄位的「鍵所屬資料表名稱.鍵欄位名稱」.
15138
					$result["content"][$referenceColumnCount]["tableDotColumnName"]=$result["indexKey"]["tableDotColumnName"][$j];
15139
 
15140
					#儲存欄位的「資料索引鍵所屬資料表名稱.索引鍵欄位名稱 儲存變數型別與長度」.
15141
					$result["content"][$referenceColumnCount]["tableDotColumnVarType"]=$result["indexKey"]["tableDotColumnVarType"][$j];
15142
 
15143
					#能夠被外鍵參照的欄位計數加1
15144
					$referenceColumnCount++;	
15145
 
15146
					}#if end
15147
 
15148
				}#for end
15149
 
15150
			}#for end
15151
 
15152
		#執行到這邊代表執行成功
15153
		$result["status"]="true";
15154
 
15155
		#回傳結果
15156
		return $result;
15157
 
15158
		}#function getAllIndexKeyInAllDataBase end 
15159
 
15160
	/*
15161
	#函式說明:
15162
	#將資料表輸出成csv檔案
15163
	#回傳結果:
15164
	#$result["status"],執行是否正常,"true"代表執行正常,"false"代表執行失敗.
15165
	#$result["error"],錯誤訊息
15166
	#$result["function"],當前執行的涵式
15167
	#$result["csvFile"],輸出的csv檔案位置與名稱.
15168
	#必填參數:
15169
	#$conf["dbAddress"],字串,欲連線的mariadb/mysql伺服器IP/domainName位置.
15170
	$conf["dbAddress"]=$dbAddress;
15171
	#$conf["dbAccount"],字串,連線到mariadb/mysql所用的帳戶.
15172
	$conf["dbAccount"]=$dbAccount;
15173
	#$conf["dbName"],字串,目標資料表位於哪個資庫底下.
15174
	$conf["dbName"]=$dbName;
15175
	#$conf["dtName"],字串,目標資料表的名稱.
15176
	$conf["dtName"]="";
15177
	#可省略參數:
15178
	#$conf["dbPassword"],字串,連線到mariadb/mysql伺服器時所使用的密碼,若未設置則代表不使用密碼來連線.
15179
	#$conf["dbPassword"]=$dbPassword;
15180
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,可省略,若省略則代表使用預設的port 3306.
15181
	#$conf["dbPort"]=$dbPort;
15182
	#$conf["column"],陣列,要的欄位名稱,預設為「array(*)」代表所有欄位都要, 
15183
	#$conf["column"]=array("*");
15184
	#$conf["WhereColumnName"],陣列,篩選用的特定欄位
15185
	#$conf["WhereColumnName"]=array("");
15186
	#$conf["WhereColumnValue"],陣列,篩選用特定欄位的數值要等於多少才是我們要的.
15187
	#$conf["WhereColumnValue"]=array("");
15188
	#$conf["groupBy"],陣列,爲要以哪幾個欄爲作爲分羣的依據(欄位相同的數值僅會取出一筆).
15189
	#$conf["groupBy"]=array("");
15190
	#$conf["orderItem"],字串,爲排序的項目依據,若要用隨機抽樣,可以用"rand()",可省略。
15191
	#$conf["orderItem"]="";#
15192
	#$conf["ascORdesc"],字串,爲要低增還是遞減排序,asc爲遞增;desc爲遞減。
15193
	#$conf["ascORdesc"]="asc";
15194
	#$conf["outPutPathAndName"],字串,輸出的csv檔案要存放在哪裡.
15195
	#$conf["outPutPathAndName"]="";
15196
	#$conf["noDownload"],字串,如果爲"true"則代表不要讓使用者下載,但會回傳檔案的相對位置
15197
	#$conf["noDownload"]="true";
15198
	#參考資料:
15199
	#無.
15200
	#備註:
15201
	#無.
15202
	*/
15203
	public static function exportTableToCsv($conf){
15204
 
15205
		#初始化要回傳的內容
15206
		$result=array();
15207
 
15208
		#取得當前執行的函數名稱
15209
		$result["function"]=__FUNCTION__;
15210
 
15211
		#如果 $conf 不為陣列
15212
		if(gettype($conf)!="array"){
15213
 
15214
			#設置執行失敗
15215
			$result["status"]="false";
15216
 
15217
			#設置執行錯誤訊息
15218
			$result["error"][]="\$conf變數須為陣列形態";
15219
 
15220
			#如果傳入的參數為 null
15221
			if($conf==null){
15222
 
15223
				#設置執行錯誤訊息
15224
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
15225
 
15226
				}#if end
15227
 
15228
			#回傳結果
15229
			return $result;
15230
 
15231
			}#if end
15232
 
15233
		#檢查參數
15234
		#函式說明:
15235
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
15236
		#回傳結果:
15237
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15238
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
15239
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
15240
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
15241
		#必填參數:
15242
		$conf["db"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
15243
		$conf["db"]["isexistMuti"]["variableCheck"]=array("dbAddress","dbAccount","dbName","dtName");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
15244
		#可省略參數:
15245
		$conf["db"]["isexistMuti"]["variableType"]=array("string","string","string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
15246
		$conf["db"]["isexistMuti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
15247
		$checkResult=variableCheck::isexistMulti($conf["db"]["isexistMuti"]);
15248
		unset($conf["db"]["isexistMuti"]);
15249
 
15250
		#如果 $checkResult["status"] 等於 "false"
15251
		if($checkResult["status"]=="false"){
15252
 
15253
			#設置錯誤識別
15254
			$result["status"]="false";
15255
 
15256
			#設置錯誤訊息
15257
			$result["error"]=$checkResult;
15258
 
15259
			#回傳結果
15260
			return $result;
15261
 
15262
			}#if end
15263
 
15264
		#如果 $checkResult["passed"] 等於 "false"
15265
		if($checkResult["passed"]=="false"){
15266
 
15267
			#設置錯誤識別
15268
			$result["status"]="false";
15269
 
15270
			#設置錯誤訊息
15271
			$result["error"]=$checkResult;
15272
 
15273
			#回傳結果
15274
			return $result;
15275
 
15276
			}#if end
15277
 
15278
		#如果 $conf["column"] 沒有設置
15279
		if(!isset($conf["column"])){
15280
 
15281
			#則代表要全部的欄位
15282
			$conf["column"]=array("*");
15283
 
15284
			}#if end
15285
 
15286
		#抓取資料表資料
15287
		#函式說明:
15288
		#一次取得資料庫、表的資料
15289
		#回傳結果:
15290
		#$result["status"],執行結果"true"為成功;"false"為執行失敗。
15291
		#$result["error"],錯誤訊息陣列。
15292
		#$result["dataColumnName"],抓取的資料欄位名稱陣列.
15293
		#$result["dataColumnName"][$i]代表第$i+1個欄位名稱
15294
		#$result["dataContent"],爲資料的內容。
15295
		#$result["dataContent"][$conf["WhereColumnName"][$i]][$dataSetNum]
15296
			#$dataSetNum 爲第$dataSetNum+1筆資料
15297
			#$conf["WhereColumnName"][$i] 爲第 $i+1 個欄位的名稱
15298
		#$result["dataCount"],爲取得的資料筆數。
15299
		#$result["sql"],執行的sql字串.
15300
		#必填參數:
15301
		$conf["db"]["fastGetDbData"]["dbAddress"]=$conf["dbAddress"];#爲dbServer的位置。
15302
		$conf["db"]["fastGetDbData"]["dbAccount"]=$conf["dbAccount"];#爲登入dbServer的帳號。
15303
		$conf["db"]["fastGetDbData"]["dbName"]=$conf["dbName"];#爲要存取的資料庫名稱
15304
		$conf["db"]["fastGetDbData"]["tableName"]=$conf["dtName"];#爲要存取的資料表名稱
15305
		$conf["db"]["fastGetDbData"]["columnYouWant"]=$conf["column"];#你想要的欄位!
15306
		#可省略參數:
15307
 
15308
		#如果 $conf["dbPassword"] 有設置 
15309
		if(isset($conf["dbPassword"])){
15310
 
15311
			#則設定進行連線密碼
15312
			$conf["db"]["fastGetDbData"]["dbPassword"]=$conf["dbPassword"];#爲要存取dbServer的密碼
15313
 
15314
			}#if end
15315
 
15316
		#如果 $conf["dbPort"] 有設置 
15317
		if(isset($conf["dbPort"])){
15318
 
15319
			#則設定進行連線的 port
15320
			$conf["db"]["fastGetDbData"]["dbPort"]=$conf["dbPort"];#爲要存取dbServer的port
15321
 
15322
			}#if end
15323
 
15324
		#如果 $conf["WhereColumnName"] 有設置
15325
		if(isset($conf["WhereColumnName"])){
15326
 
15327
			$conf["db"]["fastGetDbData"]["WhereColumnName"]=$conf["WhereColumnName"];#用於判斷語句的欄位項目陣列。
15328
 
15329
			}#if end
15330
 
15331
		#如果 $conf["WhereColumnValue"] 有設置
15332
		if(isset($conf["WhereColumnValue"])){
15333
 
15334
			$conf["db"]["fastGetDbData"]["WhereColumnValue"]=$conf["WhereColumnValue"];#用於判斷語句的欄位數值陣列,若與LIKE搭配,則可以在關鍵自字串的左右名加上「%」符號,這樣就可以搜尋具有該字串的內容。
15335
 
15336
			}#if end
15337
 
15338
		#$conf["db"]["fastGetDbData"]["WhereColumnCombine"]=array("");#用於判斷語句當中需要()起來的判斷式,須爲陣列值,"s"代表「(」,"e"代表「)」 ,若無則須設爲""。
15339
		#$conf["db"]["fastGetDbData"]["WhereColumnOperator"]=array("");#用於判斷語句的比較符號陣列,可以用的符號有「"="、">"、"<"、"LIKE"、"NOT LIKE"」,預設都爲「=」。
15340
		#$conf["db"]["fastGetDbData"]["WhereColumnAndOr"]=array("");#用於判斷語句條件之間成立的條件是AND還是OR,須爲陣列值。其數量應爲要判斷的欄位數量減一。
15341
 
15342
		#如果 $conf["orderItem"] 有設定
15343
		if(isset($conf["orderItem"])){
15344
 
15345
			$conf["db"]["fastGetDbData"]["orderItem"]=$conf["orderItem"];#爲排序的項目依據,若要用隨機抽樣,可以用"rand()",可省略。
15346
 
15347
			}#if end
15348
 
15349
		#如果 $conf["ascORdesc"] 有設定
15350
		if(isset($conf["ascORdesc"])){
15351
 
15352
 
15353
			$conf["db"]["fastGetDbData"]["ascORdesc"]=$conf["ascORdesc"];#爲要低增還是遞減排序,asc爲遞增;desc爲遞減。
15354
 
15355
			}#if end
15356
 
15357
		#$conf["db"]["fastGetDbData"]["numberStart"]="0";#為從第幾筆開始讀取,預設為0,代筆第一筆。
15358
		#$conf["db"]["fastGetDbData"]["numLimit"]="30";#為要取幾筆資料,可以省略,省略則表示不限制數目。
15359
 
15360
		#如果 $conf["groupBy"] 有設定
15361
		if(isset($conf["groupBy"])){
15362
 
15363
			$conf["db"]["fastGetDbData"]["groupBy"]=$conf["groupBy"];#爲要以哪幾個欄爲作爲分羣的依據(欄位相同的數值僅會取出一筆).
15364
 
15365
			}#if end
15366
 
15367
		$db["fastGetDbData"]=db::fastGetDbData($conf["db"]["fastGetDbData"]);
15368
		unset($conf["db"]["fastGetDbData"]);
15369
 
15370
		#var_dump($db["fastGetDbData"]);
15371
 
15372
		#如果 $db["fastGetDbData"]["status"] 等於 "false"
15373
		if($db["fastGetDbData"]["status"]=="false"){
15374
 
15375
			#設置錯誤識別
15376
			$result["status"]="false";
15377
 
15378
			#設置錯誤訊息
15379
			$result["error"]=$db["fastGetDbData"];
15380
 
15381
			#回傳結果
15382
			return $result;
15383
 
15384
			}#if end
15385
 
15386
		#初始化要寫入的內容
15387
		$writedData[0]=$db["fastGetDbData"]["dataColumnName"];
15388
 
15389
		#var_dump($writedData);
15390
 
15391
		#取得要寫入的欄位數值
15392
 
15393
		#針對每筆資料
15394
		for($i=0;$i<$db["fastGetDbData"]["dataCount"];$i++){
15395
 
15396
			#依據每個欄位
15397
			for($j=0;$j<count($db["fastGetDbData"]["dataColumnName"]);$j++){
15398
 
15399
				#儲存到列裡面
15400
				$writedData[$i+1][]=$db["fastGetDbData"]["dataContent"][$db["fastGetDbData"]["dataColumnName"][$j]][$i];
15401
 
15402
				}#foreach end
15403
 
15404
			}#for end
15405
 
15406
		#var_dump($writedData);
15407
 
15408
		#輸出成csv檔
15409
		#函式說明:
15410
		#快速建立一個csv檔案,並且要求使用者下載。
15411
		#回傳結果::
15412
		#如果有設置$conf["noDownload"]爲"true"的話,則會回傳檔案的位置
15413
		#必填參數:
15414
		$conf["db"]["create"]["dataArray"]=$writedData;#要寫入的文字,$conf["dataArray"][$i],代表第 $i 行的內容。
15415
		#可省略參數:
15416
 
15417
		#如果有設置 $conf["outPutPathAndName"]
15418
		if(isset($conf["outPutPathAndName"])){
15419
 
15420
			$conf["db"]["create"]["csvFilePathAndName"]=$conf["outPutPathAndName"];#csv檔案的名稱,預設爲系統時間
15421
 
15422
			}#if end
15423
 
15424
		#如果 $conf["noDownload"] 有設置
15425
		if(isset($conf["noDownload"])){
15426
 
15427
			#且$conf["noDownload"]等於"true"
15428
			if($conf["noDownload"]=="true"){
15429
 
15430
				$conf["db"]["create"]["noDownload"]="true";#如果爲"true"則代表不要讓使用者下載,但會回傳檔案的相對位置
15431
 
15432
				}#if end	
15433
 
15434
			}#if end
15435
 
15436
		#參考資料來源:
15437
		#http://php.net/manual/en/function.str-split.php
15438
		return csv::create($conf["db"]["create"]);
15439
		unset($conf["db"]["create"]);
15440
 
15441
		}#funciton exportTableToCsv end
15442
 
15443
	/*
15444
	#函式說明:
15445
	#透過一筆筆將資料表刪除後,重設識別欄位的自動增量欄位起始值為1
15446
	#回傳結果:
15447
	#$result["status"],執行是否正常,"true"代表執行正常,"false"代表執行失敗.
15448
	#$result["error"],錯誤訊息.
15449
	#$result["function"],當前執行的函數名稱.
15450
	#$result["sql"],執行的sql語法陣列.
15451
	#必填參數:
15452
	#$conf["dbAddress"],字串,連線到資料庫的位置.
15453
	$conf["dbAddress"]=$dbAddress;
15454
	#$conf["dbAccount"],字串,連線到資料庫的帳號.
15455
	$conf["dbAccount"]=$dbAccount;
15456
	#$conf["dbName"],字串,要連線到哪個資料庫.
15457
	$conf["dbName"]=$dbName;
15458
	#$conf["dtName"],字串,要重設重設識別欄位的自動增量為0的資料表名稱.
15459
	$conf["dtName"]="";
15460
	#可省略參數:
15461
	#$conf["dbPassword"],字串,連線到資料庫的密碼.
15462
	#$conf["dbPassword"]=$dbPassword;
15463
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,可省略,若省略則代表使用預設的port 3306.
15464
	#$conf["dbPort"]=$dbPort;
15465
	#參考資料:
15466
	#http://dev.mysql.com/doc/refman/5.0/en/alter-table.html
15467
	#備註:
15468
	#參考語法,ALTER TABLE dbName.dtName AUTO_INCREMENT = 1;
15469
	*/
15470
	public static function eraseDataInTableThenResetAutoIncrement(&$conf){
15471
 
15472
		#初始化要回傳的內容
15473
		$result=array();
15474
 
15475
		#取得當前執行的函數名稱
15476
		$result["function"]=__FUNCTION__;
15477
 
15478
		#如果 $conf 不為陣列
15479
		if(gettype($conf)!="array"){
15480
 
15481
			#設置執行失敗
15482
			$result["status"]="false";
15483
 
15484
			#設置執行錯誤訊息
15485
			$result["error"][]="\$conf變數須為陣列形態";
15486
 
15487
			#如果傳入的參數為 null
15488
			if($conf==null){
15489
 
15490
				#設置執行錯誤訊息
15491
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
15492
 
15493
				}#if end
15494
 
15495
			#回傳結果
15496
			return $result;
15497
 
15498
			}#if end
15499
 
15500
		#檢查參數
15501
		#函式說明:
15502
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
15503
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15504
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
15505
		#$result["function"],當前執行的函式名稱.
15506
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
15507
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
15508
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
15509
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
15510
		#必填參數:
15511
		#$conf["variableCheck.checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
15512
		$conf["variableCheck.checkArguments"]["varInput"]=&$conf;
15513
		#$conf["variableCheck.checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
15514
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableName"]=array("dbAddress","dbAccount","dbName","dtName");
15515
		#$conf["variableCheck.checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
15516
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableType"]=array("string","string","string","string");
15517
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
15518
		$conf["variableCheck.checkArguments"]["referenceVarKey"]="variableCheck.checkArguments";
15519
		#可省略參數:
15520
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"false"。
15521
		#$conf["canBeEmptyString"]="false";
15522
		#$conf["variableCheck.checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
15523
		$conf["variableCheck.checkArguments"]["skipableVariableName"]=array("dbPassword","dbPort");
15524
		#$conf["variableCheck.checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
15525
		$conf["variableCheck.checkArguments"]["skipableVariableType"]=array("string","string");
15526
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
15527
		#$conf["skipableVarDefaultValue"]=array("");
15528
		$checkResult=variableCheck::checkArguments($conf["variableCheck.checkArguments"]);
15529
		unset($conf["variableCheck.checkArguments"]);
15530
 
15531
		#如果 檢查參數 失敗
15532
		if($checkResult["status"]=="false"){
15533
 
15534
			#設置執行不正常
15535
			$result["status"]="false";
15536
 
15537
			#設置執行錯誤
15538
			$result["error"]=$checkResult;
15539
 
15540
			#回傳節果
15541
			return $result;
15542
 
15543
			}#if end
15544
 
15545
		#如果 檢查參數 不通過
15546
		if($checkResult["passed"]=="false"){
15547
 
15548
			#設置執行不正常
15549
			$result["status"]="false";
15550
 
15551
			#設置執行錯誤
15552
			$result["error"]=$checkResult;
15553
 
15554
			#回傳節果
15555
			return $result;
15556
 
15557
			}#if end
15558
 
15559
		#執行一筆筆移除資料的sql語法
15560
		#函式說明:
15561
		#執行mysql指令
15562
		#回傳結果::
15563
		#$result["status"],"true"為執行成功;"false"為執行失敗。
15564
		#$result["error"],錯誤訊息的陣列
15565
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
15566
		#$result["queryString"],mysql查詢的語言
15567
		#查詢號的解果,需要解析。
15568
		#必填參數:
15569
		$conf["db.execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
15570
		$conf["db.execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
15571
		$conf["db.execMysqlQuery"]["dbSql"]="DELETE FROM `".$conf["dbName"]."`.`".$conf["dtName"]."` ";#要執行sql語法
15572
		#可省略參數: 
15573
 
15574
		#如果有設置 $conf["dbPassword"]
15575
		if(isset($conf["dbPassword"])){
15576
 
15577
			$conf["db.execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
15578
 
15579
			}#if end
15580
 
15581
		#如果有設置 $conf["dbPort"]
15582
		if(isset($conf["dbPort"])){
15583
 
15584
			$conf["db.execMysqlQuery"]["dbPort"]=$conf["dbPort"];#爲連線到mysql-Server時要使用的port,可省略,若省略則代表預設的3306 port.
15585
 
15586
			}#if end
15587
 
15588
		$queryResult=db::execMysqlQuery($conf["db.execMysqlQuery"]);
15589
		unset($conf["db.execMysqlQuery"]);
15590
 
15591
		#如果執行 sql 語法失敗
15592
		if($queryResult["status"]=="false"){
15593
 
15594
			#設置執行不正常
15595
			$result["status"]="false";
15596
 
15597
			#設置執行錯誤
15598
			$result["error"]=$queryResult;
15599
 
15600
			#回傳節果
15601
			return $result;
15602
 
15603
			}#if end
15604
 
15605
		#取得所執行的sql語法
15606
		$result["sql"][]=$queryResult["queryString"];		
15607
 
15608
		#執行重設增量的sql語法
15609
		#函式說明:
15610
		#執行mysql指令
15611
		#回傳結果::
15612
		#$result["status"],"true"為執行成功;"false"為執行失敗。
15613
		#$result["error"],錯誤訊息的陣列
15614
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
15615
		#$result["queryString"],mysql查詢的語言
15616
		#查詢號的解果,需要解析。
15617
		#必填參數:
15618
		$conf["db.execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
15619
		$conf["db.execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
15620
		$conf["db.execMysqlQuery"]["dbSql"]="ALTER TABLE ".$conf["dbName"].".".$conf["dtName"]." AUTO_INCREMENT = 1";#要執行sql語法
15621
		#如果有設置 $conf["dbPassword"]
15622
		if(isset($conf["dbPassword"])){
15623
 
15624
			$conf["db.execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
15625
 
15626
			}#if end
15627
 
15628
		#如果有設置 $conf["dbPort"]
15629
		if(isset($conf["dbPort"])){
15630
 
15631
			$conf["db.execMysqlQuery"]["dbPort"]=$conf["dbPort"];#爲連線到mysql-Server時要使用的port,可省略,若省略則代表預設的3306 port.
15632
 
15633
			}#if end
15634
 
15635
		$queryResult=db::execMysqlQuery($conf["db.execMysqlQuery"]);
15636
		unset($conf["db.execMysqlQuery"]);
15637
 
15638
		#如果執行 sql 語法失敗
15639
		if($queryResult["status"]=="false"){
15640
 
15641
			#設置執行不正常
15642
			$result["status"]="false";
15643
 
15644
			#設置執行錯誤
15645
			$result["error"]=$queryResult;
15646
 
15647
			#回傳節果
15648
			return $result;
15649
 
15650
			}#if end
15651
 
15652
		#取得所執行的sql語法
15653
		$result["sql"][]=$queryResult["queryString"];
15654
 
15655
		#設置執行正常
15656
		$result["status"]="true";
15657
 
15658
		#回傳結果
15659
		return $result;
15660
 
15661
		}#function eraseDataInTableThenResetAutoIncrement end
15662
 
15663
	}#db class end
15664
 
15665
?>