Subversion Repositories php-qbpwcf

Rev

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

Rev Author Line No. Line
3 liveuser 1
<?php
2
 
3
/*
4
 
5
	QBPWCF, Quick Build PHP website Component base on Fedora Linux.
6
    Copyright (C) 2014~2025 Min-Jhin,Chen
7
 
8
    This file is part of QBPWCF.
9
 
10
    QBPWCF is free software: you can redistribute it and/or modify
11
    it under the terms of the GNU General Public License as published by
12
    the Free Software Foundation, either version 3 of the License, or
13
    (at your option) any later version.
14
 
15
    QBPWCF is distributed in the hope that it will be useful,
16
    but WITHOUT ANY WARRANTY; without even the implied warranty of
17
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
    GNU General Public License for more details.
19
 
20
    You should have received a copy of the GNU General Public License
21
    along with QBPWCF.  If not, see <http://www.gnu.org/licenses/>.
22
 
23
*/
24
namespace qbpwcf;
25
 
26
/*
27
類別說明:
28
跟mysql/mariadb操作有關的類別
29
備註:
30
建議加上pdo的支援,以便無痛支援多種資料庫。
31
https://www.php.net/manual/en/mysql.php
32
https://www.php.net/manual/en/mysqlinfo.library.choosing.php
33
https://blog.markgdi.com/article/quick-start-operation-mysql-using-php-pdo/
34
*/
35
class db{
36
 
37
	/*
38
	#函式說明:
39
	#當前類別被呼叫的靜態方法不存在時,將會執行該函數,回報該方法不存在.
40
	#回傳結果:
41
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
42
	#$reuslt["error"],執行不正常結束的錯訊息陣列.
43
	#$result["function"],當前執行的函式名稱.
44
	#必填參數:
45
	#$method,物件,為物件實體或類別名稱,會自動置入該參數.
46
	#$arguments,陣列,為呼叫方法時所用的參數.
47
	#參考資料:
48
	#__call=>http://php.net/manual/en/language.oop5.overloading.php#object.callstatic
49
	*/
50
	public function __call($method,$arguments){
51
 
52
		#取得當前執行的函式
53
		$result["function"]=__FUNCTION__;
54
 
55
		#設置執行不正常
56
		$result["status"]="false";
57
 
58
		#設置執行錯誤
59
		$result["error"][]=__NAMESPACE__ ."/".$method."() 不存在!";
60
 
61
		#設置所丟入的參數
62
		$result["error"][]=$arguments;
63
 
64
		#回傳結果
65
		return $result;
66
 
67
		}#function __call end
68
 
69
	/*
70
	#函式說明:
71
	#當前類別被呼叫的靜態方法不存在時,將會執行該函數,回報該方法不存在.
72
	#回傳結果:
73
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
74
	#$reuslt["error"],執行不正常結束的錯訊息陣列.
75
	#$result["function"],當前執行的函式名稱.
76
	#必填參數:
77
	#$method,物件,為物件實體或類別名稱,會自動置入該參數.
78
	#$arguments,陣列,為呼叫方法時所用的參數.
79
	#參考資料:
80
	#__call=>http://php.net/manual/en/language.oop5.overloading.php#object.callstatic
81
	*/
82
	public static function __callStatic($method,$arguments){
83
 
84
		#取得當前執行的函式
85
		$result["function"]=__FUNCTION__;
86
 
87
		#設置執行不正常
88
		$result["status"]="false";
89
 
90
		#設置執行錯誤
91
		$result["error"][]="欲呼叫的". __NAMESPACE__ ."/".$method."() 不存在!";
92
 
93
		#設置所丟入的參數
94
		$result["error"][]=$arguments;
95
 
96
		#回傳結果
97
		return $result;
98
 
99
		}#function __callStatic end
100
 
101
	/*
102
	#函式說明:
103
	#連線到mysql-server,會回傳一個陣列
104
	#回傳結果:
105
	#$result["status"],若連線成功則爲"true",連線失敗則爲"false"。
106
	#$result["function"],當前執行的函數名稱
107
	#$result["connectInformation"],爲回傳的mysql連線資訊。
108
	#$result["error"],爲錯誤訊息陣列
109
	#必填參數:
110
	#$conf["dbAddress"],字串,爲mysql-Server的位置。
111
	$conf["dbAddress"]=$dbAddress;
112
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號。
113
	$conf["dbAccount"]=$dbAccount;
114
	#可省略參數:
115
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼。
116
	#$conf["dbPassword"]=$dbPassword;
117
	#$conf["dbPort"],字串,為連線到mysql-Server時對應的port,預設不使用
118
	#$conf["dbPort"]="3306";
119
	#參考資料:
120
	#無.
121
	#備註:
122
	#無.
123
	*/	
124
	public static function mysqlConnect(&$conf){
125
 
126
		#初始化要回傳的內容
127
		$result=array();
128
 
129
		#取得當前執行的函數名稱
130
		$result["function"]=__FUNCTION__;
131
 
132
		#如果 $conf 不為陣列
133
		if(gettype($conf)!="array"){
134
 
135
			#設置執行失敗
136
			$result["status"]="false";
137
 
138
			#設置執行錯誤訊息
139
			$result["error"][]="\$conf變數須為陣列形態";
140
 
141
			#如果傳入的參數為 null
142
			if($conf==null){
143
 
144
				#設置執行錯誤訊息
145
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
146
 
147
				}#if end
148
 
149
			#回傳結果
150
			return $result;
151
 
152
			}#if end
153
 
154
		#檢查參數
155
		#函式說明:
156
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
157
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
158
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
159
		#$result["function"],當前執行的函式名稱.
160
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
161
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
162
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
163
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
164
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
165
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
166
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
167
		#必填參數:
168
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
169
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
170
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
171
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("dbAddress","dbAccount");
172
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
173
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
174
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
175
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
176
		#可省略參數:
177
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
178
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
179
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
180
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("dbPassword","dbPort");
181
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
182
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
183
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
184
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null);
185
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
186
		#$conf["arrayCountEqualCheck"][]=array();
187
		#參考資料:
188
		#array_keys=>http://php.net/manual/en/function.array-keys.php
189
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
190
		unset($conf["variableCheck::checkArguments"]);
191
 
192
		#如果檢查失敗
193
		if($checkResult["status"]=="false"){
194
 
195
			#設置錯誤識別
170 liveuser 196
			$result["status"]="false";
3 liveuser 197
 
198
			#設置錯誤訊息
199
			$result["error"]=$checkResult;
200
 
201
			#回傳解果
202
			return $result;
203
 
204
			}#if end
205
 
206
		#如果 $checkResult["status"]等於"false";
207
		if($checkResult["passed"]=="false"){
208
 
209
			#設置錯誤識別
170 liveuser 210
			$result["status"]="false";
3 liveuser 211
 
212
			#設置錯誤訊息
213
			$result["error"]=$checkResult;
214
 
215
			#回傳解果
216
			return $result;
217
 
218
			}#if end
219
 
220
		#如果是 localhost
221
		if($conf["dbAddress"]==="localhost"){
222
 
223
			#卸除dbPort變數
224
			unset($conf["dbPort"]);
225
 
226
			}#if end
227
 
170 liveuser 228
		#如果密碼爲空,則爲不使用密碼進行連綫
3 liveuser 229
		if(!isset($conf["dbPassword"])){
230
 
231
			#如果沒設定 dbPort
232
			if(!isset($conf["dbPort"])){
233
 
234
				#設定資料庫位置與帳號,並連線
235
				#若連線失敗
236
				if(!($result["connectInformation"]=@mysqli_connect($conf["dbAddress"],$conf["dbAccount"]))){
237
 
238
					#設置連線失敗的提示
239
					$result["error"][]="連線失敗,請檢查帳號是否正確.";
240
 
241
					#取得連線時的錯誤編號
242
					$result["error"][]=mysqli_connect_errno();
243
 
244
					#取得連線時的錯誤訊息
245
					$result["error"][]=mysqli_connect_error();
246
 
247
					#設置執行失敗
248
					$result["status"]="false";
249
 
250
					#回傳結果
251
					return $result;
252
 
253
					}#if end
170 liveuser 254
 
3 liveuser 255
				}#if end
256
 
257
			#反之
258
			else{
259
 
260
				#設定資料庫位置與port與帳號,並連線
261
				#若連線失敗
262
				if(!($result["connectInformation"]=@mysqli_connect($conf["dbAddress"].":".$conf["dbPort"],$conf["dbAccount"]))){
263
 
264
					#設置連線失敗的提示
265
					$result["error"][]="連線失敗,請檢查帳號是否正確.";
266
 
267
					#取得連線時的錯誤編號
268
					$result["error"][]=mysqli_connect_errno();
269
 
270
					#取得連線時的錯誤訊息
271
					$result["error"][]=mysqli_connect_error();
272
 
273
					#設置執行失敗
274
					$result["status"]="false";
275
 
276
					#回傳結果
277
					return $result;
278
 
279
					}#if end
280
 
281
				}#else end
282
 
283
			}#if end
284
 
285
		#反之代表要使用密碼
286
		else{
287
 
288
			#如果沒設定 dbPort
289
			if(!isset($conf["dbPort"])){
290
 
291
				#設定資料庫位置、帳號、密碼,並連綫
292
				if(!($result["connectInformation"]=@mysqli_connect($conf["dbAddress"],$conf["dbAccount"],$conf["dbPassword"]))){
293
 
294
					#設置連線失敗的提示
295
					$result["error"][]="連線失敗,請檢查帳號密碼是否正確.";
296
 
297
					#取得連線時的錯誤編號
298
					$result["error"][]=mysqli_connect_errno();
299
 
300
					#取得連線時的錯誤訊息
301
					$result["error"][]=mysqli_connect_error();
302
 
303
					#設置執行失敗
304
					$result["status"]="false";
305
 
306
					#回傳結果
307
					return $result;
170 liveuser 308
 
3 liveuser 309
					}#if end
310
 
311
				}#if end
312
 
313
			#反之	
314
			else{
315
 
316
				#設定資料庫位置、帳號、密碼,並連綫
317
				if(!($result["connectInformation"]=@mysqli_connect($conf["dbAddress"].":".$conf["dbPort"],$conf["dbAccount"],$conf["dbPassword"]))){
318
 
319
					#設置連線失敗的提示
320
					$result["error"][]="連線失敗,請檢查帳號密碼是否正確.";
321
 
322
					#取得連線時的錯誤編號
323
					$result["error"][]=mysqli_connect_errno();
324
 
325
					#取得連線時的錯誤訊息
326
					$result["error"][]=mysqli_connect_error();
327
 
328
					#設置執行失敗
329
					$result["status"]="false";
330
 
331
					#回傳結果
332
					return $result;
170 liveuser 333
 
3 liveuser 334
					}#if end
335
 
336
				}#else end
337
 
338
			}#else end
339
 
340
		#使編碼為utf8
341
		if(!(mysqli_query($result["connectInformation"],'SET NAMES UTF8'))){
342
 
343
			#設置連線編碼失敗的提示
344
			$result["error"][]="設置連線編碼失敗.";
345
 
346
			#取得連線時的錯誤編號
347
			$result["error"][]=mysqli_connect_errno();
348
 
349
			#取得連線時的錯誤訊息
350
			$result["error"][]=mysqli_connect_error();
351
 
352
			#設置執行失敗
353
			$result["status"]="false";
354
 
355
			#回傳結果
356
			return $result;
357
 
358
			}#if end
359
 
360
		#設定 CHARACTER_SET_CLIENT 為 utf8
361
		if(!(mysqli_query($result["connectInformation"],'SET CHARACTER_SET_CLIENT=utf8'))){
362
 
363
			#設置連線編碼失敗的提示
364
			$result["error"][]="設置連線編碼失敗.";
365
 
366
			#取得連線時的錯誤編號
367
			$result["error"][]=mysqli_connect_errno();
368
 
369
			#取得連線時的錯誤訊息
370
			$result["error"][]=mysqli_connect_error();
371
 
372
			#設置執行失敗
373
			$result["status"]="false";
374
 
375
			#回傳結果
376
			return $result;
377
 
378
			}#if end
379
 
380
		#設定 CHARACTER_SET_RESULTS 為 utf8
381
		if(!(mysqli_query($result["connectInformation"],'SET CHARACTER_SET_RESULTS=utf8'))){
382
 
383
			#設置連線編碼失敗的提示
384
			$result["error"][]="設置連線編碼失敗.";
385
 
386
			#取得連線時的錯誤編號
387
			$result["error"][]=mysqli_connect_errno();
388
 
389
			#取得連線時的錯誤訊息
390
			$result["error"][]=mysqli_connect_error();
391
 
392
			#設置執行失敗
393
			$result["status"]="false";
394
 
395
			#回傳結果
396
			return $result;
397
 
398
			}#if end
399
 
400
		#執行正常
401
		$result["status"]="true";
402
 
403
		#回傳結果
404
		return $result;	 
405
 
406
		}#function mysqlConnect end
407
 
408
	/*
409
	#函式說明:
410
	#關閉與mysql的連線,會回傳一個陣列。
411
	#回傳結果::
412
	#$result["status"],若連線成功則爲"true",連線失敗則爲"false".
413
	#$result["connectInformation"],爲回傳的mysql連線資訊。
414
	#$result["error"],爲錯誤訊息陣列.	
415
	#必填參數:
416
	#$conf["mysqli"],字串,mysqli物件.
417
	$conf["mysqli"]=$mysqli;
418
	#可省略參數:
419
	#無.
420
	#參考資料:
421
	#無.
422
	#備註:
423
	#無.
424
	*/	
425
	public static function mysqlClose(&$conf){
426
 
427
		#初始化要回傳的內容
428
		$result=array();
429
 
430
		#取得當前執行的函數名稱
431
		$result["function"]=__FUNCTION__;
432
 
433
		#如果 $conf 不為陣列
434
		if(gettype($conf)!="array"){
435
 
436
			#設置執行失敗
437
			$result["status"]="false";
438
 
439
			#設置執行錯誤訊息
440
			$result["error"][]="\$conf變數須為陣列形態";
441
 
442
			#如果傳入的參數為 null
443
			if($conf==null){
444
 
445
				#設置執行錯誤訊息
446
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
447
 
448
				}#if end
449
 
450
			#回傳結果
451
			return $result;
452
 
453
			}#if end
454
 
455
		#檢查參數
456
		#函式說明:
457
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
458
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
459
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
460
		#$result["function"],當前執行的函式名稱.
461
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
462
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
463
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
464
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
465
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
466
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
467
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
468
		#必填參數:
469
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
470
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
471
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
472
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("mysqli");
473
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
474
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array(null);
475
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
476
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
477
		#可省略參數:
478
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
479
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
480
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
481
		#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("dbPassword","dbPort");
482
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
483
		#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
484
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
485
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null);
486
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
487
		#$conf["arrayCountEqualCheck"][]=array();
488
		#參考資料:
489
		#array_keys=>http://php.net/manual/en/function.array-keys.php
490
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
491
		unset($conf["variableCheck::checkArguments"]);
492
 
493
		#如果檢查失敗
494
		if($checkResult["status"]=="false"){
495
 
496
			#設置錯誤識別
497
			$result["status"]="false";
498
 
499
			#設置錯誤訊息
500
			$result["error"]=$checkResult;
501
 
502
			#回傳解果
503
			return $result;
504
 
505
			}#if end
506
 
507
		#如果 $checkResult["status"]等於"false";
508
		if($checkResult["passed"]=="false"){
509
 
510
			#設置錯誤識別
511
			$result["status"]="false";
512
 
513
			#設置錯誤訊息
514
			$result["error"]=$checkResult;
515
 
516
			#回傳解果
517
			return $result;
518
 
519
			}#if end
520
 
521
		#關閉與資料庫的連線如果成功
522
		if(@mysqli_close($conf["mysqli"])){
523
 
524
			#則回傳"true"
525
			$result["status"]="true";
526
 
527
			}#if end
528
 
529
		#連線失敗回傳"false"
530
		else{
531
 
532
			#設置連線編碼失敗的提示
533
			$result["error"][]="關閉連線失敗.";
534
 
535
			#取得連線時的錯誤編號
536
			$result["error"][]=mysqli_connect_errno();
537
 
538
			#取得連線時的錯誤訊息
539
			$result["error"][]=mysqli_connect_error();
540
 
541
			#設置執行失敗
542
			$result["status"]="false";
543
 
544
			}#else end
545
 
546
		#儲存mysqli物件
547
		$result["connectInformation"]=$conf["mysqli"];
548
 
549
		#設置執行正常
550
		$result["status"]="true";
551
 
552
		#回傳結果
553
		return $result;	 
554
 
555
		}#funciton mysqlClose end
556
 
557
	/*
558
	#函式說明:
559
	#連線到資料庫,結果會回傳一個陣列.
560
	#$result["status"],若連線成功則爲"true",連線失敗則爲"false".
561
	#$result["connectInformation"],爲回傳的mysql連線資訊.
562
	#$result["error"],錯誤訊息	.
563
	#$result["function"],當前執行的函數名稱.
564
	#必填參數:
565
	#$conf["dbAddress"],字串,爲mysql-Server的位置。
566
	$conf["dbAddress"]=$dbAddress;
567
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號。
568
	$conf["dbAccount"]=$dbAccount;
569
	#$conf["dbName"],字串,爲要連的資料庫名稱
570
	$conf["dbName"]="";
571
	#可省略參數:
572
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼。
573
	#$conf["dbPassword"]=$dbPassword;
574
	#$conf["dbPort"],字串,為連線到mysql-Server時對應的port,可省略,預設為3306.
575
	#$conf["dbPort"]="3306";
576
	#參考資料:
577
	#無.
578
	#備註:
579
	#無.
580
	*/
581
	public static function dbConnect(&$conf){
582
 
583
		#初始化要回傳的內容
584
		$result=array();
585
 
586
		#取得當前執行的函數名稱
587
		$result["function"]=__FUNCTION__;
588
 
589
		#如果 $conf 不為陣列
590
		if(gettype($conf)!="array"){
591
 
592
			#設置執行失敗
593
			$result["status"]="false";
594
 
595
			#設置執行錯誤訊息
596
			$result["error"][]="\$conf變數須為陣列形態";
597
 
598
			#如果傳入的參數為 null
599
			if($conf==null){
600
 
601
				#設置執行錯誤訊息
602
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
603
 
604
				}#if end
605
 
606
			#回傳結果
607
			return $result;
608
 
609
			}#if end
610
 
611
		#檢查參數
612
		#函式說明:
613
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
614
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
615
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
616
		#$result["function"],當前執行的函式名稱.
617
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
618
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
619
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
620
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
621
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
622
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
623
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
624
		#必填參數:
625
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
626
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
627
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
628
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("dbAddress","dbAccount","dbName");
629
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
630
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string");
631
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
632
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
633
		#可省略參數:
634
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
635
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
636
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
637
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("dbPassword","dbPort");
638
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
639
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
640
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
641
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null);
642
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
643
		#$conf["arrayCountEqualCheck"][]=array();
644
		#參考資料:
645
		#array_keys=>http://php.net/manual/en/function.array-keys.php
646
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
647
		unset($conf["variableCheck::checkArguments"]);
648
 
649
		#如果檢查失敗
177 liveuser 650
		if($checkResult["status"]==="false"){
3 liveuser 651
 
652
			#設置錯誤識別
653
			$result["status"]="false";
654
 
655
			#設置錯誤訊息
656
			$result["error"]=$checkResult;
657
 
658
			#回傳解果
659
			return $result;
660
 
661
			}#if end
662
 
663
		#如果 $checkResult["status"]等於"false";
177 liveuser 664
		if($checkResult["passed"]==="false"){
3 liveuser 665
 
666
			#設置錯誤識別
667
			$result["status"]="false";
668
 
669
			#設置錯誤訊息
670
			$result["error"]=$checkResult;
671
 
672
			#回傳解果
673
			return $result;
674
 
675
			}#if end
676
 
677
		#函式說明:
678
		#連線到mysql-server,會回傳一個陣列
679
		#回傳結果:
680
		#$result["status"],若連線成功則爲"true",連線失敗則爲"false"。
681
		#$result["function"],當前執行的函數名稱
682
		#$result["connectInformation"],爲回傳的mysql連線資訊。
683
		#$result["error"],爲錯誤訊息陣列
684
		#必填參數:
685
		$conf["db"]["mysqlConnect"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置。
686
		$conf["db"]["mysqlConnect"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號。
687
		#可省略參數:
688
 
689
		#如果 $conf["dbPassword"] 有設定
690
		if(isset($conf["dbPassword"])){
691
 
692
			$conf["db"]["mysqlConnect"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼。
693
 
694
			}#if end
695
 
696
		#如果有設置 $conf["dbPort"]
697
		if(isset($conf["dbPort"])){
698
 
699
			$conf["db"]["mysqlConnect"]["dbPort"]=$conf["dbPort"];#字串,為連線到mysql-Server時對應的port,可省略,預設為3306.
700
 
177 liveuser 701
			}#if end
702
 
3 liveuser 703
		$con=db::mysqlConnect($conf["db"]["mysqlConnect"]);
704
		unset($conf["db"]["mysqlConnect"]);
705
 
706
		#如果連線失敗
177 liveuser 707
		if($con["status"]==="false"){
3 liveuser 708
 
709
			#提示訊息
710
			$result["error"]=$con;
711
 
712
			#設置執行失敗
713
			$result["status"]="false";
714
 
715
			#回傳結果
716
			return $result;
717
 
718
			}#if end
719
 
177 liveuser 720
		#確認資料庫存在或可以被存取
721
		#函式說明:
722
		#執行mysql指令
723
		#回傳結果::
724
		#$result["status"],"true"為執行成功;"false"為執行失敗。
725
		#$result["error"],錯誤訊息的陣列
726
		#$result["function"],當前執行的涵式
727
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
728
		#$result["queryConn"],mysql用來查尋的連資源. 
729
		#$result["queryString"],要執行的sql內容.
730
		#必填參數:
731
		#$conf["dbSql"],字串,要執行sql語法
732
		$conf["db::execMysqlQuery"]["dbSql"]="show databases;";
733
		#可省略參數:
734
		#$conf["dbLink"],物件,mysqli物件,由mysqli_connect()回傳的物件內容,若為數值則改用賬號密碼等資訊進行連線,反之則沿用連線物件.
735
		#$conf["db::execMysqlQuery"]["dbLink"]=$conf["dbName"];
736
		#$conf["dbAddress"],字串,爲mysql-Server的位置。
737
		$conf["db::execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];
738
		#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號。
739
		$conf["db::execMysqlQuery"]["dbAccount"]=$conf["dbAccount"]; 
740
 
741
		#如果存在 $dbPassword
742
		if(isset($conf["dbPassword"])){
743
 
744
			#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼。
745
			$conf["db::execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];
746
 
747
			}#if end
748
 
749
		#$conf["dbName"],字串,爲要連的資料庫名稱
750
		#$conf["dbName"]="";
751
 
752
		#如果存在 $dbPort
753
		if(isset($conf["dbPort"])){
754
 
755
			#$conf["dbPort"],字串,為連線到mysql-Server時對應的port,可省略,預設為3306.
756
			$conf["db::execMysqlQuery"]["dbPort"]=$conf["dbPort"];
757
 
758
			}#if end
759
 
760
		#$conf["autoClose"],字串,"true"代表要自動斷線,預設為"true"會自動斷線
761
		#$conf["autoClose"]="true";
762
		#參考資料:
763
		#無.
764
		#備註:
765
		#無.
766
		$execMysqlQuery=db::execMysqlQuery($conf["db::execMysqlQuery"]);
767
		unset($conf["db::execMysqlQuery"]);
768
 
769
		#如果執行失敗
770
		if($execMysqlQuery["status"]==="false"){
771
 
772
			#設置連線失敗的提示
773
			$result["error"][]="檢查資料庫可否存取出錯";
774
 
775
			#設置錯誤訊息
776
			$result["error"][]=$execMysqlQuery["error"];
777
 
778
			#設置執行失敗
779
			$result["status"]="false";
780
 
781
			#回傳結果
782
			return $result;
783
 
784
			}#if end
785
 
786
		#解析 $execMysqlQuery["queryResource"] 看是否存在要存取的資料庫
787
		#函式說明:
788
		#解析 dataTableSelect($conf) 後的結果,亦即將執行sql語法後所得到的結果解析放進變數裏面
789
		#回傳結果:
790
		#$result["status"],執行結果"true"為成功;"false"為失敗
791
		#$result["error"],錯誤訊息
792
		#$result["function"],儲存當前函數名稱
793
		#$result["dataColumnName"],為資料欄位的名稱陣列.
794
		#$result["dataColumnName"][$i]代表第一個欄位名稱.
795
		#$result["dataContent"],爲資料的內容陣列,第1維度的key為$conf["tableValueName"][$i],亦即第 $i+1 個欄位的名稱,若該欄位不存在,則其value為空字串;第2維度的key為第$i+1筆資料的索引.
796
		#$result["dataCount"],爲取得的資料筆數.
797
		#必填參數:
798
		#$conf["sqlQueryResult"],object,爲執行sql語法所獲得的查詢結果。
799
		$conf["db::sendQueryDataToVariabele"]["sqlQueryResult"]=$execMysqlQuery["queryResource"];
800
		#$conf["tableValueName"],字串陣列,爲該資料表列項目的每一項名稱,須爲陣列值,若為「array("*")」則代表所有欄位.
801
		$conf["db::sendQueryDataToVariabele"]["tableValueName"]=array("Database");
802
		#可省略參數:
803
		#$conf["dbAddress"],字串,爲mysql-Server的位置,目前沒有用途.
804
		#$conf["dbAddress"]=$dbAddress;
805
		#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號,目前沒有用途.
806
		#$conf["dbAccount"]=$dbAccount;
807
		#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼,目前沒有用途.
808
		#$conf["dbPassword"]=$dbPassword;
809
		#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,可省略,若省略則代表使用預設的3306 port,目前沒有用途.
810
		#$conf["dbPort"]="";
811
		#$conf["valueName"],字串陣列,爲該資料表列項目的每一項所要對應的變數名稱,預設為欄位的名稱($conf["tableValueName"]).
812
		#$conf["valueName"]=$conf["tableValueName"];
813
		#參考資料:
814
		#http://www.w3school.com.cn/php/func_mysql_fetch_array.asp => 解析取得的資料表欄位時,能夠選擇回傳含有欄位名稱與數字代表的key.
815
		#備註:
816
		#無.
817
		$sendQueryDataToVariabele=db::sendQueryDataToVariabele($conf["db::sendQueryDataToVariabele"]);
818
		unset($conf["db::sendQueryDataToVariabele"]);
819
 
820
		#如果執行異常
821
		if($sendQueryDataToVariabele["status"]==="false"){
822
 
823
			#設置連線失敗的提示
824
			$result["error"][]="檢查資料庫可否存取出錯";
825
 
826
			#設置錯誤訊息
827
			$result["error"][]=$sendQueryDataToVariabele["error"];
828
 
829
			#設置執行失敗
830
			$result["status"]="false";
831
 
832
			#回傳結果
833
			return $result;
834
 
835
			}#if end
836
 
837
		#檢查資料庫是否可以存取
838
		#函式說明:
839
		#檢查一個數值是否與陣列裏面的元素相同,找到一個相符合的元素後就會停止搜尋.
840
		#回傳結果:
841
		#$result["status"],"true"表示執行正確,"false"表示執行錯誤.
842
		#$result["founded"],"true"表示有找到相同的,"false"表示沒有找到相同的.
843
		#$result["error"],錯誤訊息
844
		#$result["function"],當前執行的函數名稱
845
		#$result["argv"],使用的參數
846
		#$result["equalVarName"],相等的變數名稱或key.
847
		#$result["equalVarValue"],相等的變數數值內容.
848
		#必填參數:
849
		#$conf["conditionElement"],字串,條件元素,要等於的元素內容.
850
		$conf["search::getEqualVar"]["conditionElement"]=$conf["dbName"];
851
		#$conf["compareElements"],字串陣列,要比對的陣列變數內容.
852
		$conf["search::getEqualVar"]["compareElements"]=$sendQueryDataToVariabele["dataContent"]["Database"];
853
		#可省略參數:
854
		#無.
855
		#參考資料:
856
		#無.
857
		#備註:
858
		#無.
859
		$getEqualVar=search::getEqualVar($conf["search::getEqualVar"]);
860
		unset($conf["search::getEqualVar"]);
861
 
862
		#如果執行失敗
863
		if($getEqualVar["status"]==="false"){
864
 
865
			#設置錯誤的提示
866
			$result["error"][]="檢查資料庫可否存取出錯";
867
 
868
			#設置錯誤訊息
869
			$result["error"][]=$sendQueryDataToVariabele["error"];
870
 
871
			#設置執行失敗
872
			$result["status"]="false";
873
 
874
			#回傳結果
875
			return $result;
876
 
877
			}#if end
878
 
879
		#如果無法存取資料庫
880
		if($getEqualVar["founded"]==="false"){
881
 
882
			#設置錯誤的提示
883
			$result["error"][]="資料庫(".$conf["dbName"].")無法存取";
884
 
885
			#設置錯誤訊息
886
			$result["error"][]=$sendQueryDataToVariabele;
887
 
888
			#設置執行失敗
889
			$result["status"]="false";
890
 
891
			#回傳結果
892
			return $result;
893
 
894
			}#if end
895
 
3 liveuser 896
		#選取資料庫
897
		#如果連線失敗
898
		if(!(mysqli_select_db($con["connectInformation"],$conf["dbName"]))){
899
 
900
			#設置連線失敗的提示
901
			$result["error"][]="選取資料庫失敗";
902
 
903
			#取得連線時的錯誤編號
904
			$result["error"][]=mysqli_connect_errno();
905
 
906
			#取得連線時的錯誤訊息
907
			$result["error"][]=mysqli_connect_error();
908
 
909
			#設置執行失敗
910
			$result["status"]="false";
911
 
912
			#回傳結果
177 liveuser 913
			return $result;
3 liveuser 914
 
915
			}#if end
916
 
917
		#取得mysqli物件
918
		$result["connectInformation"]=$con["connectInformation"];
919
 
920
		#設置執行正常
921
		$result["status"]="true";
922
 
923
		#回傳結果
924
		return $result;	 
925
 
926
		}#function dbConnect end
927
 
928
	/*
929
	#函式說明:
930
	#執行mysql指令
931
	#回傳結果::
932
	#$result["status"],"true"為執行成功;"false"為執行失敗。
933
	#$result["error"],錯誤訊息的陣列
934
	#$result["function"],當前執行的涵式
935
	#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
936
	#$result["queryConn"],mysql用來查尋的連資源. 
937
	#$result["queryString"],要執行的sql內容.
938
	#必填參數:
939
	#$conf["dbSql"],字串,要執行sql語法
940
	$conf["dbSql"]="";
941
	#可省略參數:
942
	#$conf["dbLink"],物件,mysqli物件,由mysqli_connect()回傳的物件內容,若為數值則改用賬號密碼等資訊進行連線,反之則沿用連線物件.
943
	$conf["dbLink"]="";
944
	#$conf["dbAddress"],字串,爲mysql-Server的位置。
945
	$conf["dbAddress"]=$dbAddress;
946
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號。
947
	$conf["dbAccount"]=$dbAccount; 
948
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼。
949
	#$conf["dbPassword"]=$dbPassword;
950
	#$conf["dbName"],字串,爲要連的資料庫名稱
951
	#$conf["dbName"]="";
952
	#$conf["dbPort"],字串,為連線到mysql-Server時對應的port,可省略,預設為3306.
953
	#$conf["dbPort"]="3306";
954
	#$conf["autoClose"],字串,"true"代表要自動斷線,預設為"true"會自動斷線
955
	#$conf["autoClose"]="true";
956
	#參考資料:
957
	#無.
958
	#備註:
959
	#無.
960
	*/
961
	public static function execMysqlQuery(&$conf){
962
 
963
		#初始化要回傳的內容
964
		$result=array();
965
 
966
		#取得當前執行的函數名稱
967
		$result["function"]=__FUNCTION__;
968
 
969
		#如果 $conf 不為陣列
970
		if(gettype($conf)!="array"){
971
 
972
			#設置執行失敗
973
			$result["status"]="false";
974
 
975
			#設置執行錯誤訊息
976
			$result["error"][]="\$conf變數須為陣列形態";
977
 
978
			#如果傳入的參數為 null
979
			if($conf===null){
980
 
981
				#設置執行錯誤訊息
982
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
983
 
984
				}#if end
985
 
986
			#回傳結果
987
			return $result;
988
 
989
			}#if end
990
 
991
		#檢查參數
992
		#函式說明:
993
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
994
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
995
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
996
		#$result["function"],當前執行的函式名稱.
997
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
998
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
999
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
1000
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
1001
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
1002
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
1003
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
1004
		#必填參數:
1005
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
1006
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
1007
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
1008
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("dbSql");
1009
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
1010
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
1011
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
1012
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
1013
		#可省略參數:
1014
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
1015
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
1016
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
1017
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("dbLink","dbAddress","dbAccount","dbPassword","dbName","dbPort","autoClose","mysqli");
1018
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
1019
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("object","string","string","string","string","string","string",null);
1020
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
1021
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null,null,null,null,null,"true",null);
1022
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
1023
		#$conf["arrayCountEqualCheck"][]=array();
1024
		#參考資料:
1025
		#array_keys=>http://php.net/manual/en/function.array-keys.php
1026
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
1027
		unset($conf["variableCheck::checkArguments"]);
1028
 
1029
		#如果檢查失敗
1030
		if($checkResult["status"]=="false"){
1031
 
1032
			#設置錯誤識別
1033
			$result["status"]="fasle";
1034
 
1035
			#設置錯誤訊息
1036
			$result["error"]=$checkResult;
1037
 
1038
			#回傳解果
1039
			return $result;
1040
 
1041
			}#if end
1042
 
1043
		#如果 $checkResult["status"]等於"false";
1044
		if($checkResult["passed"]==="false"){
1045
 
1046
			#設置錯誤識別
177 liveuser 1047
			$result["status"]="false";
3 liveuser 1048
 
1049
			#設置錯誤訊息
1050
			$result["error"]=$checkResult;
1051
 
1052
			#回傳解果
1053
			return $result;
1054
 
1055
			}#if end
1056
 
1057
		#如果沒有 dbLink
1058
		if(!isset($conf["dbLink"])){
1059
 
1060
			#初始化儲存mysqli物件的變數
1061
			$con="";
1062
 
1063
			#如果有指定資料庫
1064
			if(isset($conf["dbName"])){
1065
 
1066
				#函式說明:
1067
				#連線到資料庫,結果會回傳一個陣列.
1068
				#$result["status"],若連線成功則爲"true",連線失敗則爲"false".
1069
				#$result["connectInformation"],爲回傳的mysql連線資訊.
1070
				#$result["error"],錯誤訊息	.
1071
				#$result["function"],當前執行的函數名稱.
1072
				#必填參數:
1073
				$conf["db::dbConnect"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
1074
				$conf["db::dbConnect"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
1075
				$conf["db::dbConnect"]["dbName"]=$conf["dbName"];#爲要連的資料庫名稱
1076
				#可省略參數:
1077
 
1078
				#如果 $conf["dbPassword"] 有設置
1079
				if(isset($conf["dbPassword"])){
1080
 
1081
					$conf["db::dbConnect"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼。
1082
 
1083
					}#if end
1084
 
1085
				#如果有設置 $conf["dbPort"] 
1086
				if(isset($conf["dbPort"])){
1087
 
1088
					#$conf["dbPort"],字串,為連線到mysql-Server時對應的port,可省略,預設為3306.
1089
					$conf["db::dbConnect"]["dbPort"]=$conf["dbPort"];
1090
 
1091
					}#if end
1092
 
1093
				$con=db::dbConnect($conf["db::dbConnect"]);
1094
				unset($conf["db::dbConnect"]);
1095
 
1096
				#如果連線失敗
1097
				if($con["status"]=="false"){
1098
 
1099
					#設置執行失敗的訊息
1100
					$result["status"]="false";
1101
 
1102
					#紀錄錯誤訊息
1103
					$result["error"]=$con;
1104
 
1105
					#回傳結果
1106
					return $result;
1107
 
1108
					}#if end
1109
 
1110
				#儲存mysqli物件
1111
				$result["queryConn"]=$con["connectInformation"];
1112
 
177 liveuser 1113
				#解析可以取得的資料庫清單
1114
				#函式說明:
1115
				#解析 dataTableSelect($conf) 後的結果,亦即將執行sql語法後所得到的結果解析放進變數裏面
1116
				#回傳結果:
1117
				#$result["status"],執行結果"true"為成功;"false"為失敗
1118
				#$result["error"],錯誤訊息
1119
				#$result["function"],儲存當前函數名稱
1120
				#$result["dataColumnName"],為資料欄位的名稱陣列.
1121
				#$result["dataColumnName"][$i]代表第一個欄位名稱.
1122
				#$result["dataContent"],爲資料的內容陣列,第1維度的key為$conf["tableValueName"][$i],亦即第 $i+1 個欄位的名稱,若該欄位不存在,則其value為空字串;第2維度的key為第$i+1筆資料的索引.
1123
				#$result["dataCount"],爲取得的資料筆數.
1124
				#必填參數:
1125
				#$conf["sqlQueryResult"],object,爲執行sql語法所獲得的查詢結果。
1126
				$conf["db::sendQueryDataToVariabele"]["sqlQueryResult"]=$result["queryConn"];
1127
				#$conf["tableValueName"],字串陣列,爲該資料表列項目的每一項名稱,須爲陣列值,若為「array("*")」則代表所有欄位.
1128
				$conf["db::sendQueryDataToVariabele"]["tableValueName"]=array("Database");
1129
				#可省略參數:
1130
				#$conf["dbAddress"],字串,爲mysql-Server的位置,目前沒有用途.
1131
				$conf["db::sendQueryDataToVariabele"]["dbAddress"]=$dbAddress;
1132
				#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號,目前沒有用途.
1133
				$conf["db::sendQueryDataToVariabele"]["dbAccount"]=$dbAccount;
1134
 
1135
				#如果有設置 $conf["dbPassword"]
1136
				if(isset($conf["dbPassword"])){
1137
 
1138
					#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼,目前沒有用途.
1139
					$conf["db::sendQueryDataToVariabele"]["dbPassword"]=$dbPassword;
1140
 
1141
					}#if end
1142
 
1143
				#如果有設置 $conf["dbPort"]
1144
				if(isset($conf["dbPort"])){
1145
 
1146
					#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,可省略,若省略則代表使用預設的3306 port,目前沒有用途.
1147
					$conf["db::sendQueryDataToVariabele"]["dbPort"]=$conf["dbPort"];
1148
 
1149
					}#if end
1150
 
1151
				#$conf["valueName"],字串陣列,爲該資料表列項目的每一項所要對應的變數名稱,預設為欄位的名稱($conf["tableValueName"]).
1152
				#$conf["valueName"]=$conf["tableValueName"];
1153
				#參考資料:
1154
				#http://www.w3school.com.cn/php/func_mysql_fetch_array.asp => 解析取得的資料表欄位時,能夠選擇回傳含有欄位名稱與數字代表的key.
1155
				#備註:
1156
				#無.
1157
				$sendQueryDataToVariabele=db::sendQueryDataToVariabele($conf["db::sendQueryDataToVariabele"]);
1158
				unset($conf["db::sendQueryDataToVariabele"]);
1159
 
1160
				#如果連線失敗
1161
				if($sendQueryDataToVariabele["status"]==="false"){
1162
 
1163
					#設置執行失敗的訊息
1164
					$result["status"]="false";
1165
 
1166
					#紀錄錯誤訊息
1167
					$result["error"]=$sendQueryDataToVariabele;
1168
 
1169
					#回傳結果
1170
					return $result;
1171
 
1172
					}#if end
1173
 
1174
				#尋找目標資料庫是否存在
1175
				#函式說明:
1176
				#檢查一個數值是否與陣列裏面的元素相同,找到一個相符合的元素後就會停止搜尋.
1177
				#回傳結果:
1178
				#$result["status"],"true"表示執行正確,"false"表示執行錯誤.
1179
				#$result["founded"],"true"表示有找到相同的,"false"表示沒有找到相同的.
1180
				#$result["error"],錯誤訊息
1181
				#$result["function"],當前執行的函數名稱
1182
				#$result["argv"],使用的參數
1183
				#$result["equalVarName"],相等的變數名稱或key.
1184
				#$result["equalVarValue"],相等的變數數值內容.
1185
				#必填參數:
1186
				#$conf["conditionElement"],字串,條件元素,要等於的元素內容.
1187
				$conf["search::getEqualVar"]["conditionElement"]=$conf["dbName"];
1188
				#$conf["compareElements"],字串陣列,要比對的陣列變數內容.
1189
				$conf["search::getEqualVar"]["compareElements"]=$result["dataContent"]["Database"];
1190
				#可省略參數:
1191
				#無.
1192
				#參考資料:
1193
				#無.
1194
				#備註:
1195
				#無.
1196
				$getEqualVar=search::getEqualVar($conf["search::getEqualVar"]);
1197
				unset($conf["search::getEqualVar"]);
1198
 
1199
				#如果連線失敗
1200
				if($getEqualVar["status"]==="false"){
1201
 
1202
					#設置執行失敗的訊息
1203
					$result["status"]="false";
1204
 
1205
					#紀錄錯誤訊息
1206
					$result["error"]=$getEqualVar;
1207
 
1208
					#回傳結果
1209
					return $result;
1210
 
1211
					}#if end
1212
 
1213
				#如果不存在
1214
				if($getEqualVar["founded"]==="false"){
1215
 
1216
					#設置執行失敗的訊息
1217
					$result["status"]="false";
1218
 
1219
					#紀錄錯誤訊息
1220
					$result["error"][]="目標資料庫 ".$conf["dbName"]." 不存在";
1221
 
1222
					#紀錄錯誤訊息
1223
					$result["error"][]=$getEqualVar;
1224
 
1225
					#回傳結果
1226
					return $result;
1227
 
1228
					}#if end
1229
 
3 liveuser 1230
				}#if end
177 liveuser 1231
 
1232
			#反之沒有指定資料庫
3 liveuser 1233
			else{
1234
 
1235
				#連線到mysql
1236
				#函式說明:
1237
				#連線到mysql-server,會回傳一個陣列
1238
				#回傳結果:
1239
				#$result["connectStatus"],若連線成功則爲0,連線失敗則爲1。
1240
				#$result["connectInformation"],爲回傳的mysql連線資訊。
1241
				#$result["error"],爲錯誤訊息
1242
				#必填參數:
1243
				$conf["db"]["mysqlConnect"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置。
1244
				$conf["db"]["mysqlConnect"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號。
1245
				#可省略參數:
1246
 
1247
				#如果 $conf["dbPassword"] 有設置
1248
				if(isset($conf["dbPassword"])){
1249
 
1250
					$conf["db"]["mysqlConnect"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼。
1251
 
1252
					}#if end
1253
 
1254
				#如果有設置 $conf["dbPort"] 
1255
				if(isset($conf["dbPort"])){
1256
 
1257
					#$conf["dbPort"],字串,為連線到mysql-Server時對應的port,可省略,預設為3306.
1258
					$conf["db::dbConnect"]["dbPort"]=$conf["dbPort"];
1259
 
1260
					}#if end
170 liveuser 1261
 
3 liveuser 1262
				$con=db::mysqlConnect($conf["db"]["mysqlConnect"]);
1263
				unset($conf["db"]);
1264
 
1265
				#如果連線失敗
170 liveuser 1266
				if($con["status"]==="false"){
3 liveuser 1267
 
1268
					#設置執行失敗的訊息
1269
					$result["status"]="false";
1270
 
1271
					#紀錄錯誤訊息
1272
					$result["error"]=$con;
1273
 
1274
					#回傳結果
1275
					return $result;
1276
 
1277
					}#if end
1278
 
170 liveuser 1279
				#debug
177 liveuser 1280
				#var_dump(__LINE__,$con);
170 liveuser 1281
 
3 liveuser 1282
				#儲存mysqli物件
170 liveuser 1283
				$result["queryConn"]=$con["connectInformation"];
3 liveuser 1284
 
1285
				}#else end
1286
 
1287
			}#if end
1288
 
1289
		#反之存在 $conf["dbLink"]
1290
		else{
1291
 
1292
			#取得db物件
1293
			$result["queryConn"]=$conf["dbLink"];
1294
 
1295
			}#else end
1296
 
1297
		#設置sql的查詢語言
1298
		$result["queryStringOri"]=$conf["dbSql"];
1299
 
1300
		#設置sql的查詢語言
1301
		$result["queryString"]=$conf["dbSql"];
1302
 
177 liveuser 1303
		#debug
1304
		#var_dump(__LINE__,$result["queryString"]);
1305
 
3 liveuser 1306
		#進行查詢
1307
		#如果有錯誤訊息
1308
		if(!($mysqli_query=mysqli_query($result["queryConn"],$result["queryString"]))){
1309
 
1310
			#設置執行失敗的訊息
1311
			$result["status"]="false";
1312
 
1313
			#設置提示執行mysql語法失敗
1314
			$result["error"][]="執行mysql語法失敗";
1315
 
1316
			#取得錯誤訊息
1317
			$result["error"]["mysqlErrorNo"]=mysqli_errno($result["queryConn"]);
1318
			$result["error"]["mysqlErrorDetail"]=mysqli_error($result["queryConn"]);
1319
 
1320
			#回傳結果
1321
			return $result;
1322
 
1323
			}#if end
1324
 
1325
		#取得正確的mysqli_resource
1326
		$result["queryResource"]=$mysqli_query;
1327
 
1328
		#如果要自動斷線
1329
		if($conf["autoClose"]==="true"){
1330
 
1331
			#連線結束
1332
			#函式說明:
1333
			#關閉與mysql的連線,會回傳一個陣列。
1334
			#回傳結果::
1335
			#$result["status"],若連線成功則爲"true",連線失敗則爲"false".
1336
			#$result["connectInformation"],爲回傳的mysql連線資訊。
1337
			#$result["error"],爲錯誤訊息陣列.		
1338
			#必填參數:
1339
			#$conf["mysqli"],字串,mysqli物件.
1340
			$conf["db::mysqlClose"]["mysqli"]=$result["queryConn"];
1341
			$mysqlClose=db::mysqlClose($conf["db::mysqlClose"]);
1342
			unset($conf["db::mysqlClose"]);
1343
 
1344
			#如果關閉mysql連線失敗
1345
			if($mysqlClose["status"]=="false"){
1346
 
1347
				#設置執行失敗的訊息
1348
				$result["status"]="false";
1349
 
1350
				#紀錄錯誤訊息
1351
				$result["error"]=$mysqlClose;
1352
 
1353
				#回傳結果
1354
				return $result;
1355
 
1356
				}#if end
1357
 
1358
			}#if end
177 liveuser 1359
 
3 liveuser 1360
		#設置執行成功的訊息
177 liveuser 1361
		$result["status"]="true";
3 liveuser 1362
 
1363
		#回傳查詢後的結果
1364
		return $result;
1365
 
1366
		}#function execMysqlQuery end
1367
 
1368
	/*
1369
	#函式說明:
1370
	#用shell執行mysql指令.
1371
	#回傳結果::
1372
	#$result["status"],"true"為執行成功;"false"為執行失敗。
1373
	#$result["error"],錯誤訊息的陣列
1374
	#$result["function"],當前執行的涵式
1375
	#$result["queryString"],mysql查詢的語言.
1376
	#必填參數:
1377
	#$conf["fileArgu"],字串,變數__FILE__的內容.
1378
	$conf["fileArgu"]=__FILE__;
1379
	#$conf["dbSql"],字串,要執行sql語法
183 liveuser 1380
	$conf["dbSql"]="";	
3 liveuser 1381
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號。
1382
	$conf["dbAccount"]=$dbAccount; 
1383
	#可省略參數:
183 liveuser 1384
	#$conf["dbAddress"],字串,爲mysql-Server的位置,若設置為"localhost",則會忽略,預設為不指定,會嘗試透過unix domain socket來存取資料庫.
1385
	#$conf["dbAddress"]=$dbAddress;
3 liveuser 1386
	#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
1387
	#$conf["pre"]=array();
1388
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼。
1389
	#$conf["dbPassword"]=$dbPassword;
1390
	#$conf["dbName"],字串,爲要連的資料庫名稱
1391
	#$conf["dbName"]="";
1392
	#$conf["dbPort"],字串,為連線到mysql-Server時對應的port,可省略,預設為3306.
1393
	#$conf["dbPort"]="3306";
1394
	#參考資料:
1395
	#無.
1396
	#備註:
1397
	#無.
1398
	*/
1399
	public static function shell(&$conf){
1400
 
1401
		#初始化要回傳的內容
1402
		$result=array();
1403
 
1404
		#取得當前執行的函數名稱
1405
		$result["function"]=__FUNCTION__;
1406
 
1407
		#如果 $conf 不為陣列
1408
		if(gettype($conf)!="array"){
1409
 
1410
			#設置執行失敗
1411
			$result["status"]="false";
1412
 
1413
			#設置執行錯誤訊息
1414
			$result["error"][]="\$conf變數須為陣列形態";
1415
 
1416
			#如果傳入的參數為 null
1417
			if($conf===null){
1418
 
1419
				#設置執行錯誤訊息
1420
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
1421
 
1422
				}#if end
1423
 
1424
			#回傳結果
1425
			return $result;
1426
 
1427
			}#if end
1428
 
1429
		#檢查參數
1430
		#函式說明:
1431
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
1432
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1433
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
1434
		#$result["function"],當前執行的函式名稱.
1435
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
1436
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
1437
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
1438
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
1439
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
1440
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
1441
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
1442
		#必填參數:
1443
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
1444
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
1445
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
1446
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","dbSql","dbAccount");
1447
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
1448
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string");
1449
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
1450
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
1451
		#可省略參數:
1452
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
1453
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
1454
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
1455
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("pre","dbAddress","dbPassword","dbName","dbPort");
1456
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
1457
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array","string","string","string","string");
1458
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
183 liveuser 1459
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null,null,null,"3306");
3 liveuser 1460
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
1461
		#$conf["arrayCountEqualCheck"][]=array();
1462
		#參考資料:
1463
		#array_keys=>http://php.net/manual/en/function.array-keys.php
1464
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
1465
		unset($conf["variableCheck::checkArguments"]);
1466
 
1467
		#如果檢查失敗
1468
		if($checkResult["status"]=="false"){
1469
 
1470
			#設置錯誤識別
1471
			$result["status"]="false";
1472
 
1473
			#設置錯誤訊息
1474
			$result["error"]=$checkResult;
1475
 
1476
			#回傳解果
1477
			return $result;
1478
 
1479
			}#if end
1480
 
1481
		#如果 $checkResult["status"]等於"false";
1482
		if($checkResult["passed"]=="false"){
1483
 
1484
			#設置錯誤識別
1485
			$result["status"]="false";
1486
 
1487
			#設置錯誤訊息
1488
			$result["error"]=$checkResult;
1489
 
1490
			#回傳解果
1491
			return $result;
1492
 
1493
			}#if end
183 liveuser 1494
 
3 liveuser 1495
		#避免亂碼
183 liveuser 1496
		$sql="SET NAMES UTF8;"."SET CHARACTER_SET_CLIENT=utf8;"."SET CHARACTER_SET_RESULTS=utf8;".$conf["dbSql"];
3 liveuser 1497
 
1498
		#初始化參數
1499
		$argu=array();
1500
 
1501
		#精簡的參數
1502
		$argu[]=$sql;
1503
		$argu[]="|";
1504
		$argu[]="mysql";
1505
		$argu[]="-u";
183 liveuser 1506
		$argu[]=$conf["dbAccount"];
3 liveuser 1507
 
1508
		#如果有設置 $conf["dbPassword"]
1509
		if(isset($conf["dbPassword"])){
1510
 
1511
			#加上密碼參數
1512
			$argu[]="-p".$conf["dbPassword"];
1513
 
1514
			}#if end
183 liveuser 1515
 
1516
		#如果有指定 dbAddress
1517
		if(isset($conf["dbAddress"])){
1518
 
1519
			#如果不為 localhost
1520
			if($conf["dbAddress"]!=="localhost"){
3 liveuser 1521
 
183 liveuser 1522
				#加上 位置參數
1523
				$argu[]="-h".$conf["dbAddress"];
1524
 
1525
				}#if end
3 liveuser 1526
 
183 liveuser 1527
			}#if end
1528
 
3 liveuser 1529
		#如果有設置 $conf["dbName"]
1530
		if(isset($conf["dbName"])){
1531
 
1532
			#加上資料庫名稱參數
1533
			$argu[]=$conf["dbName"];
1534
 
1535
			}#if end
183 liveuser 1536
 
3 liveuser 1537
		#函式說明:
1538
		#呼叫shell執行系統命令,並取得回傳的內容.
1539
		#回傳結果:
1540
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1541
		#$result["error"],錯誤訊息陣列.
1542
		#$result["function"],當前執行的函數名稱.
1543
		#$result["argu"],使用的參數.
1544
		#$result["cmd"],執行的指令內容.
1545
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
1546
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
1547
		#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
1548
		#$result["running"],是否還在執行.
1549
		#$result["pid"],pid.
1550
		#$result["statusCode"],執行結束後的代碼.
1551
		#必填的參數
1552
		#$conf["command"],字串,要執行的指令與.
1553
		$conf["external::callShell"]["command"]="echo";
1554
		#$conf["fileArgu"],字串,變數__FILE__的內容.
183 liveuser 1555
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];
3 liveuser 1556
		#可省略參數:
1557
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
1558
		$conf["external::callShell"]["argu"]=$argu;
1559
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
1560
		#$conf["arguIsAddr"]=array();	
1561
 
1562
		#如果有參數
1563
		if(count($argu)>0){
1564
 
1565
			#$conf["thereIsShellVar"],陣列字串,指令搭配的參數"argu",若含有「\'」,則取代為「"」.每個argu參數都要有對應的元素."true"代表要置換.
1566
			$conf["external::callShell"]["thereIsShellVar"]=array();
183 liveuser 1567
 
3 liveuser 1568
			#針對每個參數
1569
			for($i=0;$i<count($argu);$i++){
1570
 
1571
				#第一個參數
1572
				if($i===0){
1573
 
1574
					#含有shell變數
1575
					$conf["external::callShell"]["thereIsShellVar"][$i]="true";
1576
 
1577
					}#if end
1578
 
1579
				#反之
1580
				else{
1581
 
1582
					#不含有shell變數
1583
					$conf["external::callShell"]["thereIsShellVar"][$i]="false";
1584
 
1585
					}#else 
1586
 
1587
				}#for end
1588
 
1589
			}#if end
1590
 
1591
		#如果有設置 pre
1592
		if(isset($conf["pre"])){
1593
 
1594
			#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
1595
			#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
1596
			#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
1597
			$conf["external::callShell"]["pre"]=$conf["pre"];
1598
 
1599
			}#if end
1600
 
1601
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
1602
		#$conf["enablePrintDescription"]="true";
1603
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
1604
		#$conf["printDescription"]="";
1605
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".
1606
		$conf["external::callShell"]["escapeshellarg"]="true";
1607
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
1608
		#$conf["username"]="";
1609
		#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
1610
		#$conf["password"]="";
1611
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
1612
		#$conf["useScript"]="";
1613
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
1614
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
1615
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
1616
		#$conf["inBackGround"]="";
1617
		#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
1618
		#$conf["getErr"]="false";
1619
		#$conf["doNotRun"],字串,"true"代表不執行指令,預設為"false"會執行指令.
1620
		$conf["external::callShell"]["doNotRun"]="true";
1621
		#備註:
1622
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
1623
		#參考資料:
1624
		#exec=>http://php.net/manual/en/function.exec.php
1625
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
1626
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
1627
		$callShell=external::callShell($conf["external::callShell"]);
1628
		unset($conf["external::callShell"]);
1629
 
1630
		#debug
183 liveuser 1631
		#var_dump(__LINE__,$callShell);
3 liveuser 1632
 
1633
		#如果檢查參數作業出錯
1634
		if($callShell["status"]=="false"){
1635
 
1636
			#設置執行錯誤識別
1637
			$result["status"]="false";
1638
 
1639
			#設置錯誤訊息
1640
			$result["error"]=$callShell;
1641
 
1642
			#回傳結果
1643
			return $result;
1644
 
1645
			}#if end
1646
 
1647
		#函式說明:
1648
		#連線到 unixDomainSockServer 提供的 unix domain socket.
1649
		#回傳結果:
1650
		#$result["status"],"true"代表執行正常;"false"代表執行不正常.
1651
		#$result["error"],錯誤訊息陣列.
1652
		#$result["function"],當前執行的函式名稱.
1653
		#$result["content"],取得的回應.
1654
		#必填參數:
1655
		#$conf["sock"],字串,要連線的unix domain socket.
1656
		$conf["sock::unixDomainSockClient"]["sock"]=qbpwcf_usock_path;
1657
		#可省略參數:
1658
		#$conf["id"],字串,取得的id,若無此值,則會得到新的數值.
1659
		#$conf["id"]="";
1660
		#$conf["cmd"],字串,要執行的指令,當$conf["id"]參數合法時,才會執行.
1661
		$conf["sock::unixDomainSockClient"]["cmd"]=$callShell["escape"]["cmd"];
1662
		#$conf["param"],參數陣列.
1663
		$conf["sock::unixDomainSockClient"]["param"]=$callShell["escape"]["argu"];
1664
		#$conf["escaped"],字串,param參數是否已經escaped了,預設為"false",反之為"true".
1665
		$conf["sock::unixDomainSockClient"]["escaped"]="true";
1666
		#$conf["clear"],字串,設為"true"代表要清除過期的用戶連線.
1667
		#$conf["clear"]="true";
1668
		#參考資料:
1669
		#http://php.net/manual/en/function.stream-socket-client.php
1670
		#http://php.net/manual/en/function.stream-get-contents.php
1671
		#備註:
1672
		#無.
1673
		$paramsOfUnixDomainSockClient=$conf["sock::unixDomainSockClient"];
1674
		$unixDomainSockClient=sock::unixDomainSockClient($conf["sock::unixDomainSockClient"]);
1675
		unset($conf["sock::unixDomainSockClient"]);
1676
 
1677
		#如果執行失敗
1678
		if($unixDomainSockClient["status"]==="false"){
1679
 
1680
			#設置執行錯誤識別
1681
			$result["status"]="false";
1682
 
1683
			#設置錯誤訊息
1684
			$result["error"]=$unixDomainSockClient;
1685
 
1686
			#回傳結果
1687
			return $result;
1688
 
1689
			}#if end
1690
 
1691
		#取得json回應
1692
		$jsonRes=json_decode($unixDomainSockClient["content"]);
1693
 
1694
		#如果執行失敗
1695
		if($jsonRes===null){
1696
 
1697
			#設置執行錯誤識別
1698
			$result["status"]="false";
1699
 
1700
			#設置錯誤訊息
1701
			$result["error"]=$unixDomainSockClient;
1702
 
1703
			#回傳結果
1704
			return $result;
1705
 
1706
			}#if end
1707
 
1708
		#如果沒有產生新id
1709
		if(!isset($jsonRes->id)){
1710
 
1711
			#設置執行錯誤識別
1712
			$result["status"]="false";
1713
 
1714
			#設置錯誤訊息
1715
			$result["error"]=$unixDomainSockClient;
1716
 
1717
			#回傳結果
1718
			return $result;
1719
 
1720
			}#if end
1721
 
1722
		#用新的id再傳送一次要求給 qbpwcf_usock_path
183 liveuser 1723
		$paramsOfUnixDomainSockClient["id"]=$jsonRes->id;
3 liveuser 1724
		$unixDomainSockClient=sock::unixDomainSockClient($paramsOfUnixDomainSockClient);
1725
		unset($paramsOfUnixDomainSockClient);
1726
 
1727
		#var_dump($unixDomainSockClient);
1728
 
1729
		#如果執行失敗
1730
		if($unixDomainSockClient["status"]==="false"){
1731
 
1732
			#設置執行錯誤識別
1733
			$result["status"]="false";
1734
 
1735
			#設置錯誤訊息
1736
			$result["error"]=$unixDomainSockClient;
1737
 
1738
			#回傳結果
1739
			return $result;
1740
 
1741
			}#if end
1742
 
1743
		#執行正常
1744
		$result["status"]="true";
1745
 
1746
		#設置執行的結果
1747
		$result["content"]=$unixDomainSockClient;
1748
 
1749
		#回傳結果
1750
		return $result;
1751
 
1752
		}#function shell end
1753
 
1754
	/*
1755
	#函式說明:
1756
	#建立資料庫,會回傳一個陣列。
1757
	#回傳結果:
1758
	#$result["status"],成功爲"true",失敗爲"false".
1759
	#$result["error"],錯誤訊息.
1760
	#$result["function"],當前執行的函數名稱.
1761
	#必填參數:
1762
	#$conf["dbAddress"],字串,爲mysql-Server的位置。
1763
	$conf["dbAddress"]=$dbAddress;
1764
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號。
1765
	$conf["dbAccount"]=$dbAccount;
1766
	#$conf["newDatabaseName"],字串,爲要新增的資料庫名稱.
1767
	$conf["newDatabaseName"]="";
1768
	#可省略參數: 
1769
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼。
1770
	#$conf["dbPassword"]=$dbPassword;
1771
	#$conf["dbName"],字串,爲要連的資料庫名稱
1772
	#$conf["dbName"]="";
177 liveuser 1773
	#$conf["dbPort"],字串,為連線到mysql-Server時對應的port,預設為3306.
1774
	#$conf["dbPort"]="3306";
3 liveuser 1775
	#參考資料:
1776
	#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/
1777
	#備註:
1778
	#無.
1779
	*/
1780
	public static function createDatabase($conf){
1781
 
1782
		#初始化錯誤訊息 
1783
		$result=array();
1784
 
1785
		#取得當前執行的函數名稱
1786
		$result["function"]=__FUNCTION__;
1787
 
1788
		#如果 $conf 不為陣列
1789
		if(gettype($conf)!="array"){
1790
 
1791
			#設置執行失敗
1792
			$result["status"]="false";
1793
 
1794
			#設置執行錯誤訊息
1795
			$result["error"][]="\$conf變數須為陣列形態";
1796
 
1797
			#如果傳入的參數為 null
1798
			if($conf==null){
1799
 
1800
				#設置執行錯誤訊息
1801
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
1802
 
1803
				}#if end
1804
 
1805
			#回傳結果
1806
			return $result;
1807
 
1808
			}#if end
1809
 
1810
		#檢查參數
1811
		#函式說明:
1812
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
1813
		#回傳結果:
1814
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
1815
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
1816
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
1817
		#必填參數:
1818
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
177 liveuser 1819
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("dbAddress","dbPassword","newDatabaseName");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
3 liveuser 1820
		#可省略參數:
177 liveuser 1821
		$conf["variableCheck"]["isexistMuti"]["variableType"]=array("string","string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
3 liveuser 1822
		#$conf["variableCheck"]["isexistMuti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
1823
		#備註:
1824
		#功能與checkExistAndType函式相同
1825
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
1826
		unset($conf["variableCheck"]["isexistMuti"]);
1827
 
1828
		#如果 $checkResult["passed"] 等於 "fasle"
1829
		if($checkResult["passed"]=="false"){
1830
 
1831
			#設置錯誤識別
1832
			$result["status"]="false";
1833
 
1834
			#設置錯誤訊息
1835
			$result["error"]=$checkResult;
1836
 
1837
			#回傳結果
1838
			return $result;
1839
 
1840
			}#if end
1841
 
1842
		#建立資料庫的sql語法
1843
		$sql="CREATE DATABASE ".$conf["newDatabaseName"]."  CHARACTER SET='utf8' COLLATE='utf8_unicode_ci'";
1844
 
1845
		#函式說明:
1846
		#執行mysql指令
1847
		#回傳結果::
1848
		#$result["status"],"true"為執行成功;"false"為執行失敗。
1849
		#$result["error"],錯誤訊息的陣列
1850
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
1851
		#$result["queryString"],mysql查詢的語言
1852
		#查詢號的解果,需要解析。
1853
		#必填參數:
1854
		$conf["db"]["execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
1855
		$conf["db"]["execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
1856
		$conf["db"]["execMysqlQuery"]["dbSql"]=$sql;#要執行sql語法
1857
		#可省略參數: 
1858
 
1859
		#如果 $conf["dbPassword"] 有設定
1860
		if(isset($conf["dbPassword"])){
1861
 
1862
			$conf["db"]["execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
1863
 
1864
			}#if end
1865
 
1866
		#如果 $conf["dbPort"] 有設定
1867
		if(isset($conf["dbPort"])){
1868
 
1869
			#$conf["dbPort"],字串,為連線到mysql-Server時對應的port,可省略,預設為3306.
1870
			$conf["db"]["execMysqlQuery"]["dbPort"]=$conf["dbPort"];
1871
 
1872
			}#if end
1873
 
1874
		$db["execMysqlQuery"]=db::execMysqlQuery($conf["db"]["execMysqlQuery"]);
1875
		unset($conf["db"]["execMysqlQuery"]);
1876
 
1877
		#如果 $db["execMysqlQuery"]["status"] 等於 "false"
1878
		if($db["execMysqlQuery"]["status"]=="false"){
1879
 
1880
			#設置錯誤識別
1881
			$result["status"]="false";
1882
 
1883
			#設置錯誤訊息
1884
			$result["error"]=$db["execMysqlQuery"];
1885
 
1886
			#回傳結果
1887
			return $result;
1888
 
1889
			}#if end
1890
 
1891
		#執行道這邊代表執行正確
1892
		$result["status"]="true";
1893
 
1894
		#回傳結果
1895
		return $result;
1896
 
1897
		}#function createDatabase end
1898
 
1899
	/*
1900
	#函式說明:
1901
	#建立資料表,會回傳一個陣列。
1902
	#回傳結果:
1903
	#$result["status"],若成功則爲"true",失敗則爲"false"。
1904
	#$result["error"],錯誤訊息的陣列。
1905
	#$result["sql"],要執行的sql語法。
1906
	#$result["function"],當前執行的函數名稱.
1907
	#必填參數:
1908
	#$conf["dbAddress"],字串,爲mysql-Server的位置
1909
	$conf["dbAddress"]=$dbAddress;
1910
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號
1911
	$conf["dbAccount"]=$dbAccount;
1912
	#$conf["selectedDataBaseName"],字串,要選取的資料庫名稱	
1913
	$conf["selectedDataBaseName"]=$dbName;
1914
	#$conf["newDataTableName"],字串,爲要新增的資料表名稱.
1915
	$conf["newDataTableName"]="";
1916
	#$conf["newDataTableColmunName"],字串,為新資料表的欄位名稱.
1917
	$conf["newDataTableColmunName"]=array("id","lastUpdatedTime");
1918
	#$conf["newDataTableColmunType"],字串陣列,為新資料表的欄位儲存的型態,常見的有:int,用來儲存整數;double,用來儲存有小數點的數值;timestamp,用來儲存時間;char,用來儲存任何東西,儲存成字元
1919
	$conf["newDataTableColmunType"]=array("int","timestamp");
1920
	#$conf["newDataTableColmunDefault"],字串陣列,為該欄位的預設值,若為currentTime則為當前時間;若為updatedCurrentTime則為初始為當前時間,之後每更動一次就更新為當次時間;若為null則代表空值;若為""則為不設定;以外的內容視為指定的數值.
1921
	$conf["newDataTableColmunDefault"]=array("","updatedCurrentTime");
1922
	#$conf["newDataTableColmunLength"],字串陣列,為新資料表的欄位儲存的長度,""代表不指定長度.
1923
	$conf["newDataTableColmunLength"]=array("","");
1924
	#$conf["newDataTableColmunNull"],字串陣列,為新資料表的欄位是否可為NULL.若為no則代表不能為null;若為yes則代表可以為null.
177 liveuser 1925
	$conf["newDataTableColmunNull"]=array("no","no","no","no");	
1926
	#$conf["newDataTableColmunAutoAdd"],字串陣列,"true"為新資料表的欄位自動+1;反之設為""即可.
1927
	$conf["newDataTableColmunAutoAdd"]=array("true","","","");
3 liveuser 1928
	#$conf["newDataTableColmunKeyType"],字串陣列,為該欄位的鍵屬性:primary key代表主鍵;留"",代表不指定。
177 liveuser 1929
	$conf["newDataTableColmunKeyType"]=array("primary key","","","");
3 liveuser 1930
	#可省略參數:
1931
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼.
1932
	#$conf["dbPassword"]=$dbPassword;
1933
	#$conf["dbPort"],字串,為連線到mysql-Server時對應的port,可省略,預設為3306.
1934
	#$conf["dbPort"]="3306";
1935
	#參考資料:
1936
	#無.
1937
	#備註:
1938
	#無.
1939
	*/
1940
	public static function createDataTable($conf){
1941
 
1942
		#初始化要回傳的結果
1943
		$result=array();
1944
 
1945
		#取得當前執行的函數名稱
1946
		$result["function"]=__FUNCTION__;
1947
 
1948
		#如果 $conf 不為陣列
1949
		if(gettype($conf)!="array"){
1950
 
1951
			#設置執行失敗
1952
			$result["status"]="false";
1953
 
1954
			#設置執行錯誤訊息
1955
			$result["error"][]="\$conf變數須為陣列形態";
1956
 
1957
			#如果傳入的參數為 null
1958
			if($conf==null){
1959
 
1960
				#設置執行錯誤訊息
1961
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
1962
 
1963
				}#if end
1964
 
1965
			#回傳結果
1966
			return $result;
1967
 
1968
			}#if end
1969
 
1970
		#函式說明:
1971
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
1972
		#回傳結果:
1973
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
1974
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
1975
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
1976
		#必填參數:
1977
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
1978
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("dbAddress","dbAccount","selectedDataBaseName","newDataTableName","newDataTableColmunName","newDataTableColmunType","newDataTableColmunLength","newDataTableColmunDefault","newDataTableColmunNull","newDataTableColmunAutoAdd","newDataTableColmunKeyType");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
1979
		#可省略參數:
1980
		#$conf["variableType"]=array();#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
1981
		#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
1982
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
1983
		unset($conf["variableCheck"]["isexistMuti"]);
1984
 
1985
		#如果檢查動作不正常
1986
		if($checkResult["status"]=="false"){
1987
 
1988
			#設置執失敗訊息
1989
			$result["status"]="false";
1990
 
1991
			#設置錯誤訊息
1992
			$result["error"]=$checkResult;
1993
 
1994
			#回傳錯誤訊息
1995
			return $result;
1996
 
1997
			}#if end
1998
 
1999
		#如果檢查不通過
2000
		if($checkResult["passed"]=="false"){
2001
 
2002
			#設置執失敗訊息
2003
			$result["status"]="false";
2004
 
2005
			#設置錯誤訊息
2006
			$result["error"]=$checkResult;
2007
 
2008
			#回傳錯誤訊息
2009
			return $result;
2010
 
2011
			}#if end
2012
 
2013
		#建立資料表的語法
2014
		$sql="create table ".$conf["selectedDataBaseName"].".".$conf["newDataTableName"];
2015
 
2016
		#加上指定欄位內容的開頭
2017
		$sql=$sql."(";
2018
 
2019
		#針對每個欄位
2020
		for($i=0;$i<count($conf["newDataTableColmunName"]);$i++){
2021
 
2022
			#接上欄位名稱
2023
			$sql=$sql.$conf["newDataTableColmunName"][$i];
2024
 
2025
			#接上欄位儲存型態
2026
			$sql=$sql." ".$conf["newDataTableColmunType"][$i];
2027
 
2028
			#如果有設定資料長度
2029
			if($conf["newDataTableColmunLength"][$i]!=""){
2030
 
2031
				#接上欄位儲存長度
2032
				$sql=$sql." (".$conf["newDataTableColmunLength"][$i].")";
2033
 
2034
				}#if end
2035
 
2036
			#如果有設定值
2037
			if($conf["newDataTableColmunDefault"][$i]!=""){
2038
 
2039
				switch($conf["newDataTableColmunDefault"][$i]){
2040
 
2041
					#如果設為 currentTime
2042
					case "currentTime":
2043
 
2044
						#設定語法
2045
						$sql=$sql." default CURRENT_TIMESTAMP";
2046
 
2047
						#跳出switch
2048
						break;
2049
 
2050
					#如果設為updatedCurrentTime
2051
					case "updatedCurrentTime":
2052
 
2053
						#設定語法
2054
						$sql=$sql." default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP";
2055
 
2056
						#跳出switch
2057
						break;
2058
 
2059
					#如果設為 null
2060
					case "null":
2061
 
2062
						#設定語法
2063
						$sql=$sql." default null";
2064
 
2065
						#跳出switch
2066
						break;
2067
 
2068
					#如果不為以上數值
2069
					default :
2070
 
2071
						#設定語法
2072
						$sql=$sql." default ".$conf["newDataTableColmunDefault"][$i];
2073
 
2074
						#跳出switch
2075
						break;
2076
 
2077
					}#switch end
2078
 
2079
				}#if end
2080
 
2081
			#如果有設定不能為NULL
2082
			if($conf["newDataTableColmunNull"][$i]=="no"){
2083
 
2084
				$sql=$sql." NOT NULL";
2085
 
2086
				}#if end
2087
 
2088
			#如果有設定要自動加1
2089
			if($conf["newDataTableColmunAutoAdd"][$i]=="true"){
2090
 
2091
				#加上自動加1的語句
2092
				$sql=$sql." auto_increment";
2093
 
2094
				}#if end
2095
 
2096
			#如果有設定鍵的屬性
2097
			if($conf["newDataTableColmunKeyType"][$i]!=""){
2098
 
2099
				$sql=$sql." ".$conf["newDataTableColmunKeyType"][$i];
2100
 
2101
				}#if end
2102
 
2103
			#如果不是最後一個欄位
2104
			if($i!=count($conf["newDataTableColmunName"])-1){
2105
 
2106
				#加上逗號
177 liveuser 2107
				$sql=$sql.",";
3 liveuser 2108
 
2109
				}#if end
2110
 
2111
			}#for end
2112
 
2113
		#加上指定欄位內容的結束
2114
		$sql=$sql.") DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ;";
2115
 
2116
		#取得sql語法
2117
		$result["sql"]=$sql;
2118
 
2119
		#var_dump($sql);
2120
 
2121
		#函式說明:
2122
		#回傳結果::
2123
		#$result["status"],"true"為執行成功;"false"為執行失敗。
2124
		#$result["error"],錯誤訊息的陣列
2125
		#查詢號的解果,需要解析。
2126
		#必填參數:
2127
		$conf["db"]["execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
2128
		$conf["db"]["execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
2129
		$conf["db"]["execMysqlQuery"]["dbSql"]=$sql;#要執行sql語法
2130
		#可省略參數: 
2131
 
2132
		#如果有設定密碼
2133
		if(isset($conf["dbPassword"])){
2134
 
2135
			$conf["db"]["execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
2136
 
2137
			}#if end
2138
 
2139
		#如果 $conf["dbPort"] 有設定
2140
		if(isset($conf["dbPort"])){
2141
 
2142
			#$conf["dbPort"],字串,為連線到mysql-Server時對應的port,可省略,預設為3306.
2143
			$conf["db"]["execMysqlQuery"]["dbPort"]=$conf["dbPort"];
2144
 
2145
			}#if end
2146
 
2147
		$queryResult=db::execMysqlQuery($conf["db"]["execMysqlQuery"]);
2148
		unset($conf["db"]["execMysqlQuery"]);
2149
 
2150
		#如果執行 sql 失敗
2151
		if($queryResult["status"]=="false"){
2152
 
2153
			#設置執行失敗訊息
2154
			$result["status"]="false";
2155
 
2156
			#設置錯誤訊息
2157
			$result["error"]=$queryResult["error"];
2158
 
177 liveuser 2159
			#回傳結果
3 liveuser 2160
			return $result;
2161
 
2162
			}#if end
2163
 
2164
		#設置執成功訊息
2165
		$result["status"]="true";
2166
 
2167
		#回傳結果
2168
		return $result;
2169
 
2170
		}#function createDataTable end
2171
 
2172
	/*
2173
	#函式說明:
2174
	#新增資料表的欄位
2175
	#回傳結果:
2176
	#$result["status"],"true",代表執行成功;"false"代表執行失敗
2177
	#$result["error"],錯誤訊息陣列
2178
	#$result["sql"],執行的sql內容
2179
	#$result["function"],當前執行的函數名稱
2180
	#必填參數:
2181
	#$conf["dbAddress"],字串,爲mysql-Server的位置.
2182
	$conf["dbAddress"]=$dbAddress;
2183
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號.
2184
	$conf["dbAccount"]=$dbAccount;#爲用於連入mysql-Server時要使用的帳號.
2185
	#$conf["selectedDataBaseName"],字串,爲目標資料表所屬的資料庫.
2186
	$conf["selectedDataBaseName"]="";
2187
	#$conf["selectedDataTableName"],字串,爲目標資料表所屬的資料庫.
2188
	$conf["selectedDataTableName"]="";
2189
	#$conf["addedColumnName"],字串,要增加的欄位名稱.
2190
	$conf["addedColumnName"]="";
2191
	#$conf["newDataTableColmunType"],字串,為新資料表的欄位儲存的型態,常見的有:#int,用來儲存整數.#double,用來儲存有小數點的數值.#timestamp,用來儲存時間.#varchar,最多可以儲存65535個字元,請記得使用$conf["newDataTableColmunLength"]參數指定長度.#char,用來儲存任何東西,儲存成字元,最大長限制為255.#tinytext,儲存長度限制為255,根據實際使用大小來調整儲存大小.#text,儲存大量文字,不能當索引鍵.
2192
	$conf["newDataTableColmunType"]="char";
2193
	#可省略參數: 
2194
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
2195
	#$conf["dbPassword"]=$dbPassword;
2196
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,預設為3306.
2197
	#$conf["dbPort"]="3306";
2198
	#$conf["newDataTableColmunLength"],字串,為新資料表的欄位儲存的長度.
2199
	#$conf["newDataTableColmunLength"]="";
2200
	#$conf["newDataTableColmunDefault"],字串,為該欄位的預設值.#currentTime,當前時間.#updatedCurrentTime,初始為當前時間,之後每更動一次就更新為當次時間.#null,代表空值.#以外的內容視為指定的數值.
2201
	#$conf["newDataTableColmunDefault"]="";
2202
	#$conf["newDataTableColmunNotNull"],字串,為新資料表的欄位不可為NULL.#"true"代表不能為null.#"false"代表可以為null.
2203
	#$conf["newDataTableColmunNotNull"]="true";#
2204
	#$conf["newDataTableColmunAutoAdd"],字串,為新資料表的欄位是否自動+1
2205
	#$conf["newDataTableColmunAutoAdd"]="true";
2206
	#$conf["newDataTableColmunKeyType"],字串,為該欄位的鍵屬性:"primary key"爲主鍵、"index"爲索引鍵、"foreign key"爲外鍵
2207
	#$conf["newDataTableColmunKeyType"]="primary key";
2208
	#$conf["foreignDb"]="";#外鍵參考的資料庫,預設為$conf["selectedDataBaseName"].
2209
	#$conf["foreignDb"]=$conf["selectedDataBaseName"];
2210
	#$conf["foreignTable"],字串,外鍵參考的資料表
2211
	#$conf["foreignTable"]="";
2212
	#$conf["foreignTableColumn"],字串,外鍵參考的資料表欄位
2213
	#$conf["foreignTableColumn"]="";
2214
	#$conf["onUpdateAction"],字串,當外鍵參考的欄位資料修改時,外鍵要如何回應?"CASCADE"會將有所關聯的紀錄行也會進行刪除或修改。"SET NULL"代表會將有所關聯的紀錄行設定成 NULL。"NO ACTION"代表有存在的關聯紀錄行時,會禁止父資料表的刪除或修改動作。
2215
	#$conf["onUpdateAction"]="CASCADE";#
2216
	#$conf["onDeleteAction"],字串,當外鍵參考的欄位資料移除時,外鍵要如何回應?"CASCADE"會將有所關聯的紀錄行也會進行刪除或修改。"SET NULL"代表會將有所關聯的紀錄行設定成 NULL。"NO ACTION"代表有存在的關聯紀錄行時,會禁止父資料表的刪除或修改動作。
2217
	#$conf["onDeleteAction"]="SET NULL";	
2218
	#$conf["comment"],字串,欄位的註解,預設不使用.
2219
	#$conf["comment"]="";
2220
	#參考資料:
2221
	#儲存型態=>https://mariadb.com/kb/en/data-types/
2222
	#備註:
2223
	#無.
2224
	*/
2225
	public static function addColumn(&$conf){
2226
 
2227
		#初始化要回傳的結果
2228
		$result=array();
2229
 
2230
		#記錄當前執行的函數名稱
2231
		$result["function"]=__FUNCTION__;
2232
 
2233
		#如果 $conf 不為陣列
2234
		if(gettype($conf)!="array"){
2235
 
2236
			#設置執行失敗
2237
			$result["status"]="false";
2238
 
2239
			#設置執行錯誤訊息
2240
			$result["error"][]="\$conf變數須為陣列形態";
2241
 
2242
			#如果傳入的參數為 null
2243
			if($conf==null){
2244
 
2245
				#設置執行錯誤訊息
2246
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
2247
 
2248
				}#if end
2249
 
2250
			#回傳結果
2251
			return $result;
2252
 
2253
			}#if end
2254
 
2255
		#檢查參數
2256
		#函式說明:
2257
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
2258
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2259
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
2260
		#$result["function"],當前執行的函式名稱.
2261
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
2262
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
2263
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
2264
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
2265
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
2266
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
2267
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
2268
		#必填參數:
2269
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
2270
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
2271
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
2272
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("dbAddress","dbAccount","selectedDataBaseName","selectedDataTableName","addedColumnName");
2273
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
2274
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string","string","string");
2275
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
2276
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
2277
		#可省略參數:
2278
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
2279
		#$conf["canBeEmptyString"]="false";
2280
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
2281
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("dbPassword","dbPort","newDataTableColmunType","newDataTableColmunLength","newDataTableColmunDefault","newDataTableColmunNotNull","newDataTableColmunAutoAdd","newDataTableColmunKeyType","foreignDb","foreignTable","foreignTableColumn","onUpdateAction","onDeleteAction","comment");
2282
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
2283
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string","string","string","string","string","string","string","string","string","string","string","string");
2284
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
2285
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null,null,null,null,null,null,null,"\$conf[\"selectedDataBaseName\"]",null,null,null,null,null);
2286
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
2287
		#$conf["arrayCountEqualCheck"][]=array();
2288
		#參考資料:
2289
		#array_keys=>http://php.net/manual/en/function.array-keys.php
2290
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
2291
		unset($conf["variableCheck::checkArguments"]);
2292
 
2293
		#如果檢查過程有錯
2294
		if($checkResult["status"]=="false"){
2295
 
2296
			#設置執行失敗的訊息
2297
			$result["status"]="false";
2298
 
2299
			#設置錯誤訊息
2300
			$result["error"]=$checkResult;
2301
 
2302
			#回傳結果
2303
			return $result;
2304
 
2305
			}#if end
2306
 
2307
		#如果檢查不通過
2308
		if($checkResult["passed"]=="false"){
2309
 
2310
			#設置執行失敗的訊息
2311
			$result["status"]="false";
2312
 
2313
			#設置錯誤訊息
2314
			$result["error"]=$checkResult;
2315
 
2316
			#回傳結果
2317
			return $result;
2318
 
2319
			}#if end
2320
 
2321
		#組合sql語言
2322
		$sql="alter table `".$conf["selectedDataTableName"]."` add `".$conf["addedColumnName"]."`";
2323
 
2324
		#接上欄位儲存型態
2325
		$sql=$sql." ".$conf["newDataTableColmunType"];
2326
 
2327
		#如果資料形態爲 "double、float"
2328
		if($conf["newDataTableColmunType"]=="double" || $conf["newDataTableColmunType"]=="float" ){
2329
 
2330
			#則取消資料長度的限制
2331
			unset($conf["newDataTableColmunLength"]);
2332
 
2333
			}#if end	
2334
 
2335
		#如果有設定資料長度,且資料儲存型態不為 tinytext 與 text
2336
		if(isset($conf["newDataTableColmunLength"]) && $conf["newDataTableColmunType"]!="tinytext" && $conf["newDataTableColmunType"]!="text"){
2337
 
2338
			#接上欄位儲存長度
2339
			$sql=$sql." (".$conf["newDataTableColmunLength"].")";
2340
 
2341
			}#if end
2342
 
2343
		#如果資料形態不爲 "double、float、"
2344
		if($conf["newDataTableColmunType"]!="double" && $conf["newDataTableColmunType"]!="float" && $conf["newDataTableColmunType"]!="int"){
2345
 
2346
			#指定欄CHARACTER SET爲utf8,COLLATE爲utf8_unicode_ci
2347
			$sql=$sql." CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci'";
2348
 
2349
			}#if end
2350
 
2351
		#如果有設定預設值
2352
		if(isset($conf["newDataTableColmunDefault"])){
2353
 
2354
			#如果 $conf["newDataTableColmunType"] 不等於 "tinytext" 也不等於 "text"
2355
			if($conf["newDataTableColmunType"]!="tinytext" && $conf["newDataTableColmunType"]!="text"){
2356
 
2357
				#根據 $conf["newDataTableColmunDefault"] 的數值內容
2358
				switch($conf["newDataTableColmunDefault"]){
2359
 
2360
					#如果設為 currentTime
2361
					case "currentTime":
2362
 
2363
						#設定語法
2364
						$sql=$sql." default CURRENT_TIMESTAMP";
2365
 
2366
						#跳出switch
2367
						break;
2368
 
2369
					#如果設為updatedCurrentTime
2370
					case "updatedCurrentTime":
2371
 
2372
						#設定語法
2373
						$sql=$sql." default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP";
2374
 
2375
						#跳出switch
2376
						break;
2377
 
2378
					#如果設為 null
2379
					case "null":
2380
 
2381
						#設定語法
2382
						$sql=$sql." default null";
2383
 
2384
						#跳出switch
2385
						break;
2386
 
2387
					#如果不為以上數值
2388
					default :
2389
 
2390
						#設定語法
2391
						$sql=$sql." default '".$conf["newDataTableColmunDefault"]."'";
2392
 
2393
						#跳出switch
2394
						break;
2395
 
2396
					}#switch end
2397
 
2398
				}#if end
2399
 
2400
			}#if end
2401
 
2402
		#如果有設定不能為NUL
2403
		if(isset($conf["newDataTableColmunNotNull"])){
2404
 
2405
			#如果 $conf["newDataTableColmunNotNull"] 等於 "true"
2406
			if($conf["newDataTableColmunNotNull"]=="true"){
2407
 
2408
				$sql=$sql." NOT NULL";
2409
 
2410
				}#if end
2411
 
2412
			}#if end
2413
 
2414
			#如果有設定要自動加1
2415
			if(isset($conf["newDataTableColmunAutoAdd"])){
2416
 
2417
				#如果 $conf["newDataTableColmunAutoAdd"] 設為 "true"
2418
				if($conf["newDataTableColmunAutoAdd"]=="true"){
2419
 
2420
					#加上自動加1的語句
2421
					$sql=$sql." auto_increment";
2422
 
2423
					}#if end
2424
 
2425
				}#if end
2426
 
2427
		#如果有設定註解
2428
		if(isset($conf["comment"])){
2429
 
2430
			#設定其註解
2431
			$sql=$sql." COMMENT '".$conf["comment"]."' ";
2432
 
2433
			}#if end		
2434
 
2435
		#如果有設定鍵的屬性
2436
		if(isset($conf["newDataTableColmunKeyType"])){
2437
 
2438
			#如果爲 primary key 
2439
			if($conf["newDataTableColmunKeyType"]=="primary key"){
2440
 
2441
				#設定其鍵值
2442
				$sql=$sql." ".$conf["newDataTableColmunKeyType"];
2443
 
2444
				}#if end
2445
 
2446
			}#if end
2447
 
2448
		#執行sql語法
2449
		#函式說明:
2450
		#執行mysql指令
2451
		#回傳結果::
2452
		#$result["status"],"true"為執行成功;"false"為執行失敗。
2453
		#$result["error"],錯誤訊息的陣列
2454
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
2455
		#$result["queryString"],mysql查詢的語言
2456
		#查詢號的解果,需要解析。
2457
		#必填參數:
2458
		$conf["db"]["execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
2459
		$conf["db"]["execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
2460
		$conf["db"]["execMysqlQuery"]["dbSql"]=$sql.";";#要執行sql語法
2461
		#可省略參數:
2462
 
2463
		#如果 $conf["dbPassword"] 有設定
2464
		if(isset($conf["dbPassword"])){
2465
 
2466
			#設定其密碼
2467
			$conf["db"]["execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
2468
 
2469
			}#if end
2470
 
2471
		$conf["db"]["execMysqlQuery"]["dbName"]=$conf["selectedDataBaseName"];#為是否要指定資料庫,預設不指定.
2472
 
2473
		#如果有設定 $conf["dbPort"]	
2474
		if(isset($conf["dbPort"])){
2475
 
2476
			#設定 $conf["dbPort"]
2477
			$conf["db"]["execMysqlQuery"]["dbPort"]=$conf["dbPort"];
2478
 
2479
			}#if end			
2480
 
2481
		$queryResult=db::execMysqlQuery($conf["db"]["execMysqlQuery"]);
2482
		unset($conf["db"]["execMysqlQuery"]);
2483
 
2484
		#如果有錯誤
2485
		if($queryResult["status"]=="false"){
2486
 
2487
			#設置錯誤訊息
2488
			$result["status"]="false";
2489
 
2490
			#設置錯誤提示
2491
			$result["error"]=$queryResult;
2492
 
2493
			#回傳結果
2494
			return $result;
2495
 
2496
			}#if end
2497
 
2498
		#取得執行的sql語法
2499
		$result["sql"][]=$queryResult["queryString"];
2500
 
2501
		#如果 $conf["newDataTableColmunKeyType"] 存在
2502
		if(isset($conf["newDataTableColmunKeyType"])){
2503
 
2504
			#如果爲 index
2505
			if($conf["newDataTableColmunKeyType"]=="index"){
2506
 
2507
				#函式說明:
2508
				#新增資料表的欄位
2509
				#回傳結果:
2510
				#$result["status"],"true",代表執行成功;"false"代表執行失敗.
2511
				#$result["function"],當前執行的函數名稱.
2512
				#$result["error"],錯誤訊息陣列.
2513
				#$result["sql"],執行的sql字串.
2514
				#必填參數:
2515
				$conf["db::setColumnIndex"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
2516
				$conf["db::setColumnIndex"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
2517
				$conf["db::setColumnIndex"]["selectedDataBaseName"]=$conf["selectedDataBaseName"];#爲目標資料表所屬的資料庫
2518
				$conf["db::setColumnIndex"]["selectedDataTableName"]=$conf["selectedDataTableName"];#爲目標資料表所屬的資料庫
2519
				$conf["db::setColumnIndex"]["indexedColumnName"]=$conf["addedColumnName"];#要設爲index的欄位名稱
2520
				#可省略參數:
2521
 
2522
				#如果 $conf["dbPassword"] 有設定
2523
				if(isset($conf["dbPassword"])){
2524
 
2525
					$conf["db::setColumnIndex"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
2526
 
2527
					}#if end
2528
 
2529
				#如果有設定 $conf["dbPort"]	
2530
				if(isset($conf["dbPort"])){
2531
 
2532
					#設定 $conf["dbPort"]
2533
					$conf["db::setColumnIndex"]["dbPort"]=$conf["dbPort"];
2534
 
2535
					}#if end	
2536
 
2537
				$setColumnIndex=db::setColumnIndex($conf["db::setColumnIndex"]);
2538
				unset($conf["db::setColumnIndex"]);
2539
 
2540
				#如果建立index失敗
2541
				if($setColumnIndex["status"]=="false"){
2542
 
2543
					#設置執行失敗
2544
					$result["status"]="false";
2545
 
2546
					#設置錯誤訊息
2547
					$result["error"]=$setColumnIndex;
2548
 
2549
					#回傳結果
2550
					return $result;
2551
 
2552
					}#if end
2553
 
2554
				#取得執行的sql語法
2555
				$result["sql"][]=$setColumnIndex["sql"];
2556
 
2557
				}#if end
2558
 
2559
			}#if end
2560
 
2561
		#如果 $conf["newDataTableColmunKeyType"] 有設定
2562
		if(isset($conf["newDataTableColmunKeyType"])){	
2563
 
2564
			#如果爲 foreign key
2565
			if($conf["newDataTableColmunKeyType"]=="foreign key"){
2566
 
2567
				#函式說明:
2568
				#修改資料表的欄位
2569
				#回傳結果:
2570
				#$result["status"],"true",代表執行成功;"false"代表執行失敗.
2571
				#$result["error"],錯誤訊息陣列.
2572
				#$result["function"],當前執行的函數名稱.
2573
				#$result["sql"][$i],第$i+1個執行的sql語法字串陣列.
2574
				#必填參數:
2575
				$conf["db::editColumn"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
2576
				$conf["db::editColumn"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
2577
				$conf["db::editColumn"]["selectedDataBaseName"]=$conf["selectedDataBaseName"];#爲目標資料表所屬的資料庫
2578
				$conf["db::editColumn"]["selectedDataTableName"]=$conf["selectedDataTableName"];#爲目標資料表所屬的資料表
2579
				$conf["db::editColumn"]["editedColumnName"]=$conf["addedColumnName"];#要修改的欄位名稱
2580
				#可省略參數: 
2581
 
2582
				#如果 $conf["dbPassword"] 有設定
2583
				if(isset($conf["dbPassword"])){
2584
 
2585
					$conf["db::editColumn"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
2586
 
2587
					}#if end
2588
 
2589
				#$conf["newColumnName"]="";#要修改成的欄位名稱,預設與$conf["dbInformation"]["editedColumnName"]一樣。
2590
				#$conf["newDataTableColmunType"]="";#為新資料表的欄位儲存的型態,常見的有:
2591
					#int,用來儲存整數.
2592
					#double,用來儲存有小數點的數值.
2593
					#timestamp,用來儲存時間.
2594
					#varchar,可以儲存65536個字元.
2595
					#char,用來儲存任何東西,儲存成字元,長度限制為255.
2596
					#tinytest,來儲存大量的文字,會更據使用量調整儲存大小,長度限制跟char一樣.
2597
					#text,用來儲存大量的文字,不能作為索引值
2598
				#$conf["newDataTableColmunLength"]="";#為新資料表的欄位儲存的長度,""代表不限制長度
2599
				#$conf["newDataTableColmunDefault"]="";#為該欄位的預設值
2600
					#"",代表不指定預設值
2601
					#currentTime,當前時間;
2602
					#updatedCurrentTime,初始為當前時間,之後每更動一次就更新為當次時間
2603
					#null,代表空值
2604
					#以外的內容視為指定的數值
2605
				#$conf["newDataTableColmunNotNull"]="";#為新資料表的欄位不可為NULL否:
2606
					#true代表不能為null,
2607
					#false代表可以為null。
2608
				#$conf["newDataTableColmunAutoAdd"]="true";#為新資料表的欄位是否自動+1
2609
				$conf["db::editColumn"]["newDataTableColmunKeyType"]="foreign key";#為該欄位的鍵屬性:""為移除鍵的設定、"primary key"爲主鍵、"index"爲索引鍵、"foreign key"為外鍵
2610
				$conf["db::editColumn"]["foreignKeyDb"]=$conf["foreignDb"];#若要設定foreign key的話,則要提供參考的資料庫,預設為$conf["selectedDataBaseName"].
2611
				$conf["db::editColumn"]["foreignKeyReferenceTable"]=$conf["foreignTable"];#若要設定foreign key的話,則要提供參考的資料表
2612
				$conf["db::editColumn"]["foreignKeyReferenceColumn"]=$conf["foreignTableColumn"];#若要設定foreign key的話,則要提供參考的資料表欄位
2613
 
2614
				#如果有設定 $conf["onUpdateAction"]
2615
				if(isset($conf["onUpdateAction"])){
2616
 
2617
					$conf["db::editColumn"]["foreignKeyUpdateAction"]=$conf["onUpdateAction"];#若要設定foreign key的話,可以指定參考的資料表欄位更新時該欄位該怎麼處理,預設為"CASCADE",會將有所關聯的紀錄行也會進行刪除或修改。"SET NULL"代表會將有所關聯的紀錄行設定成 NULL。"NO ACTION"代表有存在的關聯紀錄行時,會禁止父資料表的刪除或修改動作。
2618
 
2619
					}#if end
2620
 
2621
				#如果有設定 $conf["onDeleteAction"]
2622
				if(isset($conf["onDeleteAction"])){
2623
 
2624
					$conf["db::editColumn"]["foreignKeyDeleteAction"]=$conf["onDeleteAction"];#若要設定foreign key的話,可以指定參考的資料表欄位移除時該欄位該怎麼處理,預設為"SET NULL",會將有所關聯的紀錄行設定成 NULL。"NO ACTION"代表有存在的關聯紀錄行時,會禁止父資料表的刪除或修改動作。
2625
 
2626
					}#if end
2627
 
2628
				#如果有設定 $conf["dbPort"]	
2629
				if(isset($conf["dbPort"])){
2630
 
2631
					#設定 $conf["dbPort"]
2632
					$conf["db::editColumn"]["dbPort"]=$conf["dbPort"];
2633
 
2634
					}#if end
2635
 
2636
				$editColumn=db::editColumn($conf["db::editColumn"]);
2637
				unset($conf["db::editColumn"]);
2638
 
2639
				#如果設置為foreign失敗
2640
				if($editColumn["status"]=="false"){
2641
 
2642
					#設置執行失敗
2643
					$result["status"]="false";
2644
 
2645
					#設置錯誤訊息
2646
					$result["error"]=$editColumn;
2647
 
2648
					#回傳結果
2649
					return $result;
2650
 
2651
					}#if end	
2652
 
2653
				#有幾個執行的sql語法就執行幾次
2654
				for($i=0;$i<count($editColumn["sql"]);$i++){
2655
 
2656
					#取得執行的sql語法
2657
					$result["sql"][]=$editColumn["sql"][$i];
2658
 
2659
					}#for end
2660
 
2661
				}#if end
2662
 
2663
			}#if end
2664
 
2665
		#執行到這邊代表執行成功
2666
 
2667
		#設置成功訊息
2668
		$result["status"]="true";
2669
 
2670
		#回傳結果
2671
		return $result;
2672
 
2673
		}#function addColumn end
2674
 
2675
	/*
2676
	#函式說明:
2677
	#修改資料表的欄位
2678
	#回傳結果:
2679
	#$result["status"],"true",代表執行成功;"false"代表執行失敗.
2680
	#$result["error"],錯誤訊息陣列.
2681
	#$result["function"],當前執行的函數名稱.
2682
	#$result["sql"][$i],第$i+1個執行的sql語法字串陣列.
2683
	#必填參數:
2684
	#$conf["dbAddress"],字串,爲mysql-Server的位置.
2685
	$conf["dbAddress"]=$dbAddress;
2686
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號.
2687
	$conf["dbAccount"]=$dbAccount;
2688
	#$conf["selectedDataBaseName"],字串,爲目標資料表所屬的資料庫.
2689
	$conf["selectedDataBaseName"]="";
2690
	#$conf["selectedDataTableName"],字串,爲目標資料表所屬的資料表.
2691
	$conf["selectedDataTableName"]="";
2692
	#$conf["editedColumnName"],字串,要修改的欄位名稱.
2693
	$conf["editedColumnName"]="";
2694
	#可省略參數: 
2695
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼.
2696
	#$conf["dbPassword"]=$dbPassword;
2697
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,預設為3306.
2698
	#$conf["dbPort"]="3306";
2699
	#$conf["newColumnName"],字串,要修改成的欄位名稱,預設與$conf["editedColumnName"]一樣。
2700
	#$conf["newColumnName"]=$conf["editedColumnName"];
2701
	#$conf["newDataTableColmunType"],字串,為新資料表的欄位儲存的型態,常見的有:int,用來儲存整數;double,用來儲存有小數點的數值;timestamp,用來儲存時間;varchar,可以儲存65536個字元;char,用來儲存任何東西,儲存成字元,長度限制為255;tinytest,來儲存大量的文字,會更據使用量調整儲存大小,長度限制跟char一樣;text,用來儲存大量的文字,不能作為索引值
2702
	#$conf["newDataTableColmunType"]="";
2703
	#$conf["newDataTableColmunLength"]=,字串,為新資料表的欄位儲存的長度,""代表不限制長度.
2704
	#$conf["newDataTableColmunLength"]="";
2705
	#$conf["newDataTableColmunDefault"],字串,為該欄位的預設值:"",代表不指定預設值;currentTime,當前時間;updatedCurrentTime,初始為當前時間,之後每更動一次就更新為當次時間;null,代表空值;以外的內容視為指定的數值.
2706
	#$conf["newDataTableColmunDefault"]="";
2707
	#$conf["newDataTableColmunNotNull"],字串,為新資料表的欄位不可為NULL否:true代表不能為null;false代表可以為null.
2708
	#$conf["newDataTableColmunNotNull"]="";
2709
	#$conf["newDataTableColmunComment"],字串,欄位的註解.
2710
	#$conf["newDataTableColmunComment"]="";
2711
	#$conf["newDataTableColmunAutoAdd"],字串,為新資料表的欄位是否自動+1
2712
	#$conf["newDataTableColmunAutoAdd"]="true";
2713
	#$conf["newDataTableColmunKeyType"],字串,為該欄位的鍵屬性:""為移除鍵的設定、"primary key"爲主鍵、"index"爲索引鍵、"foreign key"為外鍵.
2714
	#$conf["newDataTableColmunKeyType"]="";
2715
	#$conf["foreignKeyDb"],字串,若要設定foreign key的話,則要提供參考的資料庫,預設為$conf["selectedDataBaseName"].
2716
	#$conf["foreignKeyDb"]="";
2717
	#$conf["foreignKeyReferenceTable"],字串,若要設定foreign key的話,則要提供參考的資料表.
2718
	#$conf["foreignKeyReferenceTable"]="";
2719
	#$conf["foreignKeyReferenceColumn"],字串,若要設定foreign key的話,則要提供參考的資料表欄位.
2720
	#$conf["foreignKeyReferenceColumn"]="";
2721
	#$conf["foreignKeyUpdateAction"],字串,若要設定foreign key的話,可以指定參考的資料表欄位更新時該欄位該怎麼處理,預設為"CASCADE",會將有所關聯的紀錄行也會進行刪除或修改。"SET NULL"代表會將有所關聯的紀錄行設定成 NULL。"NO ACTION"代表有存在的關聯紀錄行時,會禁止父資料表的刪除或修改動作。
2722
	#$conf["foreignKeyUpdateAction"]="";
2723
	#$conf["foreignKeyDeleteAction"],字串,若要設定foreign key的話,可以指定參考的資料表欄位移除時該欄位該怎麼處理,預設為"SET NULL",會將有所關聯的紀錄行設定成 NULL。"NO ACTION"代表有存在的關聯紀錄行時,會禁止父資料表的刪除或修改動作。
2724
	#$conf["foreignKeyDeleteAction"]="SET NULL";
2725
	#參考資料:
2726
	#無.
2727
	#備註:
2728
	#無.
2729
	*/
2730
	public static function editColumn(&$conf){
2731
 
2732
		#初始化要回傳的內容
2733
		$result=array();
2734
 
2735
		#取得當前執行的函數名稱
2736
		$result["function"]=__FUNCTION__;
2737
 
2738
		#如果 $conf 不為陣列
2739
		if(gettype($conf)!="array"){
2740
 
2741
			#設置執行失敗
2742
			$result["status"]="false";
2743
 
2744
			#設置執行錯誤訊息
2745
			$result["error"][]="\$conf變數須為陣列形態";
2746
 
2747
			#如果傳入的參數為 null
2748
			if($conf==null){
2749
 
2750
				#設置執行錯誤訊息
2751
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
2752
 
2753
				}#if end
2754
 
2755
			#回傳結果
2756
			return $result;
2757
 
2758
			}#if end
2759
 
2760
		#檢查參數
2761
		#函式說明:
2762
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
2763
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2764
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
2765
		#$result["function"],當前執行的函式名稱.
2766
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
2767
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
2768
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
2769
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
2770
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
2771
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
2772
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
2773
		#必填參數:
2774
		#$conf["db::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
2775
		$conf["db::checkArguments"]["varInput"]=&$conf;
2776
		#$conf["db::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
2777
		$conf["db::checkArguments"]["mustBeFilledVariableName"]=array("dbAddress","dbAccount","selectedDataBaseName","selectedDataTableName","editedColumnName");
2778
		#$conf["db::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
2779
		$conf["db::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string","string","string");
2780
		#$conf["db::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
2781
		$conf["db::checkArguments"]["referenceVarKey"]="db::checkArguments";
2782
		#可省略參數:
2783
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
2784
		#$conf["canBeEmptyString"]="false";
2785
		#$conf["db::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
2786
		$conf["db::checkArguments"]["skipableVariableName"]=array("dbPassword","dbPort","newColumnName","newDataTableColmunType","newDataTableColmunLength","newDataTableColmunDefault","newDataTableColmunNotNull","newDataTableColmunAutoAdd","newDataTableColmunKeyType","foreignKeyDb","foreignKeyReferenceTable","foreignKeyReferenceColumn","foreignKeyUpdateAction","foreignKeyDeleteAction","newDataTableColmuComment");
2787
		#$conf["db::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
2788
		$conf["db::checkArguments"]["skipableVariableType"]=array("string","string","string","string","string","string","string","string","string","string","string","string","string","string","string");
2789
		#$conf["db::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
2790
		$conf["db::checkArguments"]["skipableVarDefaultValue"]=array(null,null,$conf["editedColumnName"],null,null,null,null,null,null,"\$conf[\"selectedDataBaseName\"]",null,null,null,null,null);
2791
		#$conf["db::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
2792
		#$conf["db::checkArguments"]["arrayCountEqualCheck"][]=array();
2793
		#參考資料:
2794
		#array_keys=>http://php.net/manual/en/function.array-keys.php
2795
		$checkResult=variableCheck::checkArguments($conf["db::checkArguments"]);
2796
		unset($conf["db::checkArguments"]);
2797
 
2798
		#如果檢查有誤
2799
		if($checkResult["status"]=="false"){
2800
 
2801
			#設置執行失敗的訊息
2802
			$result["status"]="false";
2803
 
2804
			#設置錯誤訊息
2805
			$result["error"]=$checkResult;
2806
 
2807
			#回傳結果
2808
			return $result;
2809
 
2810
			}#if end
2811
 
2812
		#如果檢查不通過
2813
		if($checkResult["passed"]=="false"){
2814
 
2815
			#設置執行失敗的訊息
2816
			$result["status"]="false";
2817
 
2818
			#設置錯誤訊息
2819
			$result["error"]=$checkResult;
2820
 
2821
			#回傳結果
2822
			return $result;
2823
 
2824
			}#if end
2825
 
2826
		#取得目標資料表的所有資訊
2827
		#函式說明:
2828
		#取得資料表所有欄位的詳細資訊
2829
		#回傳的內容:
2830
		#$result["status"],執行結果,"true"代表執行成功;"false"代表執行失敗
2831
		#$result["error"],錯誤訊息陣列
2832
		#$result["sql"],執行的sql語法
2833
		#$result["oriInput"],原始的資料表欄位資訊
2834
		#$result["everyLine"],逐行的欄位資訊
2835
		#$result["tableName"],當前查詢的資料表名稱
2836
		#$result["engine"],資料表使用的儲存引擎
2837
		#$result["charset"],資料表預設的編碼
2838
		#$result["columnName"][$i],各欄位的名稱陣列,$i爲0開始的數字,也可以使用欄位的名稱。
2839
		#$result["columnVarTypeAndLengthLimit"][$i],各欄位儲存的變數形態與長度限制,$i爲0開始的數字,也可以使用欄位的名稱。
2840
		#$result["columnVarType"][$i],各欄位變數儲存的型態,$i爲0開始的數字,也可以使用欄位的名稱.
2841
		#$result["columnVarLengthLimit"][$i],個欄位變數的長度限制,若不存在其限制,則為"",$i爲0開始的數字,也可以使用欄位的名稱.
2842
		#$result["columnNull"][$i],各欄位是否可以爲null,"true"爲可以爲null;"false"爲可不以爲"null",$i爲0開始的數字,也可以使用欄位的名稱。
2843
		#$result["columnAutoIncrement"][$i],各欄位是否會自動加1,"true"爲會;"false"爲不會,$i爲0開始的數字,也可以使用欄位的名稱。
2844
		#$result["columnDefault"][$i],各欄位的預設內容,若無則爲"沒有指定",$i爲0開始的數字,也可以使用欄位的名稱。
2845
		#$result["columnOnUpdateAction"][$i],當資料有修改時,該欄位的內容要怎麼因應,$i爲0開始的數字,也可以使用欄位的名稱。
2846
		#$result["columnCharacterSet"][$i],各欄位使用的CharacterSet,$i爲0開始的數字,也可以使用欄位的名稱。
2847
		#$result["columnCollate"][$i],各欄位使用的Collate,$i爲0開始的數字,也可以使用欄位的名稱。
2848
		#$result["columnComment"][$i],各欄位的註解,$i爲1開始的數字,也可以使用欄位的名稱。
2849
		#$result["key"]["exist"],該資料表是否有索引鍵,"true"代表有;"false"代表沒有。
2850
		#$result["key"][$j],該資料表的索引鍵陣列,$j爲0開始的數字,也可以使用欄位的名稱。
2851
		#$result["keyConstraintName"][$j],該資料表用於識別索引鍵的CONSTRAINT名稱陣列,$j爲0開始的數字,也可以使用欄位的名稱。
2852
		#$result["primaryKey"],該資料表的主鍵
2853
		#$result["foreignKey"]["exist"],該資料表是否有foreign key,"true"代表有;"fasle"代表沒有。
2854
		#$result["foreignKey"]["constraintName"][$k],用來識別外鍵的CONSTRAINT名稱陣列,$k爲0開始的數字,也可以使用欄位的名稱。
2855
		#$result["foreignKey"]["columnName"][$k],外鍵的名稱陣列,$k爲0開始的數字,也可以使用欄位的名稱。
2856
		#$result["foreignKey"]["referencesTable"][$k],外鍵參照的欄位,$k爲0開始的數字,,也可用欄位的名稱來找value.
2857
		#$result["foreignKey"]["referencesColumn"][$k],外鍵參照的欄位屬於哪個資料表,$k爲0開始的數字,也可用欄位的名稱來找value.
2858
		#$result["foreignKey"]["onUpdateAction"][$i],當參照的欄位資料更新時,會怎麼同步,$i爲0開始的數字,也可用欄位的名稱來找value.
2859
		#$result["foreignKey"]["onDeleteAction"][$i],當參照的欄位資料移除時,會怎麼同步,$i爲0開始的數字,也可用欄位的名稱來找value.
2860
		#必填參數:
2861
		$conf["db"]["getTableColumnDetailInfo"]["dbAddress"]=$conf["dbAddress"];#資料庫的網路位置
2862
		$conf["db"]["getTableColumnDetailInfo"]["dbAccount"]=$conf["dbAccount"];#連線到資料庫要用的帳號
2863
		$conf["db"]["getTableColumnDetailInfo"]["selectedDataBase"]=$conf["selectedDataBaseName"];#連線到資料庫要選擇的資料庫
2864
		$conf["db"]["getTableColumnDetailInfo"]["selectedDataTable"]=$conf["selectedDataTableName"];#連線到資料庫要檢視的資料表
2865
		#可省略參數:
2866
 
2867
		#如果有設定連線密碼
2868
		if(isset($conf["dbPassword"])){
2869
 
2870
			$conf["db"]["getTableColumnDetailInfo"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
2871
 
2872
			}#if end
2873
 
2874
		#如果有設定 $conf["dbPort"]	
2875
		if(isset($conf["dbPort"])){
2876
 
2877
			#設定 $conf["dbPort"]
2878
			$conf["db"]["getTableColumnDetailInfo"]["dbPort"]=$conf["dbPort"];
2879
 
2880
			}#if end	
2881
 
2882
		$oriColumnInfo=db::getTableColumnDetailInfo($conf["db"]["getTableColumnDetailInfo"]);
2883
		unset($conf["db"]["getTableColumnDetailInfo"]);
2884
 
2885
		#debug
2886
		#var_dump($oriColumnInfo);
2887
		#exit;
2888
 
2889
		#如果查詢資料表資訊失敗
2890
		if($oriColumnInfo["status"]=="false"){
2891
 
2892
			#設定執行失敗的識別
2893
			$result["status"]="false";
2894
 
2895
			#設定錯誤訊息
2896
			$result["error"]=$oriColumnInfo;
2897
 
2898
			#回傳結果
2899
			return $result;
2900
 
2901
			}#if end
2902
 
2903
		#檢視目標欄位的鍵屬性
2904
		#var_dump($oriColumnInfo);
2905
 
2906
		#如果沒有定新的欄位明稱
2907
		if(!isset($conf["newColumnName"])){
2908
 
2909
			#則設定為原始欄位的名稱
2910
			$conf["newColumnName"]=$oriColumnInfo["columnName"][$conf["editedColumnName"]];
2911
 
2912
			}#if end
2913
 
2914
		#如果 $conf["newDataTableColmunType"] 沒有設定 
2915
		if(!isset($conf["newDataTableColmunType"])){
2916
 
2917
			#$oriColumnInfo["columnVarTypeAndLengthLimit"][$conf["editedColumnName"]];
2918
 
2919
			#則設定為原始欄位的儲存型態
2920
			$conf["newDataTableColmunType"]=$oriColumnInfo["columnVarType"][$conf["editedColumnName"]];
2921
 
2922
			}#if end
2923
 
2924
		#以下要檢查
2925
 
2926
		#如果新資料型態不等於 "tinytext" 跟 "text"
2927
		if($conf["newDataTableColmunType"]!="tinytext" && $conf["newDataTableColmunType"]!="text"){
2928
 
2929
			#如果沒有設定 $conf["newDataTableColmunLength"]
2930
			if(!isset($conf["newDataTableColmunLength"])){
2931
 
2932
				#則設定為原始欄位的儲存長度
2933
				$conf["newDataTableColmunLength"]=$oriColumnInfo["columnVarLengthLimit"][$conf["editedColumnName"]];
2934
 
2935
				}#if end
2936
 
2937
			#如果 $conf["newDataTableColmunLength"] 不為 ""
2938
			if($conf["newDataTableColmunLength"]!=""){
2939
 
2940
				#則加上 「(」與「)」
2941
				$conf["newDataTableColmunLength"]="(".$conf["newDataTableColmunLength"].")";
2942
 
2943
				#屬性後面加上長度
2944
				$conf["newDataTableColmunType"]=$conf["newDataTableColmunType"].$conf["newDataTableColmunLength"];
2945
 
2946
				}#if end
2947
 
2948
			}#if end
2949
 
2950
		#如果 $conf["newDataTableColmunDefault"] 不存在
2951
		if(!isset($conf["newDataTableColmunDefault"])){
2952
 
2953
			#則設定為原始欄位的預設數值
2954
			$conf["newDataTableColmunDefault"]="default \"".$oriColumnInfo["columnDefault"][$conf["editedColumnName"]]."\"";
2955
 
2956
			#如果 $oriColumnInfo["columnDefault"][$conf["editedColumnName"]] 為 ""
2957
			if($oriColumnInfo["columnDefault"][$conf["editedColumnName"]]==""){
2958
 
2959
				#則將 $conf["newDataTableColmunDefault"] 設為
2960
				$conf["newDataTableColmunDefault"]="";
2961
 
2962
				}#if end
2963
 
2964
			#如果 $oriColumnInfo["columnDefault"][$conf["editedColumnName"]] 為 "NULL"
2965
			if($oriColumnInfo["columnDefault"][$conf["editedColumnName"]]=="NULL"){
2966
 
2967
				#則將 $conf["newDataTableColmunDefault"] 設為
2968
				$conf["newDataTableColmunDefault"]="";
2969
 
2970
				}#if end
2971
 
2972
			#如果 $oriColumnInfo["columnDefault"][$conf["editedColumnName"]] 為 "沒有指定"
2973
			if($oriColumnInfo["columnDefault"][$conf["editedColumnName"]]=="沒有指定"){
2974
 
2975
				#則將 $conf["newDataTableColmunDefault"] 設為
2976
				$conf["newDataTableColmunDefault"]="";
2977
 
2978
				}#if end
2979
 
2980
			}#if end
2981
 
2982
		#反之有設定 $conf["newDataTableColmunDefault"]
2983
		else{
2984
 
2985
			#當 $conf["newDataTableColmunType"] 不等於 "text" 與 "tinytest" 時,才能用預設值。
2986
			if($conf["newDataTableColmunType"]!="text" && $conf["newDataTableColmunType"]!="tinytest" ){
2987
 
2988
				#判斷 $conf["newDataTableColmunDefault"] 的數值
2989
				#currentTime,當前時間;
2990
				#updatedCurrentTime,初始為當前時間,之後每更動一次就更新為當次時間
2991
				#null,代表空值
2992
				#以外的內容視為指定的數值
2993
				switch($conf["newDataTableColmunDefault"]){
2994
 
2995
					#如果是
2996
					case "currentTime":
2997
 
2998
						#則將 $conf["newDataTableColmunDefault"] 設為 " default CURRENT_TIMESTAMP "
2999
						$conf["newDataTableColmunDefault"]=" default CURRENT_TIMESTAMP ";
3000
 
3001
						#跳出 switch 
3002
						break;
3003
 
3004
					#如果是 "updatedCurrentTime"
3005
					case "updatedCurrentTime":
3006
 
3007
						#則將 $conf["newDataTableColmunDefault"] 設為 " default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP "
3008
						$conf["newDataTableColmunDefault"]=" default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP ";
3009
 
3010
						#跳出 switch 
3011
						break;
3012
 
3013
					#如果是 "null"
3014
					case "null":
3015
 
3016
						#則將 $conf["newDataTableColmunDefault"] 設為 " default null "
3017
						$conf["newDataTableColmunDefault"]=" default null ";
3018
 
3019
						#跳出 switch 
3020
						break;
3021
 
3022
					#如果是 "NULL"
3023
					case "NULL":
3024
 
3025
						#則將 $conf["newDataTableColmunDefault"] 設為 " default null "
3026
						$conf["newDataTableColmunDefault"]=" default NULL ";
3027
 
3028
						#跳出 switch 
3029
						break;
3030
 
3031
					#如果是 ""
3032
					case "":
3033
 
3034
						#則代表不設定預設值
3035
						$conf["newDataTableColmunDefault"]="";
3036
 
3037
						break;
3038
 
3039
					#如果為其他內容	
3040
					default :
3041
 
3042
						#套用自訂的預設值
3043
						$conf["newDataTableColmunDefault"]=" default '".$conf["newDataTableColmunDefault"]."'";		
3044
 
3045
					}#switch end
3046
 
3047
				}#if end
3048
 
3049
			}#else end
3050
 
3051
		#如果 $conf["newDataTableColmunNotNull"] 沒有設定
3052
		if(!isset($conf["newDataTableColmunNotNull"])){
3053
 
3054
			#則按照原始欄位的設定
3055
 
3056
			#如果 $oriColumnInfo["columnNotNull"][$conf["editedColumnName"]] 等於 "true"
3057
			if($oriColumnInfo["columnNotNull"][$conf["editedColumnName"]]=="true"){
3058
 
3059
				#則代表不能為 null
3060
				$conf["newDataTableColmunNotNull"]=" not null";
3061
 
3062
				}#if end
3063
 
3064
			#反之 $oriColumnInfo["columnNotNull"][$conf["editedColumnName"]] 等於 "false"
3065
			else{
3066
 
3067
				#則代表可以為 null
3068
				#將 $conf["newDataTableColmunNotNull"] 置換為 ""
3069
				$conf["newDataTableColmunNotNull"]="";
3070
 
3071
				}#if end
3072
 
3073
			}#if end
3074
 
3075
		#反之 如果 $conf["newDataTableColmunNotNull"] 有設定
3076
		else{
3077
 
3078
			#如果 $conf["newDataTableColmunNotNull"] 為 "true"
3079
			if($conf["newDataTableColmunNotNull"]=="true"){
3080
 
3081
				#則置換為 "not null"
3082
				$conf["newDataTableColmunNotNull"]="not null";
3083
 
3084
				}#if end
3085
 
3086
			#如果 $conf["newDataTableColmunNotNull"] 為 "false"
3087
			if($conf["newDataTableColmunNotNull"]=="false"){
3088
 
3089
				#則置換為 ""
3090
				$conf["newDataTableColmunNotNull"]="";
3091
 
3092
				}#if end
3093
 
3094
			}#else end
3095
 
3096
		#如果 $conf["newDataTableColmunAutoAdd"] 沒有設定
3097
		if(!isset($conf["newDataTableColmunAutoAdd"])){
3098
 
3099
			#原始欄位的設定為 true 的話
3100
			if($oriColumnInfo["columnAutoIncrement"][$conf["editedColumnName"]]=="true"){
3101
 
3102
				#則按照原始欄位的設定
3103
				$conf["newDataTableColmunAutoAdd"]="auto_increment";
3104
 
3105
				}#if end
3106
 
3107
			#反之代表沒有設定
3108
			else{
3109
 
3110
				#設為 ""
3111
				$conf["newDataTableColmunAutoAdd"]="";
3112
 
3113
				}#else end
3114
 
3115
			}#if end
3116
 
3117
		#反之代表 $conf["newDataTableColmunAutoAdd"] 有設定
3118
		else{
3119
 
3120
			#如果 $conf["newDataTableColmunAutoAdd"] 等於 "true"
3121
			if($conf["newDataTableColmunAutoAdd"]=="true"){
3122
 
3123
				#則將 $conf["newDataTableColmunAutoAdd"] 設為 auto_increment
3124
				$conf["newDataTableColmunAutoAdd"]="auto_increment";
3125
 
3126
				}#if end
3127
 
3128
			#反之 $conf["newDataTableColmunAutoAdd"] 不等於 "true"
3129
			else{
3130
 
3131
				#則將 $conf["newDataTableColmunAutoAdd"] 設為 ""
3132
				$conf["newDataTableColmunAutoAdd"]="";
3133
 
3134
				}#else end				
3135
 
3136
			}#else end
3137
 
3138
		#如果 $conf["newDataTableColmunType"] 為 "char" 或 "text"	
3139
		if($conf["newDataTableColmunType"]=="char" || $conf["newDataTableColmunType"]=="text"){
3140
 
3141
			#CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci',設定為utf8
3142
			$utf8="CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci'";
3143
 
3144
			}#if end
3145
 
3146
		#反之不是字元或文字
3147
		else{
3148
 
3149
			#則設為""
3150
			$utf8="";
3151
 
3152
			}#else end	
3153
 
3154
		#如果有設定 $conf["newDataTableColmunComment"]
3155
		if(isset($conf["newDataTableColmunComment"])){
3156
 
3157
			#如果 $conf["newDataTableColmunComment"] 等於 ""
3158
			if($conf["newDataTableColmunComment"]==""){
3159
 
3160
				#設置為"沒有註解"
3161
				$comment=" COMMENT '沒有註解'";
3162
 
3163
				}#if end
3164
 
3165
			#反之設置指定的註解字串
3166
			else{
3167
 
3168
				#設置註解
3169
				$comment=" COMMENT '".$conf["newDataTableColmunComment"]."'";
3170
 
3171
				}#else end
3172
 
3173
			}#if end
3174
 
3175
		#反之
3176
		else{
3177
 
3178
			#如果原始沒有註解
3179
			if(!isset($oriColumnInfo["colmunComment"][$conf["editedColumnName"]])){
3180
 
3181
				#設為空字串
3182
				$comment="";
3183
 
3184
				}#if end
3185
 
3186
			#反之
3187
			else{
3188
 
3189
				#設為原始的註解
3190
				$comment=" COMMENT '".$oriColumnInfo["colmunComment"][$conf["editedColumnName"]]."'";
3191
 
3192
				}#else end
3193
 
3194
			}#else end	
3195
 
3196
		#組合sql語法
3197
		$sql="alter table ".$conf["selectedDataBaseName"].".".$conf["selectedDataTableName"]." change `".$conf["editedColumnName"]."` `".$conf["newColumnName"]."` ".$conf["newDataTableColmunType"]." ".$utf8." ".$conf["newDataTableColmunDefault"]." ".$conf["newDataTableColmunNotNull"]." ".$conf["newDataTableColmunAutoAdd"]." ".$comment." ;";
3198
 
3199
		#執行 sql 語法
3200
		#函式說明:
3201
		#執行mysql指令
3202
		#回傳結果::
3203
		#$result["status"],"true"為執行成功;"false"為執行失敗。
3204
		#$result["error"],錯誤訊息的陣列
3205
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
3206
		#$result["queryString"],mysql查詢的語言
3207
		#查詢號的解果,需要解析。
3208
		#必填參數:
3209
		$conf["db"]["execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
3210
		$conf["db"]["execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
3211
		$conf["db"]["execMysqlQuery"]["dbSql"]=$sql;#要執行sql語法
3212
		#可省略參數: 
3213
 
3214
		#如果有設定連線密碼
3215
		if(isset($conf["dbPassword"])){
3216
 
3217
			$conf["db"]["execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
3218
 
3219
			}#if end
3220
 
3221
		#如果有設定 $conf["dbPort"]	
3222
		if(isset($conf["dbPort"])){
3223
 
3224
			#設定 $conf["dbPort"]
3225
			$conf["db"]["execMysqlQuery"]["dbPort"]=$conf["dbPort"];
3226
 
3227
			}#if end	
3228
 
3229
		$sqlExecResult=db::execMysqlQuery($conf["db"]["execMysqlQuery"]);
3230
		unset($conf["db"]["execMysqlQuery"]);
3231
 
3232
		#如果執行 sql 語法錯誤
3233
		if($sqlExecResult["status"]=="false"){
3234
 
3235
			#設定執行失敗的識別
3236
			$result["status"]="false";
3237
 
3238
			#設定錯誤訊息
3239
			$result["error"]=$sqlExecResult;
3240
 
3241
			#回傳結果
3242
			return $result;
3243
 
3244
			}#if end
3245
 
3246
		#取得執行的sql語法
3247
		$result["sql"][]=$sqlExecResult["queryString"];
3248
 
3249
		#如果 $conf["newDataTableColmunKeyType"] 有設定
3250
		if(isset($conf["newDataTableColmunKeyType"])){
3251
 
3252
			#取得其key為何種
3253
			#函式說明:
3254
			#取得資料表所有欄位的詳細資訊
3255
			#回傳的內容:
3256
			#$result["status"],執行結果,"true"代表執行成功;"false"代表執行失敗
3257
			#$result["error"],錯誤訊息陣列
3258
			#$result["sql"],執行的sql語法
3259
			#$result["oriInput"],原始的資料表欄位資訊
3260
			#$result["everyLine"],逐行的欄位資訊
3261
			#$result["tableName"],當前查詢的資料表名稱
3262
			#$result["engine"],資料表使用的儲存引擎
3263
			#$result["charset"],資料表預設的編碼
3264
			#$result["columnName"][$i],各欄位的名稱陣列,$i爲0開始的數字,也可以使用欄位的名稱。
3265
			#$result["columnVarTypeAndLengthLimit"][$i],各欄位儲存的變數形態與長度限制,$i爲0開始的數字,也可以使用欄位的名稱。
3266
			#$result["columnNotNull"][$i],各欄位是否可以不爲null,"true"爲可以不爲null;"false"爲可以爲"null",$i爲0開始的數字,也可以使用欄位的名稱。
3267
			#$result["columnAutoIncrement"][$i],各欄位是否會自動加1,"true"爲會;"false"爲不會,$i爲0開始的數字,也可以使用欄位的名稱。
3268
			#$result["columnDefault"][$i],各欄位的預設內容,若無則爲"沒有指定",$i爲0開始的數字,也可以使用欄位的名稱。
3269
			#$result["columnOnUpdateAction"][$i],當資料有修改時,該欄位的內容要怎麼因應,$i爲0開始的數字,也可以使用欄位的名稱。
3270
			#$result["columnCharacterSet"][$i],各欄位使用的CharacterSet,$i爲0開始的數字,也可以使用欄位的名稱。
3271
			#$result["columnCollate"][$i],各欄位使用的Collate,$i爲0開始的數字,也可以使用欄位的名稱。
3272
			#$result["key"]["exist"],該資料表是否有索引鍵,"true"代表有;"false"代表沒有。
3273
			#$result["key"][$j],該資料表的索引鍵陣列,$j爲0開始的數字,也可以使用欄位的名稱。
3274
			#$result["primaryKey"],該資料表的主鍵
3275
			#$result["foreignKey"]["exist"],該資料表是否有foreign key,"true"代表有;"fasle"代表沒有。
3276
			#$result["foreignKey"]["constraintName"][$k],用來識別外鍵的CONSTRAINT名稱陣列,$k爲0開始的數字,也可以使用欄位的名稱。
3277
			#$result["foreignKey"]["columnName"][$k],外鍵的名稱陣列
3278
			#$result["foreignKey"]["referencesTable"][$k],外鍵參照的欄位,$k爲0開始的數字
3279
			#$result["foreignKey"]["referencesColumn"][$k],外鍵參照的欄位屬於哪個資料表,$k爲0開始的數字
3280
			#$result["foreignKey"]["OnUpdateAction"][$l],當參照的欄位資料更新時,會怎麼同步,$l爲0開始的數字
3281
			#$result["foreignKey"]["OnDeleteAction"][$m],當參照的欄位資料移除時,會怎麼同步,$m爲0開始的數字
3282
			#必填參數:
3283
			$conf["db"]["getTableColumnDetailInfo"]["dbAddress"]=$conf["dbAddress"];
3284
			$conf["db"]["getTableColumnDetailInfo"]["dbAccount"]=$conf["dbAccount"];
3285
			$conf["db"]["getTableColumnDetailInfo"]["selectedDataBase"]=$conf["selectedDataBaseName"];
3286
			$conf["db"]["getTableColumnDetailInfo"]["selectedDataTable"]=$conf["selectedDataTableName"];
3287
			#可省略參數:
3288
 
3289
			#如果 $conf["dbPassword"] 有設定
3290
			if(isset($conf["dbPassword"])){
3291
 
3292
				#套用連限時的密碼
3293
				$conf["db"]["getTableColumnDetailInfo"]["dbPassword"]=$conf["dbPassword"];
3294
 
3295
				}#if end
3296
 
3297
			#如果有設定 $conf["dbPort"]	
3298
			if(isset($conf["dbPort"])){
3299
 
3300
				#設定 $conf["dbPort"]
3301
				$conf["db"]["getTableColumnDetailInfo"]["dbPort"]=$conf["dbPort"];
3302
 
3303
				}#if end	
3304
 
3305
			$tableColumnDetial=db::getTableColumnDetailInfo($conf["db"]["getTableColumnDetailInfo"]);
3306
			unset($conf["db"]["getTableColumnDetailInfo"]);#卸除變數,避免錯誤產生.
3307
 
3308
			#如果取得資料表結構失敗
3309
			if($tableColumnDetial["status"]=="false"){
3310
 
3311
				#設置執行不正常
3312
				$result["status"]="false";
3313
 
3314
				#設置執行錯誤訊息
3315
				$result["error"]=$tableColumnDetial;
3316
 
3317
				#回傳結果
3318
				return $result;
3319
 
3320
				}#if end
3321
 
3322
			#判斷 $conf["newDataTableColmunKeyType"] 來進行處理
3323
			#"index"爲索引鍵,"foreign key"為外鍵,""為將鍵屬性取消。
3324
			switch($conf["newDataTableColmunKeyType"]){
3325
 
3326
				#如果 $conf["newDataTableColmunKeyType"] 是 ""
3327
				case "":
3328
 
3329
					#檢查目標欄位是主鍵或是索引鍵或是外鍵
3330
 
3331
					#debug	
3332
					#var_dump($tableColumnDetial);
3333
 
3334
					#如果 $tableColumnDetial["foreignKey"]["exist"] 等於 "true",代表有外鍵
3335
					if($tableColumnDetial["foreignKey"]["exist"]=="true"){
3336
 
3337
						#如果 $tableColumnDetial["foreignKey"]["columnName"][$conf["dbInformation"]["newColumnName"]] 存在,則代表該欄位為索引鍵
3338
						if(isset($tableColumnDetial["foreignKey"]["columnName"][$conf["newColumnName"]])){
3339
 
3340
							#移除外鍵
3341
							#函式說明:
3342
							#移除資料表單1欄位的外鍵
3343
							#回傳結果:
3344
							#$result["status"],"true",代表執行成功;"false"代表執行失敗
3345
							#$result["error"],錯誤訊息陣列
3346
							#$result["sql"],執行的sql字串.
3347
							#必填參數:
3348
							$conf["db"]["eraseForeignKey"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
3349
							$conf["db"]["eraseForeignKey"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
3350
							$conf["db"]["eraseForeignKey"]["selectedDataBaseName"]=$conf["selectedDataBaseName"];#爲目標資料表所屬的資料庫
3351
							$conf["db"]["eraseForeignKey"]["selectedDataTableName"]=$conf["selectedDataTableName"];#爲目標資料表所屬的資料庫
3352
							$conf["db"]["eraseForeignKey"]["erasedForeignKeyColumnConstraintName"]=$tableColumnDetial["foreignKey"]["constraintName"][$conf["newColumnName"]];#要移除外鍵欄位的CONSTRAINT名稱
3353
							#可省略參數: 
3354
 
3355
							#如果 $conf["dbPassword"] 存在
3356
							if(isset($conf["dbPassword"])){
3357
 
3358
								#則設定連線的密碼
3359
								$conf["db"]["eraseForeignKey"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
3360
 
3361
								}#if end
3362
 
3363
							#如果有設定 $conf["dbPort"]	
3364
							if(isset($conf["dbPort"])){
3365
 
3366
								#設定 $conf["dbPort"]
3367
								$conf["db"]["eraseForeignKey"]["dbPort"]=$conf["dbPort"];
3368
 
3369
								}#if end	
3370
 
3371
							$eraseForeignKeyResult=db::eraseForeignKey($conf["db"]["eraseForeignKey"]);
3372
							unset($conf["db"]["eraseForeignKey"]);
3373
 
3374
							#取得執行的sql字串
3375
							$result["sql"][]=$eraseForeignKeyResult["sql"];
3376
 
3377
							#如果 $eraseForeignKeyResult["status"]等於"fasle"
3378
							if($eraseForeignKeyResult["status"]=="false"){
3379
 
3380
								#設置出錯的識別
3381
								$result["status"]="fasle";
3382
 
3383
								#設置錯誤訊息
3384
								$result["error"]=$eraseForeignKeyResult;
3385
 
3386
								#回傳結果
3387
								return $result;
3388
 
3389
								}#if end
3390
 
3391
							}#if end
3392
 
3393
						}#if end
3394
 
3395
					#如果 $tableColumnDetial["key"]["exist"] 等於 "true",代表有索引鍵
3396
					if($tableColumnDetial["key"]["exist"]=="true"){
3397
 
3398
						#如果 $tableColumnDetial["key"][$conf["newColumnName"]] 存在,則代表該欄位為索引鍵
3399
						if(isset($tableColumnDetial["key"][$conf["newColumnName"]])){
3400
 
3401
							#移除索引鍵
3402
							#函式說明:
3403
							#移除資料表單1欄位的索引鍵
3404
							#回傳結果:
3405
							#$result["status"],"true",代表執行成功;"false"代表執行失敗
3406
							#$result["error"],錯誤訊息陣列
3407
							#$result["sql"],執行的sql字串.
3408
							#必填參數:
3409
							$conf["db"]["eraseIndexKey"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
3410
							$conf["db"]["eraseIndexKey"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
3411
							$conf["db"]["eraseIndexKey"]["selectedDataBaseName"]=$conf["selectedDataBaseName"];#爲目標資料表所屬的資料庫
3412
							$conf["db"]["eraseIndexKey"]["selectedDataTableName"]=$conf["selectedDataTableName"];#爲目標資料表所屬的資料表
3413
							$conf["db"]["eraseIndexKey"]["erasedIndexKeyColumnConstraintName"]=$tableColumnDetial["keyConstraintName"][$conf["newColumnName"]];#要移除外鍵欄位的CONSTRAINT名稱
3414
							#可省略參數:
3415
 
3416
							#如果 $conf["dbPassword"] 存在
3417
							if(isset($conf["dbPassword"])){
3418
 
3419
								#則設定連線的密碼
3420
								$conf["db"]["eraseIndexKey"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
3421
 
3422
								}#if end
3423
 
3424
							#如果有設定 $conf["dbPort"]	
3425
							if(isset($conf["dbPort"])){
3426
 
3427
								#設定 $conf["dbPort"]
3428
								$conf["db"]["eraseIndexKey"]["dbPort"]=$conf["dbPort"];
3429
 
3430
								}#if end	
3431
 
3432
							$eraseIndexKeyResult=db::eraseIndexKey($conf["db"]["eraseIndexKey"]);
3433
							#var_dump($conf["db"]["eraseIndexKey"]);
3434
							unset($conf["db"]);
3435
 
3436
							#debug
3437
							#var_dump($eraseIndexKeyResult);
3438
 
3439
							#取得執行的sql語言
3440
							$result["sql"][]=$eraseIndexKeyResult["sql"];
3441
 
3442
							#如果 $eraseIndexKeyResult["status"]等於"fasle"
3443
							if($eraseIndexKeyResult["status"]=="false"){
3444
 
3445
								#設置出錯的識別
3446
								$result["status"]="false";
3447
 
3448
								#設置錯誤訊息
3449
								$result["error"]=$eraseIndexKeyResult;
3450
 
3451
								#回傳結果
3452
								return $result;
3453
 
3454
								}#if end
3455
 
3456
							}#if end
3457
 
3458
						}#if end
3459
 
3460
					#中斷switch
3461
					break;
3462
 
3463
				#如果 $conf["newDataTableColmunKeyType"] 是 "index"
3464
				case "index":
3465
 
3466
					#如果 $tableColumnDetial["foreignKey"]["exist"] 等於 "true",代表有外鍵
3467
					if($tableColumnDetial["foreignKey"]["exist"]=="true"){
3468
 
3469
						#echo "have foreign key";
3470
 
3471
						#如果 $tableColumnDetial["foreignKey"]["columnName"][$conf["newColumnName"]] 存在,則代表該欄位為索引鍵
3472
						if(isset($tableColumnDetial["foreignKey"]["columnName"][$conf["newColumnName"]])){
3473
 
3474
							#移除外鍵
3475
							#函式說明:
3476
							#移除資料表單1欄位的外鍵
3477
							#回傳結果:
3478
							#$result["status"],"true",代表執行成功;"false"代表執行失敗
3479
							#$result["error"],錯誤訊息陣列
3480
							#必填參數:
3481
							$conf["db"]["eraseForeignKey"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
3482
							$conf["db"]["eraseForeignKey"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
3483
							$conf["db"]["eraseForeignKey"]["selectedDataBaseName"]=$conf["selectedDataBaseName"];#爲目標資料表所屬的資料庫
3484
							$conf["db"]["eraseForeignKey"]["selectedDataTableName"]=$conf["selectedDataTableName"];#爲目標資料表所屬的資料庫
3485
							$conf["db"]["eraseForeignKey"]["erasedForeignKeyColumnConstraintName"]=$tableColumnDetial["foreignKey"]["constraintName"][$conf["newColumnName"]];#要移除外鍵欄位的CONSTRAINT名稱
3486
							#可省略參數: 
3487
 
3488
							#如果 $conf["dbPassword"] 存在
3489
							if(isset($conf["dbPassword"])){
3490
 
3491
								#則設定連線的密碼
3492
								$conf["db"]["eraseForeignKey"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
3493
 
3494
								}#if end
3495
 
3496
							#如果有設定 $conf["dbPort"]	
3497
							if(isset($conf["dbPort"])){
3498
 
3499
								#設定 $conf["dbPort"]
3500
								$conf["db"]["eraseForeignKey"]["dbPort"]=$conf["dbPort"];
3501
 
3502
								}#if end			
3503
 
3504
							$eraseForeignKeyResult=db::eraseForeignKey($conf["db"]["eraseForeignKey"]);
3505
							unset($conf["db"]["eraseForeignKey"]);
3506
 
3507
							#執行的sql字串
3508
							$result["sql"][]=$eraseForeignKeyResult["sql"];
3509
 
3510
							#如果 $eraseForeignKeyResult["status"]等於"fasle"
3511
							if($eraseForeignKeyResult["status"]=="false"){
3512
 
3513
								#設置出錯的識別
3514
								$result["status"]="false";
3515
 
3516
								#設置錯誤訊息
3517
								$result["error"]=$eraseForeignKeyResult;
3518
 
3519
								#回傳結果
3520
								return $result;
3521
 
3522
								}#if end
3523
 
3524
							}#if end
3525
 
3526
						}#if end
3527
 
3528
					#如果 $tableColumnDetial["key"]["exist"] 等於 "true",代表有索引鍵
3529
					if($tableColumnDetial["key"]["exist"]=="true"){
3530
 
3531
						#檢查目標欄位是否為索引鍵
3532
						if(!isset($tableColumnDetial["index"][$conf["newColumnName"]])){
3533
 
3534
							#代表目標欄位不為索引鍵
3535
 
3536
							#建立索引鍵
3537
							#函式說明:
3538
							#新增資料表的欄位
3539
							#回傳結果:
3540
							#$result["status"],"true",代表執行成功;"false"代表執行失敗.
3541
							#$result["function"],當前執行的函數名稱.
3542
							#$result["error"],錯誤訊息陣列.
3543
							#$result["warning"],警告訊息.
3544
							#$result["sql"],執行的sql字串.
3545
							#必填參數:
3546
							$conf["db"]["setColumnIndex"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
3547
							$conf["db"]["setColumnIndex"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
3548
							$conf["db"]["setColumnIndex"]["selectedDataBaseName"]=$conf["selectedDataBaseName"];#爲目標資料表所屬的資料庫
3549
							$conf["db"]["setColumnIndex"]["selectedDataTableName"]=$conf["selectedDataTableName"];#爲目標資料表所屬的資料庫
3550
							$conf["db"]["setColumnIndex"]["indexedColumnName"]=$conf["newColumnName"];#要設爲index的欄位名稱
3551
							#可省略參數:
3552
 
3553
							#如果 $conf["dbPassword"] 存在
3554
							if(isset($conf["dbPassword"])){
3555
 
3556
								#則設定連線的密碼
3557
								$conf["db"]["setColumnIndex"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
3558
 
3559
								}#if end
3560
 
3561
							#如果有設定 $conf["dbPort"]	
3562
							if(isset($conf["dbPort"])){
3563
 
3564
								#設定 $conf["dbPort"]
3565
								$conf["db"]["setColumnIndex"]["dbPort"]=$conf["dbPort"];
3566
 
3567
								}#if end	
3568
 
3569
							$setColumnIndexResult=db::setColumnIndex($conf["db"]["setColumnIndex"]);
3570
							unset($conf["db"]["setColumnIndex"]);
3571
 
3572
							#如果設置 column index 失敗
3573
							if($setColumnIndexResult["status"]==="false"){
3574
 
3575
								#設置出錯的識別
3576
								$result["status"]="false";
3577
 
3578
								#設置錯誤訊息
3579
								$result["error"]=$setColumnIndexResult;
3580
 
3581
								#回傳結果
3582
								return $result;
3583
 
3584
								}#if end
3585
 
3586
							#如果有執行 sql
3587
							if(isset($setColumnIndexResult["sql"])){
3588
 
3589
								#取得執行的sql字串
3590
								$result["sql"][]=$setColumnIndexResult["sql"];
3591
 
3592
								}#if end
3593
 
3594
							#如果 $setColumnIndexResult["status"] 為 "fasle"
3595
							if($setColumnIndexResult["status"]=="fasle"){
3596
 
3597
								#設置出錯的識別
3598
								$result["status"]="false";
3599
 
3600
								#設置錯誤訊息
3601
								$result["error"]=$setColumnIndexResult;
3602
 
3603
								#回傳結果
3604
								return $result;
3605
 
3606
								}#if end
3607
 
3608
							}#if end
3609
 
3610
						}#if end
3611
 
3612
					#如果 $tableColumnDetial["key"]["exist"] 等於 "fasle",代表沒有索引鍵
3613
					if($tableColumnDetial["key"]["exist"]=="false"){
3614
 
3615
						#建立索引鍵
3616
						#函式說明:
3617
						#新增資料表的欄位
3618
						#回傳結果:
3619
						#$result["status"],"true",代表執行成功;"false"代表執行失敗
3620
						#$result["error"],錯誤訊息陣列
3621
						#必填參數:
3622
						$conf["db"]["setColumnIndex"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
3623
						$conf["db"]["setColumnIndex"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
3624
						$conf["db"]["setColumnIndex"]["selectedDataBaseName"]=$conf["selectedDataBaseName"];#爲目標資料表所屬的資料庫
3625
						$conf["db"]["setColumnIndex"]["selectedDataTableName"]=$conf["selectedDataTableName"];#爲目標資料表所屬的資料庫
3626
						$conf["db"]["setColumnIndex"]["indexedColumnName"]=$conf["newColumnName"];#要設爲index的欄位名稱
3627
						#可省略參數:
3628
 
3629
						#如果 $conf["dbPassword"] 存在
3630
						if(isset($conf["dbPassword"])){
3631
 
3632
							#則設定連線的密碼
3633
							$conf["db"]["setColumnIndex"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
3634
 
3635
							}#if end
3636
 
3637
						#如果有設定 $conf["dbPort"]	
3638
						if(isset($conf["dbPort"])){
3639
 
3640
							#設定 $conf["dbPort"]
3641
							$conf["db"]["setColumnIndex"]["dbPort"]=$conf["dbPort"];
3642
 
3643
							}#if end	
3644
 
3645
						$setColumnIndexResult=db::setColumnIndex($conf["db"]["setColumnIndex"]);
3646
						unset($conf["db"]["setColumnIndex"]);
3647
 
3648
						#取得執行的sql字串.
3649
						$result["sql"][]=$setColumnIndexResult["sql"];
3650
 
3651
						#如果 $setColumnIndexResult["status"] 為 "fasle"
3652
						if($setColumnIndexResult["status"]=="fasle"){
3653
 
3654
							#設置出錯的識別
3655
							$result["status"]="false";
3656
 
3657
							#設置錯誤訊息
3658
							$result["error"]=$setColumnIndexResult;
3659
 
3660
							#回傳結果
3661
							return $result;
3662
 
3663
							}#if end
3664
 
3665
						}#if end
3666
 
3667
					#中斷switch
3668
					break;
3669
 
3670
				#如果是 foreign key
3671
				case "foreign key":
3672
 
3673
					#echo "enter foreign key";
3674
 
3675
					#檢查該欄位是否為foreign key
3676
					#如果 $tableColumnDetial["foreignKey"]["exist"] 等於 "true",代表有外鍵
3677
					if($tableColumnDetial["foreignKey"]["exist"]=="true"){
3678
 
3679
						#echo "have foreig key";
3680
 
3681
						#如果 $tableColumnDetial["foreignKey"]["columnName"][$conf["dbInformation"]["newColumnName"]] 存在,則代表該欄位為索引鍵
3682
						if(isset($tableColumnDetial["foreignKey"]["columnName"][$conf["newColumnName"]])){
3683
 
3684
							#移除外鍵
3685
							#函式說明:
3686
							#移除資料表單1欄位的外鍵
3687
							#回傳結果:
3688
							#$result["status"],"true",代表執行成功;"false"代表執行失敗
3689
							#$result["error"],錯誤訊息陣列
3690
							#必填參數:
3691
							$conf["db"]["eraseForeignKey"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
3692
							$conf["db"]["eraseForeignKey"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
3693
							$conf["db"]["eraseForeignKey"]["selectedDataBaseName"]=$conf["selectedDataBaseName"];#爲目標資料表所屬的資料庫
3694
							$conf["db"]["eraseForeignKey"]["selectedDataTableName"]=$conf["selectedDataTableName"];#爲目標資料表所屬的資料庫
3695
							$conf["db"]["eraseForeignKey"]["erasedForeignKeyColumnConstraintName"]=$tableColumnDetial["foreignKey"]["constraintName"][$conf["newColumnName"]];#要移除外鍵欄位的CONSTRAINT名稱
3696
							#可省略參數: 
3697
 
3698
							#如果 $conf["dbPassword"] 存在
3699
							if(isset($conf["dbPassword"])){
3700
 
3701
								#則設定連線的密碼
3702
								$conf["db"]["eraseForeignKey"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
3703
 
3704
								}#if end
3705
 
3706
							#如果有設定 $conf["dbPort"]	
3707
							if(isset($conf["dbPort"])){
3708
 
3709
								#設定 $conf["dbPort"]
3710
								$conf["db"]["eraseForeignKey"]["dbPort"]=$conf["dbPort"];
3711
 
3712
								}#if end
3713
 
3714
							$eraseForeignKeyResult=db::eraseForeignKey($conf["db"]["eraseForeignKey"]);
3715
							unset($conf["db"]["eraseForeignKey"]);
3716
 
3717
							#取得執行的sql字串
3718
							$result["sql"][]=$eraseForeignKeyResult["sql"];
3719
 
3720
							#如果 $eraseForeignKeyResult["status"]等於"fasle"
3721
							if($eraseForeignKeyResult["status"]=="false"){
3722
 
3723
								#設置出錯的識別
3724
								$result["status"]="false";
3725
 
3726
								#設置錯誤訊息
3727
								$result["error"]=$eraseForeignKeyResult;
3728
 
3729
								#回傳結果
3730
								return $result;
3731
 
3732
								}#if end
3733
 
3734
							}#if end
3735
 
3736
						}#if end
3737
 
3738
					#檢查該欄位是否為index
3739
					#如果 $tableColumnDetial["key"]["exist"] 等於 "false",代表沒有索引鍵
3740
					if($tableColumnDetial["key"]["exist"]=="false"){
3741
 
3742
						#echo "have no index";
3743
 
3744
						#建立索引鍵
3745
						#函式說明:
3746
						#新增資料表的欄位
3747
						#回傳結果:
3748
						#$result["status"],"true",代表執行成功;"false"代表執行失敗
3749
						#$result["error"],錯誤訊息陣列
3750
						#必填參數:
3751
						$conf["db"]["setColumnIndex"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
3752
						$conf["db"]["setColumnIndex"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
3753
						$conf["db"]["setColumnIndex"]["selectedDataBaseName"]=$conf["selectedDataBaseName"];#爲目標資料表所屬的資料庫
3754
						$conf["db"]["setColumnIndex"]["selectedDataTableName"]=$conf["selectedDataTableName"];#爲目標資料表所屬的資料庫
3755
						$conf["db"]["setColumnIndex"]["indexedColumnName"]=$conf["newColumnName"];#要設爲index的欄位名稱
3756
						#可省略參數:
3757
 
3758
						#如果 $conf["dbPassword"] 存在
3759
						if(isset($conf["dbPassword"])){
3760
 
3761
							#則設定連線的密碼
3762
							$conf["db"]["setColumnIndex"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
3763
 
3764
							}#if end
3765
 
3766
						#如果有設定 $conf["dbPort"]	
3767
						if(isset($conf["dbPort"])){
3768
 
3769
							#設定 $conf["dbPort"]
3770
							$conf["db"]["setColumnIndex"]["dbPort"]=$conf["dbPort"];
3771
 
3772
							}#if end	
3773
 
3774
						$setColumnIndexResult=db::setColumnIndex($conf["db"]["setColumnIndex"]);
3775
						unset($conf["db"]["setColumnIndex"]);
3776
 
3777
						#取得執行的sql字串
3778
						$result["sql"][]=$setColumnIndexResult["sql"];
3779
 
3780
						#如果 $setColumnIndexResult["status"] 為 "false"
3781
						if($setColumnIndexResult["status"]=="false"){
3782
 
3783
							#設置出錯的識別
3784
							$result["status"]="false";
3785
 
3786
							#設置錯誤訊息
3787
							$result["error"]=$setColumnIndexResult;
3788
 
3789
							#回傳結果
3790
							return $result;
3791
 
3792
							}#if end
3793
 
3794
						}#if end
3795
 
3796
					#反之有索引鍵	
3797
					#如果目標欄位不是索引鍵
3798
					else if(!isset($tableColumnDetial["key"][$conf["newColumnName"]])){
3799
 
3800
						#建立索引鍵
3801
						#函式說明:
3802
						#新增資料表的欄位
3803
						#回傳結果:
3804
						#$result["status"],"true",代表執行成功;"false"代表執行失敗
3805
						#$result["error"],錯誤訊息陣列
3806
						#必填參數:
3807
						$conf["db"]["setColumnIndex"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
3808
						$conf["db"]["setColumnIndex"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
3809
						$conf["db"]["setColumnIndex"]["selectedDataBaseName"]=$conf["selectedDataBaseName"];#爲目標資料表所屬的資料庫
3810
						$conf["db"]["setColumnIndex"]["selectedDataTableName"]=$conf["selectedDataTableName"];#爲目標資料表所屬的資料庫
3811
						$conf["db"]["setColumnIndex"]["indexedColumnName"]=$conf["newColumnName"];#要設爲index的欄位名稱
3812
						#可省略參數:
3813
 
3814
						#如果 $conf["dbPassword"] 存在
3815
						if(isset($conf["dbPassword"])){
3816
 
3817
							#則設定連線的密碼
3818
							$conf["db"]["setColumnIndex"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
3819
 
3820
							}#if end
3821
 
3822
						#如果有設定 $conf["dbPort"]	
3823
						if(isset($conf["dbPort"])){
3824
 
3825
							#設定 $conf["dbPort"]
3826
							$conf["db"]["setColumnIndex"]["dbPort"]=$conf["dbPort"];
3827
 
3828
							}#if end			
3829
 
3830
						$setColumnIndexResult=db::setColumnIndex($conf["db"]["setColumnIndex"]);
3831
						unset($conf["db"]["setColumnIndex"]);
3832
 
3833
						#取得執行的sql字串
3834
						$result["sql"][]=$setColumnIndexResult["sql"];
3835
 
3836
						#如果 $setColumnIndexResult["status"] 為 "false"
3837
						if($setColumnIndexResult["status"]=="false"){
3838
 
3839
							#設置出錯的識別
3840
							$result["status"]="false";
3841
 
3842
							#設置錯誤訊息
3843
							$result["error"]=$setColumnIndexResult;
3844
 
3845
							#回傳結果
3846
							return $result;
3847
 
3848
							}#if end					
3849
 
3850
						}#else end
3851
 
3852
					#檢查該欄位的foreign key設定參數是否存在
3853
					#函式說明:
3854
					#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
3855
					#回傳結果:
3856
					#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
3857
					#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
3858
					#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
3859
					#必填參數:
3860
					$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
3861
					$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("foreignKeyReferenceTable","foreignKeyReferenceColumn");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
3862
					#可省略參數:
3863
					#$conf["variableType"]=array();#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
3864
					#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
3865
					$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
3866
					unset($conf["variableCheck"]["isexistMuti"]);
3867
 
3868
					#如果檢查失敗
3869
					if($checkResult["status"]=="false"){
3870
 
3871
						#設置執行失敗的訊息
3872
						$result["status"]="false";
3873
 
3874
						#設置錯誤訊息
3875
						$result["error"]=$checkResult;
3876
 
3877
						#回傳結果
3878
						return $result;
3879
 
3880
						}#if end
3881
 
3882
					#如果檢查不通過
3883
					if($checkResult["passed"]=="false"){
3884
 
3885
						#設置執行失敗的訊息
3886
						$result["status"]="false";
3887
 
3888
						#設置錯誤訊息
3889
						$result["error"]=$checkResult;
3890
 
3891
						#回傳結果
3892
						return $result;
3893
 
3894
						}#if end
3895
 
3896
					#如果 $conf["foreignKeyUpdateAction"] 不存在
3897
					if(!isset($conf["foreignKeyUpdateAction"])){
3898
 
3899
						#則預設為"CASCADE"將有所關聯的紀錄行也會進行刪除或修改。
3900
						$conf["foreignKeyUpdateAction"]="CASCADE";#若要設定foreign key的話,可以指定參考的資料表欄位更新時該欄位該怎麼處理,預設為"CASCADE",會將有所關聯的紀錄行也會進行刪除或修改。"SET NULL"代表會將有所關聯的紀錄行設定成 NULL。"NO ACTION"代表有存在的關聯紀錄行時,會禁止父資料表的刪除或修改動作。
3901
 
3902
						}#if end
3903
 
3904
					#如果 $conf["foreignKeyDeleteAction"] 沒有設定
3905
					if(!isset($conf["foreignKeyDeleteAction"])){
3906
 
3907
						#預設為"SET NULL",會將有所關聯的紀錄行設定成 NULL。
3908
						$conf["foreignKeyDeleteAction"]="SET NULL";#若要設定foreign key的話,可以指定參考的資料表欄位移除時該欄位該怎麼處理,預設為"SET NULL",會將有所關聯的紀錄行設定成 NULL。"NO ACTION"代表有存在的關聯紀錄行時,會禁止父資料表的刪除或修改動作。
3909
 
3910
						}#if end
3911
 
3912
					#檢查目標欄位的 key constraint 名稱
3913
					#取得其key為何種
3914
					#函式說明:
3915
					#取得資料表所有欄位的詳細資訊
3916
					#回傳的內容:
3917
					#$result["status"],執行結果,"true"代表執行成功;"false"代表執行失敗
3918
					#$result["error"],錯誤訊息陣列
3919
					#$result["sql"],執行的sql語法
3920
					#$result["oriInput"],原始的資料表欄位資訊
3921
					#$result["everyLine"],逐行的欄位資訊
3922
					#$result["tableName"],當前查詢的資料表名稱
3923
					#$result["engine"],資料表使用的儲存引擎
3924
					#$result["charset"],資料表預設的編碼
3925
					#$result["columnName"][$i],各欄位的名稱陣列,$i爲0開始的數字,也可以使用欄位的名稱。
3926
					#$result["columnVarTypeAndLengthLimit"][$i],各欄位儲存的變數形態與長度限制,$i爲0開始的數字,也可以使用欄位的名稱。
3927
					#$result["columnNotNull"][$i],各欄位是否可以不爲null,"true"爲可以不爲null;"false"爲可以爲"null",$i爲0開始的數字,也可以使用欄位的名稱。
3928
					#$result["columnAutoIncrement"][$i],各欄位是否會自動加1,"true"爲會;"false"爲不會,$i爲0開始的數字,也可以使用欄位的名稱。
3929
					#$result["columnDefault"][$i],各欄位的預設內容,若無則爲"沒有指定",$i爲0開始的數字,也可以使用欄位的名稱。
3930
					#$result["columnOnUpdateAction"][$i],當資料有修改時,該欄位的內容要怎麼因應,$i爲0開始的數字,也可以使用欄位的名稱。
3931
					#$result["columnCharacterSet"][$i],各欄位使用的CharacterSet,$i爲0開始的數字,也可以使用欄位的名稱。
3932
					#$result["columnCollate"][$i],各欄位使用的Collate,$i爲0開始的數字,也可以使用欄位的名稱。
3933
					#$result["key"]["exist"],該資料表是否有索引鍵,"true"代表有;"false"代表沒有。
3934
					#$result["key"][$j],該資料表的索引鍵陣列,$j爲0開始的數字,也可以使用欄位的名稱。
3935
					#$result["primaryKey"],該資料表的主鍵
3936
					#$result["foreignKey"]["exist"],該資料表是否有foreign key,"true"代表有;"fasle"代表沒有。
3937
					#$result["foreignKey"]["constraintName"][$k],用來識別外鍵的CONSTRAINT名稱陣列,$k爲0開始的數字,也可以使用欄位的名稱。
3938
					#$result["foreignKey"]["columnName"][$k],外鍵的名稱陣列
3939
					#$result["foreignKey"]["referencesTable"][$k],外鍵參照的欄位,$k爲0開始的數字
3940
					#$result["foreignKey"]["referencesColumn"][$k],外鍵參照的欄位屬於哪個資料表,$k爲0開始的數字
3941
					#$result["foreignKey"]["OnUpdateAction"][$l],當參照的欄位資料更新時,會怎麼同步,$l爲0開始的數字
3942
					#$result["foreignKey"]["OnDeleteAction"][$m],當參照的欄位資料移除時,會怎麼同步,$m爲0開始的數字
3943
					#必填參數:
3944
					$conf["db"]["getTableColumnDetailInfo"]["dbAddress"]=$conf["dbAddress"];
3945
					$conf["db"]["getTableColumnDetailInfo"]["dbAccount"]=$conf["dbAccount"];
3946
					$conf["db"]["getTableColumnDetailInfo"]["selectedDataBase"]=$conf["selectedDataBaseName"];
3947
					$conf["db"]["getTableColumnDetailInfo"]["selectedDataTable"]=$conf["selectedDataTableName"];
3948
					#可省略參數:
3949
 
3950
					#如果 $conf["dbPassword"] 有設定
3951
					if(isset($conf["dbPassword"])){
3952
 
3953
						#套用連限時的密碼
3954
						$conf["db"]["getTableColumnDetailInfo"]["dbPassword"]=$conf["dbPassword"];
3955
 
3956
						}#if end
3957
 
3958
					#如果有設定 $conf["dbPort"]	
3959
					if(isset($conf["dbPort"])){
3960
 
3961
						#設定 $conf["dbPort"]
3962
						$conf["db"]["getTableColumnDetailInfo"]["dbPort"]=$conf["dbPort"];
3963
 
3964
						}#if end			
3965
 
3966
					$tableColumnDetial=db::getTableColumnDetailInfo($conf["db"]["getTableColumnDetailInfo"]);
3967
					unset($conf["db"]["getTableColumnDetailInfo"]);#卸除變數,避免錯誤產生.
3968
 
3969
					#如果取得資料表結構失敗
3970
					if($tableColumnDetial["status"]=="false"){
3971
 
3972
						#設置執行不正常
3973
						$result["status"]="false";
3974
 
3975
						#設置執行錯誤訊息
3976
						$result["error"]=$tableColumnDetial;
3977
 
3978
						#回傳結果
3979
						return $result;
3980
 
3981
						}#if end	
3982
 
3983
					#依據設定將該欄位設定為foreign key
3984
 
3985
					#設定其參照的資料表與欄位的sql語法
3986
					$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"];
3987
 
3988
					#執行 sql 語法
3989
					#函式說明:
3990
					#執行mysql指令
3991
					#回傳結果::
3992
					#$result["status"],"true"為執行成功;"false"為執行失敗。
3993
					#$result["error"],錯誤訊息的陣列
3994
					#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
3995
					#$result["queryString"],mysql查詢的語言
3996
					#查詢號的解果,需要解析。
3997
					#必填參數:
3998
					$conf["db"]["execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
3999
					$conf["db"]["execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
4000
					$conf["db"]["execMysqlQuery"]["dbSql"]=$sql;#要執行sql語法
4001
					#可省略參數: 
4002
 
4003
					#如果有設定連線密碼
4004
					if(isset($conf["dbPassword"])){
4005
 
4006
						$conf["db"]["execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
4007
 
4008
						}#if end
4009
 
4010
					#$conf["db"]["execMysqlQuery"]["dbName"]=$conf["selectedDataBaseName"];#為是否要指定資料庫,預設不指定.
4011
 
4012
					#如果有設定 $conf["dbPort"]	
4013
					if(isset($conf["dbPort"])){
4014
 
4015
						#設定 $conf["dbPort"]
4016
						$conf["db"]["execMysqlQuery"]["dbPort"]=$conf["dbPort"];
4017
 
4018
						}#if end	
4019
 
4020
					$sqlExecResult=db::execMysqlQuery($conf["db"]["execMysqlQuery"]);
4021
					unset($conf["db"]["execMysqlQuery"]);
4022
 
4023
					#var_dump($sqlExecResult);
4024
 
4025
					#取得執行的sql語法
4026
					$result["sql"][]=$sqlExecResult["queryString"];
4027
 
4028
					#如果執行 sql 語法錯誤
4029
					if($sqlExecResult["status"]=="false"){
4030
 
4031
						#echo "fasle";
4032
 
4033
						#設定執行失敗的識別
4034
						$result["status"]="false";
4035
 
4036
						#設定錯誤訊息
4037
						$result["error"]=$sqlExecResult;
4038
 
4039
						#回傳結果
4040
						return $result;
4041
 
4042
						}#if end					
4043
 
4044
					#跳出 foreign key
4045
					break;
4046
 
4047
				#如果不是以上參數
4048
				default:
4049
 
4050
					#設定執行錯誤的識別
4051
					$result["status"]="false";
4052
 
4053
					#設定錯誤訊息
4054
					$result["error"]="可用的鍵型為index、foregin key、primary key";
4055
 
4056
					#回傳結果
4057
					return $result;
4058
 
4059
				}#switch end
4060
 
4061
			}#if end
4062
 
4063
		#執行到這邊代表執行成功
4064
		#設定執行成功的識別
4065
		$result["status"]="true";
4066
 
4067
		#回傳結果
4068
		return $result;
4069
 
4070
		}#function editColumn end
4071
 
4072
	/*
4073
	#函式說明:
4074
	#新增資料表的欄位
4075
	#回傳結果:
4076
	#$result["status"],"true",代表執行成功;"false"代表執行失敗.
4077
	#$result["function"],當前執行的函數名稱.
4078
	#$result["error"],錯誤訊息陣列.
4079
	#$result["warning"],警告訊息.
4080
	#$result["sql"],執行的sql字串.
4081
	#必填參數:
4082
	$conf["dbAddress"],字串,爲mysql-Server的位置.
4083
	$conf["dbAddress"]=$dbAddress;
4084
	$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號.
4085
	$conf["dbAccount"]=$dbAccount;
4086
	$conf["selectedDataBaseName"],字串,爲目標資料表所屬的資料庫.
4087
	$conf["selectedDataBaseName"]="";
4088
	$conf["selectedDataTableName"],字串,爲目標資料表所屬的資料庫.
4089
	$conf["selectedDataTableName"]="";
4090
	$conf["indexedColumnName"],字串,要設爲index的欄位名稱.
4091
	$conf["indexedColumnName"]="";
4092
	#可省略參數:
4093
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
4094
	#$conf["dbPassword"]=$dbPassword;
4095
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,預設為3306.
4096
	#$conf["dbPort"]="3306";
4097
	#參考資料:
4098
	#無.
4099
	#備註:
4100
	#無.
4101
	*/
4102
	public static function setColumnIndex($conf){
4103
 
4104
		#初始化要回傳的內容
4105
		$result=array();
4106
 
4107
		#取得當前執行的函數名稱
4108
		$result["function"]=__FUNCTION__;
4109
 
4110
		#如果 $conf 不為陣列
4111
		if(gettype($conf)!="array"){
4112
 
4113
			#設置執行失敗
4114
			$result["status"]="false";
4115
 
4116
			#設置執行錯誤訊息
4117
			$result["error"][]="\$conf變數須為陣列形態";
4118
 
4119
			#如果傳入的參數為 null
4120
			if($conf==null){
4121
 
4122
				#設置執行錯誤訊息
4123
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
4124
 
4125
				}#if end
4126
 
4127
			#回傳結果
4128
			return $result;
4129
 
4130
			}#if end
4131
 
4132
		#函式說明:
4133
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
4134
		#回傳結果:
4135
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
4136
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
4137
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
4138
		#必填參數:
4139
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
4140
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("dbAddress","dbAccount","selectedDataBaseName","selectedDataTableName","indexedColumnName");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
4141
		#可省略參數:
4142
		#$conf["variableType"]=array();#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
4143
		#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
4144
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
4145
		unset($conf["variableCheck"]["isexistMuti"]);
4146
 
4147
		#如果檢查不通過
4148
		if($checkResult["passed"]=="false"){
4149
 
4150
			#設置執行失敗的訊息
4151
			$result["status"]="false";
4152
 
4153
			#設置錯誤訊息
4154
			$result["error"]=$checkResult;
4155
 
4156
			#回傳結果
4157
			return $result;
4158
 
4159
			}#if end
4160
 
4161
		#查詢該欄位是否已經是index了
4162
		#函式說明:
4163
		#取得資料表所有欄位的詳細資訊
4164
		#回傳的內容:
4165
		#$result["status"],執行結果,"true"代表執行成功;"false"代表執行失敗
4166
		#$result["error"],錯誤訊息陣列
4167
		#$result["function"],當前執行的函數名稱.
4168
		#$result["sql"],執行的sql語法
4169
		#$result["oriInput"],原始的資料表欄位資訊
4170
		#$result["everyLine"],逐行的欄位資訊
4171
		#$result["tableName"],當前查詢的資料表名稱
4172
		#$result["engine"],資料表使用的儲存引擎
4173
		#$result["charset"],資料表預設的編碼
4174
		#$result["columnName"][$i],各欄位的名稱陣列,$i爲1開始的數字,也可以使用欄位的名稱。
4175
		#$result["columnVarTypeAndLengthLimit"][$i],各欄位儲存的變數形態與長度限制,$i爲1開始的數字,也可以使用欄位的名稱。
4176
		#$result["columnVarType"][$i],各欄位變數儲存的型態,$i爲1開始的數字,也可以使用欄位的名稱.
4177
		#$result["columnVarLengthLimit"][$i],個欄位變數的長度限制,若不存在其限制,則為"",$i爲1開始的數字,也可以使用欄位的名稱.
4178
		#$result["columnNotNull"][$i],各欄位是否不可爲null,"true"爲不可以爲null;"false"爲可爲"null",$i爲1開始的數字,也可以使用欄位的名稱。
4179
		#$result["columnAutoIncrement"][$i],各欄位是否會自動加1,"true"爲會;"false"爲不會,$i爲1開始的數字,也可以使用欄位的名稱。
4180
		#$result["columnDefault"][$i],各欄位的預設內容,若無則爲"沒有指定",$i爲1開始的數字,也可以使用欄位的名稱。
4181
		#$result["columnOnUpdateAction"][$i],當資料有修改時,該欄位的內容要怎麼因應,$i爲1開始的數字,也可以使用欄位的名稱。
4182
		#$result["columnCharacterSet"][$i],各欄位使用的CharacterSet,$i爲1開始的數字,也可以使用欄位的名稱。
4183
		#$result["columnCollate"][$i],各欄位使用的Collate,$i爲1開始的數字,也可以使用欄位的名稱。
4184
		#$result["key"]["exist"],該資料表是否有索引鍵,"true"代表有;"false"代表沒有。
4185
		#$result["key"][$j],該資料表的索引鍵陣列,$j爲0開始的數字,也可以使用欄位的名稱。
4186
		#$result["keyConstraintName"][$j],該資料表用於識別索引鍵的CONSTRAINT名稱陣列,$j爲1開始的數字,也可以使用欄位的名稱。
4187
		#$result["primaryKey"],該資料表的主鍵
4188
		#$result["foreignKey"]["exist"],該資料表是否有foreign key,"true"代表有;"fasle"代表沒有。
4189
		#$result["foreignKey"]["constraintName"][$k],用來識別外鍵的CONSTRAINT名稱陣列,$k爲1開始的數字,也可以使用欄位的名稱。
4190
		#$result["foreignKey"]["columnName"][$k],外鍵的名稱陣列,$k爲1開始的數字,也可以使用欄位的名稱。
4191
		#$result["foreignKey"]["referencesTable"][$k],外鍵參照的欄位,$k爲1開始的數字,,也可用欄位的名稱來找value.
4192
		#$result["foreignKey"]["referencesColumn"][$k],外鍵參照的欄位屬於哪個資料表,$k爲1開始的數字,也可用欄位的名稱來找value.
4193
		#$result["foreignKey"]["onUpdateAction"][$i],當參照的欄位資料更新時,會怎麼同步,$i爲1開始的數字,也可用欄位的名稱來找value.
4194
		#$result["foreignKey"]["onDeleteAction"][$i],當參照的欄位資料移除時,會怎麼同步,$i爲1開始的數字,也可用欄位的名稱來找value.
4195
		#必填參數:
4196
		$conf["db::getTableColumnDetailInfo"]["dbAddress"]=$conf["dbAddress"];#資料庫的網路位置
4197
		$conf["db::getTableColumnDetailInfo"]["dbAccount"]=$conf["dbAccount"];#連線到資料庫要用的帳號
4198
		$conf["db::getTableColumnDetailInfo"]["selectedDataBase"]=$conf["selectedDataBaseName"];#連線到資料庫要選擇的資料庫
4199
		$conf["db::getTableColumnDetailInfo"]["selectedDataTable"]=$conf["selectedDataTableName"];#連線到資料庫要檢視的資料表
4200
		#可省略參數:
4201
 
4202
		#如果 $conf["dbPassword"] 有設定
4203
		if(isset($conf["dbPassword"])){
4204
 
4205
			#設定其密碼
4206
			$conf["db::getTableColumnDetailInfo"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
4207
 
4208
			}#if end
4209
 
4210
		#如果有設定 $conf["dbPort"]	
4211
		if(isset($conf["dbPort"])){
4212
 
4213
			#設定 $conf["dbPort"]
4214
			$conf["db::getTableColumnDetailInfo"]["dbPort"]=$conf["dbPort"];
4215
 
4216
			}#if end
4217
 
4218
		#備註:
4219
		#如果forign key參照的是別的資料庫,將無法取得參照的資料庫名稱?
4220
		$getTableColumnDetailInfo=db::getTableColumnDetailInfo($conf["db::getTableColumnDetailInfo"]);
4221
		unset($conf["db::getTableColumnDetailInfo"]);	
4222
 
4223
		#如果取得資料表資訊失敗
4224
		if($getTableColumnDetailInfo["status"]=="false"){
4225
 
4226
			#設置錯誤訊息
4227
			$result["status"]="false";
4228
 
4229
			#設置錯誤提示
4230
			$result["error"]=$getTableColumnDetailInfo;
4231
 
4232
			#回傳結果
4233
			return $result;
4234
 
4235
			}#if end	
4236
 
4237
		#如果該欄位已經是index了
4238
		if(isset($getTableColumnDetailInfo["key"][$conf["indexedColumnName"]])){
4239
 
4240
			#設置執行正常
4241
			$result["status"]="true";
4242
 
4243
			#設置警告提示
4244
			$result["warning"][]="已經是index key了";
4245
 
4246
			#回傳結果
4247
			return $result;
4248
 
4249
			}#if end
4250
 
4251
		#組合sql語言
4252
		$sql="alter table ".$conf["selectedDataBaseName"].".".$conf["selectedDataTableName"]." add index(`".$conf["indexedColumnName"]."`)";
4253
 
4254
		#執行sql語法
4255
		#函式說明:
4256
		#執行mysql指令
4257
		#回傳結果::
4258
		#$result["status"],"true"為執行成功;"false"為執行失敗。
4259
		#$result["error"],錯誤訊息的陣列
4260
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
4261
		#$result["queryString"],mysql查詢的語言
4262
		#查詢號的解果,需要解析。
4263
		#必填參數:
4264
		$conf["db"]["execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
4265
		$conf["db"]["execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
4266
		$conf["db"]["execMysqlQuery"]["dbSql"]=$sql;#要執行sql語法
4267
		#可省略參數:
4268
 
4269
		#如果 $conf["dbPassword"] 有設定
4270
		if(isset($conf["dbPassword"])){
4271
 
4272
			#設定其密碼
4273
			$conf["db"]["execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
4274
 
4275
			}#if end
4276
 
4277
		#如果有設定 $conf["dbPort"]	
4278
		if(isset($conf["dbPort"])){
4279
 
4280
			#設定 $conf["dbPort"]
4281
			$conf["db"]["execMysqlQuery"]["dbPort"]=$conf["dbPort"];
4282
 
4283
			}#if end
4284
 
4285
		$queryResult=db::execMysqlQuery($conf["db"]["execMysqlQuery"]);
4286
		unset($conf["db"]["execMysqlQuery"]);
4287
 
4288
		#取得執行的sql語法
4289
		$result["sql"]=$queryResult["queryString"];
4290
 
4291
		#如果有錯誤
4292
		if($queryResult["status"]=="false"){
4293
 
4294
			#設置錯誤訊息
4295
			$result["status"]="false";
4296
 
4297
			#設置錯誤提示
4298
			$result["error"]=$queryResult;
4299
 
4300
			#回傳結果
4301
			return $result;
4302
 
4303
			}#if end
4304
 
4305
		#執行到這邊代表執行成功
4306
 
4307
		#設置成功訊息
4308
		$result["status"]="true";
4309
 
4310
		#回傳結果
4311
		return $result;
4312
 
4313
		}#function setColumnIndex end
4314
 
4315
	/*
4316
	#函式說明:
4317
	#取得資料表所有欄位的詳細資訊
4318
	#回傳的內容:
4319
	#$result["status"],執行結果,"true"代表執行成功;"false"代表執行失敗
4320
	#$result["error"],錯誤訊息陣列
4321
	#$result["function"],當前執行的函數名稱.
4322
	#$result["sql"],執行的sql語法
4323
	#$result["oriInput"],原始的資料表欄位資訊
4324
	#$result["everyLine"],逐行的欄位資訊
4325
	#$result["tableName"],當前查詢的資料表名稱
4326
	#$result["engine"],資料表使用的儲存引擎
4327
	#$result["charset"],資料表預設的編碼
4328
	#$result["columnName"][$i],各欄位的名稱陣列,$i爲1開始的數字,也可以使用欄位的名稱。
4329
	#$result["columnVarTypeAndLengthLimit"][$i],各欄位儲存的變數形態與長度限制,$i爲1開始的數字,也可以使用欄位的名稱。
4330
	#$result["columnVarType"][$i],各欄位變數儲存的型態,$i爲1開始的數字,也可以使用欄位的名稱.
4331
	#$result["columnVarLengthLimit"][$i],個欄位變數的長度限制,若不存在其限制,則為"",$i爲1開始的數字,也可以使用欄位的名稱.
4332
	#$result["columnNotNull"][$i],各欄位是否不可爲null,"true"爲不可以爲null;"false"爲可爲"null",$i爲1開始的數字,也可以使用欄位的名稱。
4333
	#$result["columnAutoIncrement"][$i],各欄位是否會自動加1,"true"爲會;"false"爲不會,$i爲1開始的數字,也可以使用欄位的名稱。
4334
	#$result["columnDefault"][$i],各欄位的預設內容,若無則爲"沒有指定",$i爲1開始的數字,也可以使用欄位的名稱。
4335
	#$result["columnOnUpdateAction"][$i],當資料有修改時,該欄位的內容要怎麼因應,$i爲1開始的數字,也可以使用欄位的名稱。
4336
	#$result["columnCharacterSet"][$i],各欄位使用的CharacterSet,$i爲1開始的數字,也可以使用欄位的名稱。
4337
	#$result["columnCollate"][$i],各欄位使用的Collate,$i爲1開始的數字,也可以使用欄位的名稱。
4338
	#$result["columnComment"][$i],各欄位的註解,$i爲1開始的數字,也可以使用欄位的名稱。
4339
	#$result["key"]["exist"],該資料表是否有索引鍵,"true"代表有;"false"代表沒有。
4340
	#$result["key"][$j],該資料表的索引鍵陣列,$j爲0開始的數字,也可以使用欄位的名稱。
4341
	#$result["keyConstraintName"][$j],該資料表用於識別索引鍵的CONSTRAINT名稱陣列,$j爲1開始的數字,也可以使用欄位的名稱。
4342
	#$result["primaryKey"],該資料表的主鍵
4343
	#$result["foreignKey"]["exist"],該資料表是否有foreign key,"true"代表有;"fasle"代表沒有。
4344
	#$result["foreignKey"]["constraintName"][$k],用來識別外鍵的CONSTRAINT名稱陣列,$k爲1開始的數字,也可以使用欄位的名稱。
4345
	#$result["foreignKey"]["columnName"][$k],外鍵的名稱陣列,$k爲1開始的數字,也可以使用欄位的名稱。
4346
	#$result["foreignKey"]["referencesTable"][$k],外鍵參照的欄位,$k爲1開始的數字,,也可用欄位的名稱來找value.
4347
	#$result["foreignKey"]["referencesColumn"][$k],外鍵參照的欄位屬於哪個資料表,$k爲1開始的數字,也可用欄位的名稱來找value.
4348
	#$result["foreignKey"]["onUpdateAction"][$i],當參照的欄位資料更新時,會怎麼同步,$i爲1開始的數字,也可用欄位的名稱來找value.
4349
	#$result["foreignKey"]["onDeleteAction"][$i],當參照的欄位資料移除時,會怎麼同步,$i爲1開始的數字,也可用欄位的名稱來找value.
4350
	#必填參數:
4351
	#$conf["dbAddress"],字串,資料庫的網路位置
4352
	$conf["dbAddress"]="";
4353
	#$conf["dbAccount"],字串,連線到資料庫要用的帳號
4354
	$conf["dbAccount"]="";連線到資料庫要用的帳號
4355
	#$conf["selectedDataBase"]字串,連線到資料庫要選擇的資料庫
4356
	$conf["selectedDataBase"]=$dbName;
4357
	#$conf["selectedDataTable"],字串,連線到資料庫要檢視的資料表
4358
	$conf["selectedDataTable"]="";
4359
	#可省略參數:
4360
	#$conf["dbPassword"],字串,連線到資料庫要用的密碼
4361
	#$conf["dbPassword"]=$dbPassword;
4362
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,預設為3306.
4363
	#$conf["dbPort"]="3306";
4364
	#參考資料:
4365
	#無.
4366
	#備註:
4367
	#如果forign key參照的是別的資料庫,將無法取得參照的資料庫名稱?
4368
	*/
4369
	public static function getTableColumnDetailInfo(&$conf){
4370
 
4371
		#初始化要回傳的內容
4372
		$result=array();
4373
 
4374
		#取得當前執行的函數名稱
4375
		$result["function"]=__FUNCTION__;
4376
 
4377
		#如果 $conf 不為陣列
4378
		if(gettype($conf)!="array"){
4379
 
4380
			#設置執行失敗
4381
			$result["status"]="false";
4382
 
4383
			#設置執行錯誤訊息
4384
			$result["error"][]="\$conf變數須為陣列形態";
4385
 
4386
			#如果傳入的參數為 null
4387
			if($conf==null){
4388
 
4389
				#設置執行錯誤訊息
4390
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
4391
 
4392
				}#if end
4393
 
4394
			#回傳結果
4395
			return $result;
4396
 
4397
			}#if end
4398
 
4399
		#檢查參數設定是否正確
4400
		#函式說明:
4401
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
4402
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4403
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
4404
		#$result["function"],當前執行的函式名稱.
4405
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
4406
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
4407
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
4408
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
4409
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
4410
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
4411
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
4412
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
4413
		#必填參數:
4414
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
4415
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
4416
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
4417
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("dbAddress","dbAccount","selectedDataBase","selectedDataTable");
4418
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
4419
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string","string");
4420
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
4421
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
4422
		#可省略參數:
4423
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
4424
		#$conf["canBeEmptyString"]="false";
4425
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或集合.
4426
		#$conf["skipableVariableCanNotBeEmpty"]=array();
4427
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
4428
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("dbPassword","dbPort");
4429
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
4430
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
4431
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
4432
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null);
4433
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
4434
		#$conf["arrayCountEqualCheck"][]=array();
4435
		#參考資料:
4436
		#array_keys=>http://php.net/manual/en/function.array-keys.php
4437
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
4438
		unset($conf["variableCheck::checkArguments"]);
4439
 
4440
		#如果檢查失敗
177 liveuser 4441
		if($checkArguments["passed"]==="false"){
3 liveuser 4442
 
4443
			#設置執行失敗識別
4444
			$result["status"]="false";
4445
 
4446
			#設置錯誤訊息陣列
4447
			$result["error"]=$checkArguments;
4448
 
4449
			#回傳結果
4450
			return $result;
4451
 
4452
			}#if end
4453
 
4454
		#如果檢查不通過
177 liveuser 4455
		if($checkArguments["passed"]==="false"){
3 liveuser 4456
 
4457
			#設置執行失敗識別
4458
			$result["status"]="false";
4459
 
4460
			#設置錯誤訊息陣列
4461
			$result["error"]=$checkArguments;
4462
 
4463
			#回傳結果
4464
			return $result;
4465
 
4466
			}#if end
4467
 
177 liveuser 4468
		#檢查資料庫 $conf["selectedDataBase"] 是否可以存取
4469
		#確認資料庫存在或可以被存取
4470
		#函式說明:
4471
		#執行mysql指令
4472
		#回傳結果:
4473
		#$result["status"],"true"為執行成功;"false"為執行失敗。
4474
		#$result["error"],錯誤訊息的陣列
4475
		#$result["function"],當前執行的涵式
4476
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
4477
		#$result["queryConn"],mysql用來查尋的連資源.
4478
		#$result["queryString"],要執行的sql內容.
4479
		#必填參數:
4480
		#$conf["dbSql"],字串,要執行sql語法
4481
		$conf["db::execMysqlQuery"]["dbSql"]="show databases;";
4482
		#可省略參數:
4483
		#$conf["dbLink"],物件,mysqli物件,由mysqli_connect()回傳的物件內容,若為數值則改用賬號密碼等資訊進行連線,反之則沿用連線物件.
4484
		#$conf["db::execMysqlQuery"]["dbLink"]=$conf["connectInformation"];
4485
		#$conf["dbAddress"],字串,爲mysql-Server的位置。
4486
		$conf["db::execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];
4487
		#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號。
4488
		$conf["db::execMysqlQuery"]["dbAccount"]=$conf["dbAccount"]; 
4489
 
4490
		#如果存在 $conf["dbPassword"]
4491
		if(isset($conf["dbPassword"])){
4492
 
4493
			#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼。
4494
			$conf["db::execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];
4495
 
4496
			}#if end
4497
 
4498
		#$conf["dbName"],字串,爲要連的資料庫名稱
4499
		#$conf["dbName"]="";
4500
 
4501
		#如果存在 $dbPort
4502
		if(isset($conf["dbPort"])){
4503
 
4504
			#$conf["dbPort"],字串,為連線到mysql-Server時對應的port,可省略,預設為3306.
4505
			$conf["db::execMysqlQuery"]["dbPort"]=$conf["dbPort"];
4506
 
4507
			}#if end
4508
 
4509
		#$conf["autoClose"],字串,"true"代表要自動斷線,預設為"true"會自動斷線
4510
		#$conf["autoClose"]="true";
4511
		#參考資料:
4512
		#無.
4513
		#備註:
4514
		#無.
4515
		$execMysqlQuery=db::execMysqlQuery($conf["db::execMysqlQuery"]);
4516
		unset($conf["db::execMysqlQuery"]);
4517
 
4518
		#如果執行失敗
4519
		if($execMysqlQuery["status"]==="false"){
4520
 
4521
			#設置連線失敗的提示
4522
			$result["error"][]="檢查資料庫可否存取出錯";
4523
 
4524
			#設置錯誤訊息
4525
			$result["error"][]=$execMysqlQuery["error"];
4526
 
4527
			#設置執行失敗
4528
			$result["status"]="false";
4529
 
4530
			#回傳結果
4531
			return $result;
4532
 
4533
			}#if end
4534
 
4535
		#解析 $execMysqlQuery["queryResource"] 看是否存在要存取的資料庫
4536
		#函式說明:
4537
		#解析 dataTableSelect($conf) 後的結果,亦即將執行sql語法後所得到的結果解析放進變數裏面
4538
		#回傳結果:
4539
		#$result["status"],執行結果"true"為成功;"false"為失敗
4540
		#$result["error"],錯誤訊息
4541
		#$result["function"],儲存當前函數名稱
4542
		#$result["dataColumnName"],為資料欄位的名稱陣列.
4543
		#$result["dataColumnName"][$i]代表第一個欄位名稱.
4544
		#$result["dataContent"],爲資料的內容陣列,第1維度的key為$conf["tableValueName"][$i],亦即第 $i+1 個欄位的名稱,若該欄位不存在,則其value為空字串;第2維度的key為第$i+1筆資料的索引.
4545
		#$result["dataCount"],爲取得的資料筆數.
4546
		#必填參數:
4547
		#$conf["sqlQueryResult"],object,爲執行sql語法所獲得的查詢結果。
4548
		$conf["db::sendQueryDataToVariabele"]["sqlQueryResult"]=$execMysqlQuery["queryResource"];
4549
		#$conf["tableValueName"],字串陣列,爲該資料表列項目的每一項名稱,須爲陣列值,若為「array("*")」則代表所有欄位.
4550
		$conf["db::sendQueryDataToVariabele"]["tableValueName"]=array("Database");
4551
		#可省略參數:
4552
		#$conf["dbAddress"],字串,爲mysql-Server的位置,目前沒有用途.
4553
		#$conf["dbAddress"]=$dbAddress;
4554
		#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號,目前沒有用途.
4555
		#$conf["dbAccount"]=$dbAccount;
4556
		#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼,目前沒有用途.
4557
		#$conf["dbPassword"]=$dbPassword;
4558
		#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,可省略,若省略則代表使用預設的3306 port,目前沒有用途.
4559
		#$conf["dbPort"]="";
4560
		#$conf["valueName"],字串陣列,爲該資料表列項目的每一項所要對應的變數名稱,預設為欄位的名稱($conf["tableValueName"]).
4561
		#$conf["valueName"]=$conf["tableValueName"];
4562
		#參考資料:
4563
		#http://www.w3school.com.cn/php/func_mysql_fetch_array.asp => 解析取得的資料表欄位時,能夠選擇回傳含有欄位名稱與數字代表的key.
4564
		#備註:
4565
		#無.
4566
		$sendQueryDataToVariabele=db::sendQueryDataToVariabele($conf["db::sendQueryDataToVariabele"]);
4567
		unset($conf["db::sendQueryDataToVariabele"]);
4568
 
4569
		#如果執行異常
4570
		if($sendQueryDataToVariabele["status"]==="false"){
4571
 
4572
			#設置連線失敗的提示
4573
			$result["error"][]="檢查資料庫可否存取出錯";
4574
 
4575
			#設置錯誤訊息
4576
			$result["error"][]=$sendQueryDataToVariabele["error"];
4577
 
4578
			#設置執行失敗
4579
			$result["status"]="false";
4580
 
4581
			#回傳結果
4582
			return $result;
4583
 
4584
			}#if end
4585
 
4586
		#檢查資料庫是否可以存取
4587
		#函式說明:
4588
		#檢查一個數值是否與陣列裏面的元素相同,找到一個相符合的元素後就會停止搜尋.
4589
		#回傳結果:
4590
		#$result["status"],"true"表示執行正確,"false"表示執行錯誤.
4591
		#$result["founded"],"true"表示有找到相同的,"false"表示沒有找到相同的.
4592
		#$result["error"],錯誤訊息
4593
		#$result["function"],當前執行的函數名稱
4594
		#$result["argv"],使用的參數
4595
		#$result["equalVarName"],相等的變數名稱或key.
4596
		#$result["equalVarValue"],相等的變數數值內容.
4597
		#必填參數:
4598
		#$conf["conditionElement"],字串,條件元素,要等於的元素內容.
4599
		$conf["search::getEqualVar"]["conditionElement"]=$conf["selectedDataBase"];
4600
		#$conf["compareElements"],字串陣列,要比對的陣列變數內容.
4601
		$conf["search::getEqualVar"]["compareElements"]=$sendQueryDataToVariabele["dataContent"]["Database"];
4602
		#可省略參數:
4603
		#無.
4604
		#參考資料:
4605
		#無.
4606
		#備註:
4607
		#無.
4608
		$getEqualVar=search::getEqualVar($conf["search::getEqualVar"]);
4609
		unset($conf["search::getEqualVar"]);
4610
 
4611
		#如果執行失敗
4612
		if($getEqualVar["status"]==="false"){
4613
 
4614
			#設置錯誤的提示
4615
			$result["error"][]="檢查資料庫可否存取出錯";
4616
 
4617
			#設置錯誤訊息
4618
			$result["error"][]=$getEqualVar["error"];
4619
 
4620
			#設置執行失敗
4621
			$result["status"]="false";
4622
 
4623
			#回傳結果
4624
			return $result;
4625
 
4626
			}#if end
4627
 
4628
		#如果無法存取資料庫
4629
		if($getEqualVar["founded"]==="false"){
4630
 
4631
			#設置錯誤的提示
4632
			$result["error"][]="資料庫(".$conf["selectedDataBase"].")無法存取";
4633
 
4634
			#設置錯誤訊息
4635
			$result["error"][]=$getEqualVar;
4636
 
4637
			#設置執行失敗
4638
			$result["status"]="false";
4639
 
4640
			#回傳結果
4641
			return $result;
4642
 
4643
			}#if end
4644
 
3 liveuser 4645
		#設置要執行的sql語法
4646
		$sql="SHOW CREATE TABLE ".$conf["selectedDataBase"].".".$conf["selectedDataTable"].";";
4647
 
4648
		#執行sql語法
4649
		#函式說明:
4650
		#執行mysql指令
177 liveuser 4651
		#回傳結果:
3 liveuser 4652
		#$result["status"],"true"為執行成功;"false"為執行失敗。
4653
		#$result["error"],錯誤訊息的陣列
4654
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
4655
		#$result["queryString"],mysql查詢的語言
4656
		#查詢號的解果,需要解析。
4657
		#必填參數:
4658
		$conf["db"]["execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
4659
		$conf["db"]["execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
4660
		$conf["db"]["execMysqlQuery"]["dbSql"]=$sql;#要執行sql語法
4661
		#可省略參數:
4662
 
4663
		#如果 $conf["dbPassword"] 有設定
4664
		if(isset($conf["dbPassword"])){
4665
 
4666
			#設定其密碼
4667
			$conf["db"]["execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
4668
 
4669
			}#if end
177 liveuser 4670
 
4671
		#如果有設定 $conf["dbPort"]
3 liveuser 4672
		if(isset($conf["dbPort"])){
4673
 
4674
			#設定 $conf["dbPort"]
4675
			$conf["db"]["execMysqlQuery"]["dbPort"]=$conf["dbPort"];
4676
 
177 liveuser 4677
			}#if end
4678
 
3 liveuser 4679
		$queryResult=db::execMysqlQuery($conf["db"]["execMysqlQuery"]);
4680
		unset($conf["db"]["execMysqlQuery"]);
4681
 
4682
		#如果有錯誤
4683
		if($queryResult["status"]=="false"){
4684
 
4685
			#設置錯誤訊息
4686
			$result["status"]="false";
4687
 
4688
			#設置錯誤提示
4689
			$result["error"]=$queryResult;
4690
 
4691
			#回傳結果
4692
			return $result;
4693
 
4694
			}#if end
4695
 
4696
		#解析mysql resource
4697
 
4698
		#初始化暫存的變數
4699
		$temp="";
4700
 
4701
		#將讀取到的資料一次只讀取一列
4702
		while($row = mysqli_fetch_array($queryResult["queryResource"])){
4703
 
4704
			#$i筆項列資料,則運行$i次。
4705
			foreach($row as $key=>$value){		
4706
 
4707
				#如果key爲"Create Table"
4708
				if($key=="Create Table"){
4709
 
4710
					#將解析的資料內容結果放進$temp變數裏面
4711
					$temp=$value;	
4712
 
4713
					}#if end
4714
 
4715
				}#foreach end
4716
 
4717
			}#while end
4718
 
4719
		#逐行解析$temp
4720
		#函式說明:
4721
		#將多行內容的字串,依行切割
4722
		#回傳的參數:
4723
		#$result["status"],執行成功與否,若爲"true",代表執行成功,若爲"false"代表執失敗。
4724
		#$result["error"],錯誤訊息陣列.
4725
		#$result["function"],當前執行的函數名稱.#$result["oriStr"],要分割的原始字串內容
4726
		#$result["oriStr"],要分割的原始字串內容
4727
		#$result["dataArray"],爲以行分割好的字串陣列內容,$result["dataArray"][$i]爲第($i+1)行的內容。
4728
		#$result["dataCounts"],爲總共分成幾行
4729
		#必填參數:
4730
		$conf["stringProcess"]["spiltMutiLineString"]["stringIn"]=$temp;#要處理的多行文字字串。
4731
		#參考資料來源:
4732
		#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 換行字元
4733
		$everyLine=stringProcess::spiltMutiLineString($conf["stringProcess"]["spiltMutiLineString"]);
4734
		unset($conf["stringProcess"]["spiltMutiLineString"]);
4735
 
4736
		#如果 逐行解析$temp 失敗
4737
		if($everyLine["status"]==="false"){
4738
 
4739
			#設置錯誤訊息
4740
			$result["status"]="false";
4741
 
4742
			#設置錯誤提示
4743
			$result["error"]=$everyLine;
4744
 
4745
			#回傳結果
4746
			return $result;
4747
 
4748
			}#if end
4749
 
4750
		#針對每列內容
4751
		foreach($everyLine["dataArray"] as $no => $line){
4752
 
4753
			#函式說明:
4754
			#取得符合特定字首與字尾的字串
4755
			#回傳結果::
4756
			#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
4757
			#$result["function"],當前執行的函數名稱.
4758
			#$result["error"],錯誤訊息陣列.
4759
			#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
4760
			#$result["returnString"],爲符合字首條件的字串內容。
4761
			#$result["argu"],使用的參數.
4762
			#必填參數:
4763
			#$conf["checkString"],字串,要檢查的字串.
4764
			$conf["search::getMeetConditionsString"]["checkString"]=$line;
4765
			#可省略參數:
4766
			#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
4767
			$conf["search::getMeetConditionsString"]["frontWord"]="/*";
4768
			#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
4769
			#$conf["tailWord"]="";
4770
			#參考資料:
4771
			#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
4772
			$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
4773
			unset($conf["search::getMeetConditionsString"]);			
4774
 
4775
			#如果執行失敗
4776
			if($getMeetConditionsString["status"]==="false"){
4777
 
4778
				#設置錯誤訊息
4779
				$result["status"]="false";
4780
 
4781
				#設置錯誤提示
4782
				$result["error"]=$getMeetConditionsString;
4783
 
4784
				#回傳結果
4785
				return $result;
4786
 
4787
				}#if end
4788
 
4789
			#如果執行失敗
4790
			if($getMeetConditionsString["founded"]==="true"){
4791
 
4792
				#while loop
4793
				while(true){
4794
 
4795
					#移除 partion 描述 - start 
4796
 
4797
					#如果存在該列
4798
					if(isset($everyLine["dataArray"][$no])){
4799
 
4800
						#卸除之
4801
						unset($everyLine["dataArray"][$no]);
4802
 
4803
						#行數加1
4804
						$no++;
4805
 
4806
						}#if end
4807
 
4808
					#移除 partion 描述 - end
4809
 
4810
					#反之
4811
					else{
4812
 
4813
						//end while
4814
						break;
4815
 
4816
						}#else end						
4817
 
4818
					}#while loop end
4819
 
4820
				#end foreach
4821
				break;
4822
 
4823
				}#if end
4824
 
4825
			}#foreach end
4826
 
4827
		#重新更新總行數
4828
		$everyLine["dataCounts"]=count($everyLine["dataArray"]);
4829
 
4830
		#取得原始輸入的多行字串
4831
		$result["oriInput"]=$everyLine["oriStr"];
4832
 
4833
		#取得原始的每一行
4834
		$result["everyLine"]=$everyLine["dataArray"];
4835
 
4836
		#取得資料表名稱
4837
		#函式說明:
4838
		#將固定格式的字串分開,並回傳分開的結果。
4839
		#回傳的參數:
4840
		#$result["oriStr"],要分割的原始字串內容
4841
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
4842
		#$result["dataCounts"],爲總共分成幾段
4843
		#必填參數:
4844
		$conf["stringProcess"]["spiltString"]["stringIn"]=$everyLine["dataArray"][0];#要處理的字串。
4845
		$conf["stringProcess"]["spiltString"]["spiltSymbol"]="`";#爲以哪個符號作爲分割
4846
		$tableName=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
4847
		unset($conf["stringProcess"]["spiltString"]);
4848
 
4849
		#如果 取得資料表名稱 失敗
4850
		if($tableName["status"]=="false"){
4851
 
4852
			#設置錯誤訊息
4853
			$result["status"]="false";
4854
 
4855
			#設置錯誤提示
4856
			$result["error"]=$tableName;
4857
 
4858
			#回傳結果
4859
			return $result;
4860
 
4861
			}#if end
4862
 
4863
		#取得資料表名稱
4864
		$result["tableName"]=$tableName["dataArray"][1];
4865
 
4866
		#取得資料表用的 ENGINE 與 DEFAULT CHARSET",亦即最後一行的內容.
4867
		#函式說明:
4868
		#將固定格式的字串分開,並回傳分開的結果。
4869
		#回傳的參數:
4870
		#$result["oriStr"],要分割的原始字串內容
4871
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
4872
		#$result["dataCounts"],爲總共分成幾段
4873
		#必填參數:
4874
		$conf["stringProcess"]["spiltString"]["stringIn"]=$everyLine["dataArray"][$everyLine["dataCounts"]-1];#要處理的字串。
4875
		$conf["stringProcess"]["spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
4876
		$engineAndCharset=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
4877
		unset($conf["stringProcess"]["spiltString"]);
4878
 
4879
		#如果 取得資料表用的 ENGINE與DEFAULT CHARSET" 失敗
4880
		if($engineAndCharset["status"]=="false"){
4881
 
4882
			#設置錯誤訊息
4883
			$result["status"]="false";
4884
 
4885
			#設置錯誤提示
4886
			$result["error"]=$engineAndCharset;
4887
 
4888
			#回傳結果
4889
			return $result;
4890
 
4891
			}#if end
4892
 
4893
		#get engine string
4894
		$engine=$engineAndCharset["dataArray"][1];
4895
 
4896
		#函式說明:
4897
		#將固定格式的字串分開,並回傳分開的結果。
4898
		#回傳的參數:
4899
		#$result["oriStr"],要分割的原始字串內容
4900
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
4901
		#$result["dataCounts"],爲總共分成幾段
4902
		#必填參數:
4903
		$conf["stringProcess"]["spiltString"]["stringIn"]=$engine;#要處理的字串。
4904
		$conf["stringProcess"]["spiltString"]["spiltSymbol"]="=";#爲以哪個符號作爲分割
4905
		$engine=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
4906
		unset($conf["stringProcess"]["spiltString"]);
4907
 
4908
		#如果 取得資料表用的 ENGINE與DEFAULT CHARSET" 失敗
4909
		if($engine["status"]=="false"){
4910
 
4911
			#設置錯誤訊息
4912
			$result["status"]="false";
4913
 
4914
			#設置錯誤提示
4915
			$result["error"]=$engine;
4916
 
4917
			#回傳結果
4918
			return $result;
4919
 
4920
			}#if end
4921
 
4922
		#如果不存在 engine
4923
		if(!isset($engine["dataArray"][1])){
4924
 
4925
			#設置錯誤訊息
4926
			$result["status"]="false";
4927
 
4928
			#設置錯誤提示
4929
			$result["error"]=$engine;
4930
 
4931
			return $result;
4932
 
4933
			}#if end
4934
 
4935
		#get engine
4936
		$result["engine"]=$engine["dataArray"][1];
4937
 
4938
		#取得字元編碼
4939
		#函式說明:
4940
		#將固定格式的字串分開,並回傳分開的結果。
4941
		#回傳的參數:
4942
		#$result["oriStr"],要分割的原始字串內容
4943
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
4944
		#$result["dataCounts"],爲總共分成幾段
4945
		#必填參數:
4946
		$conf["stringProcess"]["spiltString"]["stringIn"]=$engineAndCharset["oriStr"];#要處理的字串。
4947
		$conf["stringProcess"]["spiltString"]["spiltSymbol"]="CHARSET=";#爲以哪個符號作爲分割
4948
		$charset=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
4949
		unset($conf["stringProcess"]["spiltString"]);
4950
 
4951
		#如果 取得字元編碼 失敗
4952
		if($charset["status"]=="false"){
4953
 
4954
			#設置錯誤訊息
4955
			$result["status"]="false";
4956
 
4957
			#設置錯誤提示
4958
			$result["error"]=$charset;
4959
 
4960
			#回傳結果
4961
			return $result;
4962
 
4963
			}#if end
4964
 
4965
		#取得字元編碼
4966
		#函式說明:
4967
		#將固定格式的字串分開,並回傳分開的結果。
4968
		#回傳的參數:
4969
		#$result["oriStr"],要分割的原始字串內容
4970
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
4971
		#$result["dataCounts"],爲總共分成幾段
4972
		#必填參數:
4973
		$conf["stringProcess"]["spiltString"]["stringIn"]=$charset["dataArray"][1];#要處理的字串。
4974
		$conf["stringProcess"]["spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
4975
		$charset=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
4976
		unset($conf["stringProcess"]["spiltString"]);
4977
 
4978
		#如果 取得字元編碼 失敗
4979
		if($charset["status"]=="false"){
4980
 
4981
			#設置錯誤訊息
4982
			$result["status"]="false";
4983
 
4984
			#設置錯誤提示
4985
			$result["error"]=$charset;
4986
 
4987
			#回傳結果
4988
			return $result;
4989
 
4990
			}#if end
4991
 
4992
		#取得字元編碼
4993
		$result["charset"]=$charset["dataArray"][0];
4994
 
4995
		#初始化,儲存鍵值定義的陣列變數
4996
		$keyDefine=array();
4997
 
4998
		#逐行取得各欄位詳細資料
4999
		for($i=1;$i<$everyLine["dataCounts"]-1;$i++){
5000
 
5001
			#檢查開頭是否爲 "  `"
5002
 			#函式說明:
5003
			#取得符合特定字首與字尾的字串
5004
			#回傳結果::
5005
			#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
5006
			#$result["function"],當前執行的函數名稱.
5007
			#$result["error"],錯誤訊息陣列.
5008
			#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
5009
			#$result["returnString"],爲符合字首條件的字串內容。
5010
			#必填參數:
5011
			#$conf["checkString"],字串,要檢查的字串.
5012
			$conf["search::getMeetConditionsString"]["checkString"]=$everyLine["dataArray"][$i];
5013
			#可省略參數:
5014
			#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
5015
			$conf["search::getMeetConditionsString"]["frontWord"]="  `";
5016
			#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
5017
			#$conf["tailWord"]="";
5018
			#參考資料:
5019
			#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
5020
			$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
5021
			unset($conf["search::getMeetConditionsString"]);
5022
 
5023
			#如果分割失敗
5024
			if($getMeetConditionsString["status"]==="false"){
5025
 
5026
				#設置錯誤訊息
5027
				$result["status"]="false";
5028
 
5029
				#設置錯誤提示
5030
				$result["error"]=$getMeetConditionsString;
5031
 
5032
				#回傳結果
5033
				return $result;
5034
 
5035
				}#if end
5036
 
5037
			#如果有符合的前戳
5038
			if($getMeetConditionsString["founded"]==="true"){
5039
 
5040
				#函式說明:
5041
				#將固定格式的字串分開,並回傳分開的結果。
5042
				#回傳的參數:
5043
				#$result["oriStr"],要分割的原始字串內容
5044
				#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
5045
				#$result["dataCounts"],爲總共分成幾段
5046
				#必填參數:
5047
				$conf["stringProcess"]["spiltString"]["stringIn"]=$everyLine["dataArray"][$i];#要處理的字串。
5048
				$conf["stringProcess"]["spiltString"]["spiltSymbol"]="`";#爲以哪個符號作爲分割
5049
				$columnString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
5050
				unset($conf["stringProcess"]["spiltString"]);
5051
 
5052
				#如果 分割字串失敗 失敗
5053
				if($columnString["status"]==="false"){
5054
 
5055
					#設置錯誤訊息
5056
					$result["status"]="false";
5057
 
5058
					#設置錯誤提示
5059
					$result["error"]=$columnString;
5060
 
5061
					#回傳結果
5062
					return $result;
5063
 
5064
					}#if end
5065
 
5066
				#取得欄位名稱
5067
				$result["columnName"][$i]=$columnString["dataArray"][1];
5068
				$result["columnName"][$result["columnName"][$i]]=$result["columnName"][$i];
5069
 
5070
				#函式說明:
5071
				#將固定格式的字串分開,並回傳分開的結果。
5072
				#回傳的參數:
5073
				#$result["oriStr"],要分割的原始字串內容
5074
				#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
5075
				#$result["dataCounts"],爲總共分成幾段
5076
				#必填參數:
5077
				$conf["stringProcess"]["spiltString"]["stringIn"]=$columnString["dataArray"][2];#要處理的字串。
5078
				$conf["stringProcess"]["spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
5079
				$columnString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
5080
				unset($conf["stringProcess"]["spiltString"]);
5081
 
5082
				#debug
5083
				#var_dump($columnString);
5084
 
5085
				#如果 分割字串失敗 失敗
5086
				if($columnString["status"]==="false"){
5087
 
5088
					#設置錯誤訊息
5089
					$result["status"]="false";
5090
 
5091
					#設置錯誤提示
5092
					$result["error"]=$columnString;
5093
 
5094
					#回傳結果
5095
					return $result;
5096
 
5097
					}#if end
5098
 
5099
				#取得欄位屬性與長度
5100
				$result["columnVarTypeAndLengthLimit"][$i]=$columnString["dataArray"][0];
5101
				$result["columnVarTypeAndLengthLimit"][$result["columnName"][$i]]=$columnString["dataArray"][0];
5102
 
5103
				}#if end
5104
 
5105
			#函式說明:
5106
			#將固定格式的字串分開,並回傳分開的結果。
5107
			#回傳的參數:
5108
			#$result["oriStr"],要分割的原始字串內容
5109
			#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
5110
			#$result["dataCounts"],爲總共分成幾段
5111
			#必填參數:
5112
			$conf["stringProcess"]["spiltString"]["stringIn"]=$everyLine["dataArray"][$i];#要處理的字串。
5113
			$conf["stringProcess"]["spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
5114
			$columnString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
5115
			unset($conf["stringProcess"]["spiltString"]);	
5116
 
5117
			#如果 分割字串失敗 失敗
5118
			if($columnString["status"]=="false"){
5119
 
5120
				#設置錯誤訊息
5121
				$result["status"]="false";
5122
 
5123
				#設置錯誤提示
5124
				$result["error"]=$columnString;
5125
 
5126
				#回傳結果
5127
				return $result;
5128
 
5129
				}#if end
5130
 
5131
			#如果分割字串失敗
5132
			if($columnString["status"]==="false"){
5133
 
5134
				#設置執行失敗
5135
				$reuslt["status"]="false";
5136
 
5137
				#設置錯誤訊息
5138
				$result["error"]=$columnString;
5139
 
5140
				#回傳結果
5141
				return $result;
5142
 
5143
				}#if end
5144
 
5145
			#debug
5146
			#var_dump($columnString);
5147
 
5148
			#判斷該 $columnString["dataArray"][2]是一般名稱,還是鍵值定義。
5149
			#函式說明:
5150
			#檢查字串裡面有無指定的關鍵字
5151
			#回傳結果::
5152
			#$result["status"],"true"代表執行成功,"false"代表執行失敗。
5153
			#$result["error"],錯誤訊息
5154
			#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
5155
			#必填參數:
5156
			$conf["search"]["findKeyWord"]["keyWord"]="`";#想要搜尋的關鍵字
5157
			$conf["search"]["findKeyWord"]["string"]=$columnString["dataArray"][2];#要被搜尋的字串內容
5158
			#可省略參數:
5159
			#$conf["search"]["findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
5160
			$searchResult=search::findKeyWord($conf["search"]["findKeyWord"]);
5161
			unset($conf["search"]["findKeyWord"]);
5162
 
5163
			#如果尋找失敗
5164
			if($searchResult["status"]==="false"){
5165
 
5166
				#設置執行失敗
5167
				$reuslt["status"]="false";
5168
 
5169
				#設置錯誤訊息
5170
				$result["error"]=$columnString;
5171
 
5172
				#回傳結果
5173
				return $result;
5174
 
5175
				}#if end
5176
 
5177
			#如果有找到,且沒有長度與形態資訊
5178
			if($searchResult["founded"]==="true" && !isset($result["columnVarTypeAndLengthLimit"][$i]) ){
5179
 
5180
				#代表是屬於鍵值的定義
5181
				$keyDefine[]=$everyLine["dataArray"][$i];
5182
 
5183
				#var_dump($keyDefine);
5184
 
5185
				#跳過該行內容
5186
				continue;
5187
 
5188
				}#if end
5189
 
5190
			#判斷該 $columnString["dataArray"][0]是否為 "CONSTRAINT" 或 "KEY"
5191
			if($columnString["dataArray"][0]==="CONSTRAINT" || $columnString["dataArray"][0]==="KEY"){
5192
 
5193
				#代表是屬於定義 外鍵 的 CONSTRAINT 定義
5194
				$keyDefine[]=$everyLine["dataArray"][$i];
5195
 
5196
				#跳過該行內容
5197
				continue;
5198
 
5199
				}#if end
5200
 
5201
			#函式說明:
5202
			#處理字串避免網頁出錯
5203
			#回傳結果::
5204
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5205
			#$result["function"],當前執行的函數.
5206
			#$result["content"],爲處理好的字串.
5207
			#$result["error"],錯誤訊息陣列.
5208
			#必填參數:
5209
			$conf["stringProcess"]["correctCharacter"]["stringIn"]=$columnString["dataArray"][0];#爲要處理的字串
5210
			#可省略參數:
5211
			$conf["stringProcess"]["correctCharacter"]["selectedCharacter"]=array("`");#爲被選擇要處理的字串/字元,須爲陣列值。
5212
			#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
5213
			#$conf["stringProcess"]["correctCharacter"]["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
5214
			$correctCharacterResult=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);
5215
			unset($conf["stringProcess"]);
5216
 
5217
			#如果處理字串失敗
5218
			if($correctCharacterResult["status"]==="false"){
5219
 
5220
				#設置執行失敗
5221
				$reuslt["status"]="false";
5222
 
5223
				#設置錯誤訊息
5224
				$result["error"]=$correctCharacterResult;
5225
 
5226
				#回傳結果
5227
				return $result;
5228
 
5229
				}#if end
5230
 
5231
			#如果不是 "CONSTRAINT" 且 存在 $result["columnVarTypeAndLengthLimit"][$i]
5232
			if($correctCharacterResult["content"]!=="CONSTRAINT" && isset($result["columnVarTypeAndLengthLimit"][$i])){
5233
 
5234
				#取得欄位名稱,遇到有空格的欄位名稱會出錯
5235
				#$result["columnName"][$i]=$correctCharacterResult["content"];
5236
				#$result["columnName"][$correctCharacterResult["content"]]=$correctCharacterResult["content"];
5237
 
5238
				#取得欄位變數形態與長度限制,遇到有空格的欄位名稱會出錯
5239
				#$result["columnVarTypeAndLengthLimit"][$i]=$columnString["dataArray"][1];
5240
				#$result["columnVarTypeAndLengthLimit"][$result["columnName"][$i]]=$columnString["dataArray"][1];
5241
 
5242
				#檢查是否有欄位的長度限制關鍵字 "(" ")"
5243
				#函式說明:
5244
				#檢查一個字串裡面是否有多個關鍵字
5245
				#回傳結果::
5246
				#$result["status"],"true"代表執行成功,"false"代表執行失敗。
5247
				#$result["error"],錯誤訊息
5248
				#$result["founded"],是否找到所有的關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
5249
				#必填參數:
5250
				$conf["search"]["findManyKeyWords"]["keyWords"]=array("(",")");#想要搜尋的關鍵字
5251
				$conf["search"]["findManyKeyWords"]["string"]=$result["columnVarTypeAndLengthLimit"][$i];#要被搜尋的字串內容
5252
				#可省略參數:
5253
				#$conf["search"]["findManyKeyWords"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
5254
				$lengthLimitKeyWordSearchResult=search::findManyKeyWords($conf["search"]["findManyKeyWords"]);
5255
				unset($conf["search"]["findManyKeyWords"]);
5256
 
5257
				#如果  檢查是否有欄位的長度限制關鍵字 "(" ")" 失敗
5258
				if($lengthLimitKeyWordSearchResult["status"]==="false"){
5259
 
5260
					#設置執行失敗
5261
					$reuslt["status"]="false";
5262
 
5263
					#設置錯誤訊息
5264
					$result["error"]=$lengthLimitKeyWordSearchResult;
5265
 
5266
					#回傳結果
5267
					return $result;
5268
 
5269
					}#if end
5270
 
5271
				#如果 $lengthLimitKeyWordSearchResult["founded"] 等於 "true"
5272
				if($lengthLimitKeyWordSearchResult["foundedAll"]==="true"){
5273
 
5274
					#代表有長度限制的字串
5275
 
5276
					#以"("為關鍵字進行分割
5277
					#函式說明:
5278
					#將固定格式的字串分開,並回傳分開的結果。
5279
					#回傳的參數:
5280
					#$result["oriStr"],要分割的原始字串內容
5281
					#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
5282
					#$result["dataCounts"],爲總共分成幾段
5283
					#必填參數:
5284
					$conf["stringProcess"]["spiltString"]["stringIn"]=$result["columnVarTypeAndLengthLimit"][$i];#要處理的字串。
5285
					$conf["stringProcess"]["spiltString"]["spiltSymbol"]="(";#爲以哪個符號作爲分割
5286
					$columnTypeAndLengthLimitSpiledStr=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
5287
					unset($conf["stringProcess"]["spiltString"]);
5288
 
5289
					#如果分割字串失敗
5290
					if($columnTypeAndLengthLimitSpiledStr["status"]==="false"){
5291
 
5292
						#設置執行失敗
5293
						$reuslt["status"]="false";
5294
 
5295
						#設置錯誤訊息
5296
						$result["error"]=$columnTypeAndLengthLimitSpiledStr;
5297
 
5298
						#回傳結果
5299
						return $result;
5300
 
5301
						}#if end
5302
 
5303
					#取得欄位變數型別
5304
					$result["columnVarType"][$i]=$columnTypeAndLengthLimitSpiledStr["dataArray"][0];
5305
					$result["columnVarType"][$result["columnName"][$i]]=$columnTypeAndLengthLimitSpiledStr["dataArray"][0];
5306
 
5307
					#以")"為關鍵字進行分割
5308
					#函式說明:
5309
					#將固定格式的字串分開,並回傳分開的結果。
5310
					#回傳的參數:
5311
					#$result["oriStr"],要分割的原始字串內容
5312
					#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
5313
					#$result["dataCounts"],爲總共分成幾段
5314
					#必填參數:
5315
					$conf["stringProcess"]["spiltString"]["stringIn"]=$columnTypeAndLengthLimitSpiledStr["dataArray"][1];#要處理的字串。
5316
					$conf["stringProcess"]["spiltString"]["spiltSymbol"]=")";#爲以哪個符號作爲分割
5317
					$columnTypeAndLengthLimitSpiledStr=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
5318
					unset($conf["stringProcess"]["spiltString"]);
5319
 
5320
					#如果分割字串失敗
5321
					if($columnTypeAndLengthLimitSpiledStr["status"]==="false"){
5322
 
5323
						#設置執行失敗
5324
						$reuslt["status"]="false";
5325
 
5326
						#設置錯誤訊息
5327
						$result["error"]=$columnTypeAndLengthLimitSpiledStr;
5328
 
5329
						#回傳結果
5330
						return $result;
5331
 
5332
						}#if end
5333
 
5334
					#取得欄位的長度限制
5335
					$result["columnVarLengthLimit"][$i]=$columnTypeAndLengthLimitSpiledStr["dataArray"][0];
5336
					$result["columnVarLengthLimit"][$result["columnName"][$i]]=$columnTypeAndLengthLimitSpiledStr["dataArray"][0];
5337
 
5338
					}#if end
5339
 
5340
				#反之代表沒有長度限制的字串
5341
				else{
5342
 
5343
					#取得欄位變數型別
5344
					$result["columnVarType"][$i]=$result["columnVarTypeAndLengthLimit"][$i];
5345
					$result["columnVarType"][$result["columnName"][$i]]=$result["columnVarTypeAndLengthLimit"][$i];
5346
 
5347
					#取得欄位變數長度限制
5348
					$result["columnVarLengthLimit"][$i]="";
5349
					$result["columnVarLengthLimit"][$result["columnName"][$i]]="";
5350
 
5351
					}#else
5352
 
5353
				#欄位是否不可為null
5354
				#函式說明:
5355
				#檢查字串裡面有無指定的關鍵字
5356
				#回傳結果::
5357
				#$result["status"],"true"代表執行成功,"false"代表執行失敗。
5358
				#$result["error"],錯誤訊息
5359
				#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
5360
				#必填參數:
5361
				$conf["search"]["findKeyWord"]["keyWord"]="NOT NULL";#想要搜尋的關鍵字
5362
				$conf["search"]["findKeyWord"]["string"]=$everyLine["dataArray"][$i];#要被搜尋的字串內容
5363
				#可省略參數:
5364
				#$conf["search"]["findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
5365
				$searchResult=search::findKeyWord($conf["search"]["findKeyWord"]);
5366
				unset($conf["search"]["findKeyWord"]);
5367
 
5368
				#如果取得 欄位是否不可為null 失敗
5369
				if($searchResult["status"]==="false"){
5370
 
5371
					#設置執行失敗
5372
					$reuslt["status"]="false";
5373
 
5374
					#設置錯誤訊息
5375
					$result["error"]=$searchResult;
5376
 
5377
					#回傳結果
5378
					return $result;
5379
 
5380
					}#if end
5381
 
5382
				#如果有找到 NOT NULL
5383
				if($searchResult["founded"]==="true"){
5384
 
5385
					$result["columnNotNull"][$i]="true";
5386
					$result["columnNotNull"][$result["columnName"][$i]]="true";
5387
 
5388
					}#if end
5389
 
5390
				#反之沒有找到 NOT NULL
5391
				else{
5392
 
5393
					$result["columnNotNull"][$i]="false";
5394
					$result["columnNotNull"][$result["columnName"][$i]]="false";
5395
 
5396
					}#else end
5397
 
5398
				#欄位是否會自動加1
5399
				#函式說明:
5400
				#檢查字串裡面有無指定的關鍵字
5401
				#回傳結果::
5402
				#$result["status"],"true"代表執行成功,"false"代表執行失敗。
5403
				#$result["error"],錯誤訊息
5404
				#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
5405
				#必填參數:
5406
				$conf["search"]["findKeyWord"]["keyWord"]="AUTO_INCREMENT";#想要搜尋的關鍵字
5407
				$conf["search"]["findKeyWord"]["string"]=$everyLine["dataArray"][$i];#要被搜尋的字串內容
5408
				#可省略參數:
5409
				#$conf["search"]["findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
5410
				$searchResult=search::findKeyWord($conf["search"]["findKeyWord"]);
5411
				unset($conf["search"]["findKeyWord"]);
5412
 
5413
				#如果取得 欄位是否會自動加1 失敗
5414
				if($searchResult["status"]==="false"){
5415
 
5416
					#設置執行失敗
5417
					$reuslt["status"]="false";
5418
 
5419
					#設置錯誤訊息
5420
					$result["error"]=$searchResult;
5421
 
5422
					#回傳結果
5423
					return $result;
5424
 
5425
					}#if end
5426
 
5427
				#如果有找到 AUTO_INCREMENT
5428
				if($searchResult["founded"]==="true"){
5429
 
5430
					$result["columnAutoIncrement"][$i]="true";
5431
					$result["columnAutoIncrement"][$result["columnName"][$i]]="true";
5432
 
5433
					}#if end
5434
 
5435
				#反之沒有 AUTO_INCREMENT
5436
				else{
5437
 
5438
					$result["columnAutoIncrement"][$i]="false";
5439
					$result["columnAutoIncrement"][$result["columnName"][$i]]="false";
5440
 
5441
					}#else end
5442
 
5443
				#欄位是否有預設內容
5444
 
5445
				#函式說明:
5446
				#檢查字串裡面有無指定的關鍵字
5447
				#回傳結果::
5448
				#$result["status"],"true"代表執行成功,"false"代表執行失敗。
5449
				#$result["error"],錯誤訊息
5450
				#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
5451
				#必填參數:
5452
				$conf["search"]["findKeyWord"]["keyWord"]="DEFAULT";#想要搜尋的關鍵字
5453
				$conf["search"]["findKeyWord"]["string"]=$everyLine["dataArray"][$i];#要被搜尋的字串內容
5454
				#可省略參數:
5455
				#$conf["search"]["findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
5456
				$searchResult=search::findKeyWord($conf["search"]["findKeyWord"]);
5457
				unset($conf["search"]["findKeyWord"]);
5458
 
5459
				#如果取得 欄位是否有預設內容 失敗
5460
				if($searchResult["status"]==="false"){
5461
 
5462
					#設置執行失敗
5463
					$reuslt["status"]="false";
5464
 
5465
					#設置錯誤訊息
5466
					$result["error"]=$searchResult;
5467
 
5468
					#回傳結果
5469
					return $result;
5470
 
5471
					}#if end
5472
 
5473
				#如果有找到 DEFAULT
5474
				if($searchResult["founded"]==="true"){
5475
 
5476
					#函式說明:
5477
					#將固定格式的字串分開,並回傳分開的結果。
5478
					#回傳的參數:
5479
					#$result["oriStr"],要分割的原始字串內容
5480
					#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
5481
					#$result["dataCounts"],爲總共分成幾段
5482
					#必填參數:
5483
					$conf["stringProcess"]["spiltString"]["stringIn"]=$everyLine["dataArray"][$i];#要處理的字串。
5484
					$conf["stringProcess"]["spiltString"]["spiltSymbol"]="DEFAULT ";#爲以哪個符號作爲分割
5485
					$defaultString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
5486
					unset($conf["stringProcess"]["spiltString"]);
5487
 
5488
					#如果分割字串失敗
5489
					if($defaultString["status"]=="false"){
5490
 
5491
						#設置執行失敗
5492
						$result["status"]="false";
5493
 
5494
						#設置執行錯誤訊息
5495
						$result["error"]=$defaultString;
5496
 
5497
						#回傳結果
5498
						return $result;
5499
 
5500
						}#if end
5501
 
5502
					#函式說明:
5503
					#將固定格式的字串分開,並回傳分開的結果。
5504
					#回傳的參數:
5505
					#$result["oriStr"],要分割的原始字串內容
5506
					#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
5507
					#$result["dataCounts"],爲總共分成幾段
5508
					#必填參數:
5509
					$conf["stringProcess"]["spiltString"]["stringIn"]=$defaultString["dataArray"][1];#要處理的字串。
5510
					$conf["stringProcess"]["spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
5511
					$defaultString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
5512
					unset($conf["stringProcess"]["spiltString"]);
5513
 
5514
					#如果分割字串失敗
5515
					if($defaultString["status"]=="false"){
5516
 
5517
						#設置執行失敗
5518
						$result["status"]="false";
5519
 
5520
						#設置執行錯誤訊息
5521
						$result["error"]=$defaultString;
5522
 
5523
						#回傳結果
5524
						return $result;
5525
 
5526
						}#if end
5527
 
5528
					#將「,」,「'」去掉 
5529
					#函式說明:
5530
					#處理字串避免網頁出錯
5531
					#回傳結果::
5532
					#$result,爲處理好的字串。
5533
					#必填參數:
5534
					$conf["stringProcess"]["correctCharacter"]["stringIn"]=$defaultString["dataArray"][0];#爲要處理的字串
5535
					#可省略參數:
5536
					$conf["stringProcess"]["correctCharacter"]["selectedCharacter"]=array(",","'");#爲被選擇要處理的字串/字元,須爲陣列值。
5537
					#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
5538
					#$conf["stringProcess"]["correctCharacter"]["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
5539
					$thisColumnDefaultValue=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);
5540
					unset($conf["stringProcess"]["correctCharacter"]);
5541
 
5542
					#如果處理字串失敗
5543
					if($thisColumnDefaultValue["status"]=="false"){
5544
 
5545
						#設置執行不正常
5546
						$result["status"]="false";
5547
 
5548
						#設置錯誤訊息
5549
						$result["error"]=$thisColumnDefaultValue;
5550
 
5551
						#回傳結果
5552
						return $result;
5553
 
5554
						}#if end
5555
 
5556
					#取得該欄位的預設內容
5557
					$result["columnDefault"][$i]=$thisColumnDefaultValue["content"];
5558
					$result["columnDefault"][$result["columnName"][$i]]=$thisColumnDefaultValue["content"];
5559
 
5560
					}#if end
5561
 
5562
				#反之沒有找到 DEFAULT	
5563
				else{
5564
 
5565
					$result["columnDefault"][$i]="沒有指定";
5566
					$result["columnDefault"][$result["columnName"][$i]]=$result["columnDefault"][$i];
5567
 
5568
					}#else end
5569
 
5570
				#如果有欄位內有 ON UPDATE 的字樣
5571
 
5572
				#函式說明:
5573
				#檢查字串裡面有無指定的關鍵字
5574
				#回傳結果::
5575
				#$result["status"],"true"代表執行成功,"false"代表執行失敗。
5576
				#$result["error"],錯誤訊息
5577
				#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
5578
				#必填參數:
5579
				$conf["search"]["findKeyWord"]["keyWord"]="ON UPDATE";#想要搜尋的關鍵字
5580
				$conf["search"]["findKeyWord"]["string"]=$everyLine["dataArray"][$i];#要被搜尋的字串內容
5581
				#可省略參數:
5582
				#$conf["search"]["findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
5583
				$searchResult=search::findKeyWord($conf["search"]["findKeyWord"]);
5584
				unset($conf["search"]["findKeyWord"]);
5585
 
5586
				#如果尋找 欄位內是否有 ON UPDATE 的字樣失敗
5587
				if($searchResult["status"]==="false"){
5588
 
5589
					#設置執行失敗
5590
					$result["status"]="false";
5591
 
5592
					#設置執行錯誤訊息
5593
					$result["error"]=$searchResult;
5594
 
5595
					#回傳結果
5596
					return $result;
5597
 
5598
					}#if end
5599
 
5600
				#如果有找到 ON UPDATE
5601
				if($searchResult["founded"]==="true"){ 
5602
 
5603
					#函式說明:
5604
					#將固定格式的字串分開,並回傳分開的結果。
5605
					#回傳的參數:
5606
					#$result["oriStr"],要分割的原始字串內容
5607
					#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
5608
					#$result["dataCounts"],爲總共分成幾段
5609
					#必填參數:
5610
					$conf["stringProcess"]["spiltString"]["stringIn"]=$everyLine["dataArray"][$i];#要處理的字串。
5611
					$conf["stringProcess"]["spiltString"]["spiltSymbol"]="ON UPDATE ";#爲以哪個符號作爲分割
5612
					$onUpdateString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
5613
					unset($conf["stringProcess"]["spiltString"]);
5614
 
5615
					#函式說明:
5616
					#將固定格式的字串分開,並回傳分開的結果。
5617
					#回傳的參數:
5618
					#$result["oriStr"],要分割的原始字串內容
5619
					#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
5620
					#$result["dataCounts"],爲總共分成幾段
5621
					#必填參數:
5622
					$conf["stringProcess"]["spiltString"]["stringIn"]=$onUpdateString["dataArray"][1];#要處理的字串。
5623
					$conf["stringProcess"]["spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
5624
					$onUpdateString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
5625
					unset($conf["stringProcess"]["spiltString"]);
5626
 
5627
					#如果分割字串失敗
5628
					if($onUpdateString["status"]=="false"){
5629
 
5630
						#設置執行不正常
5631
						$result["status"]="false";
5632
 
5633
						#設置錯誤訊息
5634
						$result["error"]=$onUpdateString;
5635
 
5636
						#回傳結果
5637
						return $result;
5638
 
5639
						}#if end
5640
 
5641
					#將「,」去掉 
5642
					#函式說明:
5643
					#處理字串避免網頁出錯
5644
					#回傳結果::
5645
					#$result,爲處理好的字串。
5646
					#必填參數:
5647
					$conf["stringProcess"]["correctCharacter"]["stringIn"]=$onUpdateString["dataArray"][0];#爲要處理的字串
5648
					#可省略參數:
5649
					$conf["stringProcess"]["correctCharacter"]["selectedCharacter"]=array(",");#爲被選擇要處理的字串/字元,須爲陣列值。
5650
					#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
5651
					#$conf["stringProcess"]["correctCharacter"]["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
5652
					$columnOnUpdateActionStr=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);
5653
					unset($conf["stringProcess"]["correctCharacter"]);
5654
 
5655
					#如果 處理字串失敗
5656
					if($columnOnUpdateActionStr["status"]=="false"){
5657
 
5658
						#設置執行不正常
5659
						$result["status"]="false";
5660
 
5661
						#設置錯誤訊息
5662
						$result["error"]=$columnOnUpdateActionStr;
5663
 
5664
						#回傳結果
5665
						return $result;
5666
 
5667
						}#if end
5668
 
5669
					#取得 ON UPDATE 的對應動作
5670
					$result["columnOnUpdateAction"][$result["columnName"][$i]]=$columnOnUpdateActionStr["content"];
5671
					$result["columnOnUpdateAction"][$i]=$columnOnUpdateActionStr["content"];
5672
 
5673
					}#if end
5674
 
5675
				#反之,沒有 ON UPDATE 的對應動作
5676
				else{
5677
 
5678
					$result["columnOnUpdateAction"][$i]="沒有指定";
5679
					$result["columnOnUpdateAction"][$result["columnName"][$i]]=$result["columnOnUpdateAction"][$i];
5680
 
5681
					}#else end
5682
 
5683
				}#if end
5684
 
5685
			#如果有欄位內有 CHARACTER SET 的字樣
5686
 
5687
			#函式說明:
5688
			#檢查字串裡面有無指定的關鍵字
5689
			#回傳結果::
5690
			#$result["status"],"true"代表執行成功,"false"代表執行失敗。
5691
			#$result["error"],錯誤訊息
5692
			#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
5693
			#必填參數:
5694
			$conf["search"]["findKeyWord"]["keyWord"]="CHARACTER SET";#想要搜尋的關鍵字
5695
			$conf["search"]["findKeyWord"]["string"]=$everyLine["dataArray"][$i];#要被搜尋的字串內容
5696
			#可省略參數:
5697
			#$conf["search"]["findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
5698
			$searchResult=search::findKeyWord($conf["search"]["findKeyWord"]);
5699
			unset($conf["search"]["findKeyWord"]);
5700
 
5701
			#如果尋找關鍵字失敗
5702
			if($searchResult["status"]==="false"){
5703
 
5704
				#設置執行不正常
5705
				$result["status"]="false";
5706
 
5707
				#設置錯誤訊息
5708
				$result["error"]=$searchResult;
5709
 
5710
				#回傳結果
5711
				return $result;
5712
 
5713
				}#if end
5714
 
5715
			#如果有找到 CHARACTER SET
5716
			if($searchResult["founded"]==="true"){ 
5717
 
5718
				#函式說明:
5719
				#將固定格式的字串分開,並回傳分開的結果。
5720
				#回傳的參數:
5721
				#$result["oriStr"],要分割的原始字串內容
5722
				#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
5723
				#$result["dataCounts"],爲總共分成幾段
5724
				#必填參數:
5725
				$conf["stringProcess"]["spiltString"]["stringIn"]=$everyLine["dataArray"][$i];#要處理的字串。
5726
				$conf["stringProcess"]["spiltString"]["spiltSymbol"]="CHARACTER SET ";#爲以哪個符號作爲分割
5727
				$characterSetString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
5728
				unset($conf["stringProcess"]["spiltString"]);
5729
 
5730
				#如果分割字串失敗
5731
				if($characterSetString["status"]==="false"){
5732
 
5733
					#設置執行不正常
5734
					$result["status"]="false";
5735
 
5736
					#設置錯誤訊息
5737
					$result["error"]=$characterSetString;
5738
 
5739
					#回傳結果
5740
					return $result;
5741
 
5742
					}#if end
5743
 
5744
				#函式說明:
5745
				#將固定格式的字串分開,並回傳分開的結果。
5746
				#回傳的參數:
5747
				#$result["oriStr"],要分割的原始字串內容
5748
				#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
5749
				#$result["dataCounts"],爲總共分成幾段
5750
				#必填參數:
5751
				$conf["stringProcess"]["spiltString"]["stringIn"]=$characterSetString["dataArray"][1];#要處理的字串。
5752
				$conf["stringProcess"]["spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
5753
				$characterSetString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
5754
				unset($conf["stringProcess"]["spiltString"]);
5755
 
5756
				#如果分割字串失敗
5757
				if($characterSetString["status"]==="false"){
5758
 
5759
					#設置執行不正常
5760
					$result["status"]="false";
5761
 
5762
					#設置錯誤訊息
5763
					$result["error"]=$characterSetString;
5764
 
5765
					#回傳結果
5766
					return $result;
5767
 
5768
					}#if end
5769
 
5770
				#將「,」去掉 
5771
				#函式說明:
5772
				#處理字串避免網頁出錯
5773
				#回傳結果::
5774
				#$result,爲處理好的字串。
5775
				#必填參數:
5776
				$conf["stringProcess"]["correctCharacter"]["stringIn"]=$characterSetString["dataArray"][0];#爲要處理的字串
5777
				#可省略參數:
5778
				$conf["stringProcess"]["correctCharacter"]["selectedCharacter"]=array(",");#爲被選擇要處理的字串/字元,須爲陣列值。
5779
				#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
5780
				#$conf["stringProcess"]["correctCharacter"]["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
5781
				$processedCharacterSetStr=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);
5782
				unset($conf["stringProcess"]["correctCharacter"]);
5783
 
5784
				#如果處理字串失敗
5785
				if($processedCharacterSetStr["status"]==="false"){
5786
 
5787
					#設置執行不正常
5788
					$result["status"]="false";
5789
 
5790
					#設置錯誤訊息
5791
					$result["error"]=$processedCharacterSetStr;
5792
 
5793
					#回傳結果
5794
					return $result;
5795
 
5796
					}#if end
5797
 
5798
				#取得CHARACTER SET的設定字串
5799
				$result["columnCharacterSet"][$i]=$processedCharacterSetStr["content"];
5800
				$result["columnCharacterSet"][$result["columnName"][$i]]=$processedCharacterSetStr["content"];
5801
 
5802
				}#if end
5803
 
5804
			#反之,沒有 CHARACTER SET 字樣
5805
			else{
5806
 
5807
				#如果存在該欄位
5808
				if(isset($result["columnName"][$i])){
5809
 
5810
					#採用預設的 $result["charset"]
5811
					$result["columnCharacterSet"][$i]=$result["charset"];
5812
					$result["columnCharacterSet"][$result["columnName"][$i]]=$result["columnCharacterSet"][$i];
5813
 
5814
					}#if end
5815
 
5816
				}#else end
5817
 
5818
			#檢查是否有 COLLATE 字樣...
5819
 
5820
			#函式說明:
5821
			#檢查字串裡面有無指定的關鍵字
5822
			#回傳結果::
5823
			#$result["status"],"true"代表執行成功,"false"代表執行失敗。
5824
			#$result["error"],錯誤訊息
5825
			#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
5826
			#必填參數:
5827
			$conf["search"]["findKeyWord"]["keyWord"]="COLLATE";#想要搜尋的關鍵字
5828
			$conf["search"]["findKeyWord"]["string"]=$everyLine["dataArray"][$i];#要被搜尋的字串內容
5829
			#可省略參數:
5830
			#$conf["search"]["findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
5831
			$searchResult=search::findKeyWord($conf["search"]["findKeyWord"]);
5832
			unset($conf["search"]["findKeyWord"]);
5833
 
5834
			#如果尋找關鍵字失敗
5835
			if($searchResult["status"]==="false"){
5836
 
5837
				#設置執行不正常
5838
				$result["status"]="false";
5839
 
5840
				#設置錯誤訊息
5841
				$result["error"]=$searchResult;
5842
 
5843
				#回傳結果
5844
				return $result;
5845
 
5846
				}#if end
5847
 
5848
			#如果有找到 CHARACTER SET
5849
			if($searchResult["founded"]==="true"){ 
5850
 
5851
				#函式說明:
5852
				#將固定格式的字串分開,並回傳分開的結果。
5853
				#回傳的參數:
5854
				#$result["oriStr"],要分割的原始字串內容
5855
				#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
5856
				#$result["dataCounts"],爲總共分成幾段
5857
				#必填參數:
5858
				$conf["stringProcess"]["spiltString"]["stringIn"]=$everyLine["dataArray"][$i];#要處理的字串。
5859
				$conf["stringProcess"]["spiltString"]["spiltSymbol"]="COLLATE ";#爲以哪個符號作爲分割
5860
				$collateString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
5861
				unset($conf["stringProcess"]["spiltString"]);
5862
 
5863
				#如果分割字串失敗
5864
				if($collateString["status"]=="false"){
5865
 
5866
					#設置執行不正常
5867
					$result["status"]="false";
5868
 
5869
					#設置錯誤訊息
5870
					$result["error"]=$searchResult;
5871
 
5872
					#回傳結果
5873
					return $result;
5874
 
5875
					}#if end
5876
 
5877
				#函式說明:
5878
				#將固定格式的字串分開,並回傳分開的結果。
5879
				#回傳的參數:
5880
				#$result["oriStr"],要分割的原始字串內容
5881
				#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
5882
				#$result["dataCounts"],爲總共分成幾段
5883
				#必填參數:
5884
				$conf["stringProcess"]["spiltString"]["stringIn"]=$collateString["dataArray"][1];#要處理的字串。
5885
				$conf["stringProcess"]["spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
5886
				$collateString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
5887
				unset($conf["stringProcess"]["spiltString"]);
5888
 
5889
				#如果分割字串失敗
5890
				if($collateString["status"]==="false"){
5891
 
5892
					#設置執行不正常
5893
					$result["status"]="false";
5894
 
5895
					#設置錯誤訊息
5896
					$result["error"]=$searchResult;
5897
 
5898
					#回傳結果
5899
					return $result;
5900
 
5901
					}#if end
5902
 
5903
				#將「,」去掉 
5904
				#函式說明:
5905
				#處理字串避免網頁出錯
5906
				#回傳結果::
5907
				#$result,爲處理好的字串。
5908
				#必填參數:
5909
				$conf["stringProcess"]["correctCharacter"]["stringIn"]=$collateString["dataArray"][0];#爲要處理的字串
5910
				#可省略參數:
5911
				$conf["stringProcess"]["correctCharacter"]["selectedCharacter"]=array(",");#爲被選擇要處理的字串/字元,須爲陣列值。
5912
				#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
5913
				#$conf["stringProcess"]["correctCharacter"]["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
5914
				$thisColumnCollate=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);
5915
				unset($conf["stringProcess"]["correctCharacter"]);
5916
 
5917
				#如果處理字串失敗
5918
				if($thisColumnCollate["status"]==="false"){
5919
 
5920
					#設置執行不正常
5921
					$result["status"]="false";
5922
 
5923
					#設置錯誤訊息
5924
					$result["error"]=$thisColumnCollate;
5925
 
5926
					#回傳結果
5927
					return $result;
5928
 
5929
					}#if end
5930
 
5931
				#儲存 COLLATE 資訊字串
5932
				$result["columnCollate"][$i]=$thisColumnCollate["content"];
5933
				$result["columnCollate"][$result["columnName"][$i]]=$thisColumnCollate["content"];
5934
 
5935
				}#if end
5936
 
5937
			#反之,沒有 COLLATE  字樣
5938
			else{
5939
				#如果存在該欄位
5940
				if(isset($result["columnName"][$i])){
5941
 
5942
					$result["columnCollate"][$i]="沒有指定";
5943
					$result["columnCollate"][$result["columnName"][$i]]=$result["columnCollate"][$i];
5944
 
5945
					}#if end
5946
 
5947
				}#else end
5948
 
5949
			#檢查是否有COMMENT字樣
5950
			#函式說明:
5951
			#檢查字串裡面有無指定的關鍵字
5952
			#回傳結果::
5953
			#$result["status"],"true"代表執行成功,"false"代表執行失敗。
5954
			#$result["error"],錯誤訊息
5955
			#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
5956
			#必填參數:
5957
			$conf["search"]["findKeyWord"]["keyWord"]="COMMENT";#想要搜尋的關鍵字
5958
			$conf["search"]["findKeyWord"]["string"]=$everyLine["dataArray"][$i];#要被搜尋的字串內容
5959
			#可省略參數:
5960
			#$conf["search"]["findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
5961
			$searchResult=search::findKeyWord($conf["search"]["findKeyWord"]);
5962
			unset($conf["search"]);
5963
 
5964
			#如果尋找關鍵字失敗
5965
			if($searchResult["status"]==="false"){
5966
 
5967
				#設置執行不正常
5968
				$result["status"]="false";
5969
 
5970
				#設置錯誤訊息
5971
				$result["error"]=$searchResult;
5972
 
5973
				#回傳結果
5974
				return $result;
5975
 
5976
				}#if end
5977
 
5978
			#如果有 COMMENT 字樣
5979
			if($searchResult["founded"]==="true"){
5980
 
5981
				#函式說明:
5982
				#將固定格式的字串分開,並回傳分開的結果。
5983
				#回傳的參數:
5984
				#$result["oriStr"],要分割的原始字串內容
5985
				#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
5986
				#$result["dataCounts"],爲總共分成幾段
5987
				#必填參數:
5988
				$conf["stringProcess"]["spiltString"]["stringIn"]=$everyLine["dataArray"][$i];#要處理的字串。
5989
				$conf["stringProcess"]["spiltString"]["spiltSymbol"]="COMMENT ";#爲以哪個符號作爲分割
5990
				$commentString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
5991
				unset($conf["stringProcess"]["spiltString"]);
5992
 
5993
				#如果分割字串失敗
5994
				if($commentString["status"]=="false"){
5995
 
5996
					#設置執行不正常
5997
					$result["status"]="false";
5998
 
5999
					#設置錯誤訊息
6000
					$result["error"]=$commentString;
6001
 
6002
					#回傳結果
6003
					return $result;
6004
 
6005
					}#if end
6006
 
6007
				#函式說明:
6008
				#將固定格式的字串分開,並回傳分開的結果。
6009
				#回傳的參數:
6010
				#$result["oriStr"],要分割的原始字串內容
6011
				#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
6012
				#$result["dataCounts"],爲總共分成幾段
6013
				#必填參數:
6014
				$conf["stringProcess"]["spiltString"]["stringIn"]=$commentString["dataArray"][1];#要處理的字串。
6015
				$conf["stringProcess"]["spiltString"]["spiltSymbol"]="'";#爲以哪個符號作爲分割
6016
				$commentString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
6017
				unset($conf["stringProcess"]["spiltString"]);
6018
 
6019
				#如果分割字串失敗
6020
				if($commentString["status"]==="false"){
6021
 
6022
					#設置執行不正常
6023
					$result["status"]="false";
6024
 
6025
					#設置錯誤訊息
6026
					$result["error"]=$commentString;
6027
 
6028
					#回傳結果
6029
					return $result;
6030
 
6031
					}#if end
6032
 
6033
				#取得該欄位的註解內容
6034
				$result["columnComment"][$i]=$commentString["dataArray"][0];
6035
				$result["columnComment"][$result["columnName"][$i]]=$commentString["dataArray"][0];
6036
 
6037
				}#if end
6038
 
6039
			#反之,沒有 COMMENT 字樣
6040
			else{
6041
				#如果存在該欄位
6042
				if(isset($result["columnName"][$i])){
6043
 
6044
					#設置該欄位沒有註解
6045
					$result["columnComment"][$i]="沒有註解";
6046
					$result["columnComment"][$result["columnName"][$i]]="沒有註解";
6047
 
6048
					}#if end
6049
 
6050
				}#else end
6051
 
6052
			}#for end
6053
 
6054
		#初始化索引鍵的陣列
6055
		$result["key"]=array();
6056
 
6057
		#依據有幾個鍵值的定義來執行
6058
		foreach($keyDefine as $unClassifyString){
6059
 
6060
			#依據第一個單字來進行判斷
6061
			#可能的有:
6062
			#PRIMARY KEY,主鍵
6063
			#KEY,索引鍵
6064
			#CONSTRAINT,外鍵
6065
 
6066
			#如果找到 PRIMARY KEY
6067
			#函式說明:
6068
			#檢查字串裡面有無指定的關鍵字
6069
			#回傳結果::
6070
			#$result["status"],"true"代表執行成功,"false"代表執行失敗。
6071
			#$result["error"],錯誤訊息
6072
			#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
6073
			#必填參數:
6074
			$conf["search"]["findKeyWord"]["keyWord"]="PRIMARY KEY";#想要搜尋的關鍵字
6075
			$conf["search"]["findKeyWord"]["string"]=$unClassifyString;#要被搜尋的字串內容
6076
			#可省略參數:
6077
			#$conf["search"]["findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
6078
			$searchResult=search::findKeyWord($conf["search"]["findKeyWord"]);
6079
			unset($conf["search"]["findKeyWord"]);
6080
 
6081
			#如果尋找關鍵字失敗
6082
			if($searchResult["status"]=="false"){
6083
 
6084
				#設置執行不正常
6085
				$result["status"]="false";
6086
 
6087
				#設置錯誤訊息
6088
				$result["error"]=$searchResult;
6089
 
6090
				#回傳結果
6091
				return $result;
6092
 
6093
				}#if end
6094
 
6095
			#如果有找到 PRIMARY KEY
6096
			if($searchResult["founded"]=="true"){ 
6097
 
6098
				#函式說明:
6099
				#將固定格式的字串分開,並回傳分開的結果。
6100
				#回傳的參數:
6101
				#$result["oriStr"],要分割的原始字串內容
6102
				#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
6103
				#$result["dataCounts"],爲總共分成幾段
6104
				#必填參數:
6105
				$conf["stringProcess"]["spiltString"]["stringIn"]=$unClassifyString;#要處理的字串。
6106
				$conf["stringProcess"]["spiltString"]["spiltSymbol"]="PRIMARY KEY ";#爲以哪個符號作爲分割
6107
				$primaryKeyString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
6108
				unset($conf["stringProcess"]["spiltString"]);
6109
 
6110
				#如果分割字串失敗
6111
				if($primaryKeyString["status"]=="false"){
6112
 
6113
					#設置執行不正常
6114
					$result["status"]="false";
6115
 
6116
					#設置錯誤訊息
6117
					$result["error"]=$primaryKeyString;
6118
 
6119
					#回傳結果
6120
					return $result;
6121
 
6122
					}#if end
6123
 
6124
				#取得主鍵的欄位名稱
6125
				$primaryKey=$primaryKeyString["dataArray"][1];
6126
 
6127
				#將「,」、「`」、「(」、「)」去掉 
6128
				#函式說明:
6129
				#處理字串避免網頁出錯
6130
				#回傳結果::
6131
				#$result,爲處理好的字串。
6132
				#必填參數:
6133
				$conf["stringProcess"]["correctCharacter"]["stringIn"]=$primaryKey;#爲要處理的字串
6134
				#可省略參數:
6135
				$conf["stringProcess"]["correctCharacter"]["selectedCharacter"]=array(",","`","(",")");#爲被選擇要處理的字串/字元,須爲陣列值。
6136
				#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
6137
				#$conf["stringProcess"]["correctCharacter"]["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
6138
				$getPrimaryKey=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);
6139
				unset($conf["stringProcess"]["correctCharacter"]);
6140
 
6141
				#如果 處理字串失敗
6142
				if($getPrimaryKey["status"]=="false"){
6143
 
6144
					#設置執行不正常
6145
					$result["status"]="false";
6146
 
6147
					#設置錯誤訊息
6148
					$result["error"]=$getPrimaryKey;
6149
 
6150
					#回傳結果
6151
					return $result;
6152
 
6153
					}#if end
6154
 
6155
				#取得主鍵欄位名稱
6156
				$result["primaryKey"]=$getPrimaryKey["content"];
6157
 
6158
				#後續省略
6159
				continue;
6160
 
6161
				}#if end
6162
 
6163
			#尋找是否有 KEY 關鍵字
6164
			#函式說明:
6165
			#檢查字串裡面有無指定的關鍵字
6166
			#回傳結果::
6167
			#$result["status"],"true"代表執行成功,"false"代表執行失敗。
6168
			#$result["error"],錯誤訊息
6169
			#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
6170
			#必填參數:
6171
			$conf["search"]["findKeyWord"]["keyWord"]="  KEY ";#想要搜尋的關鍵字
6172
			$conf["search"]["findKeyWord"]["string"]=$unClassifyString;#要被搜尋的字串內容
6173
			#可省略參數:
6174
			#$conf["search"]["findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
6175
			$searchResult=search::findKeyWord($conf["search"]["findKeyWord"]);
6176
			unset($conf["search"]["findKeyWord"]);
6177
 
6178
			#如果尋找關鍵字失敗
6179
			if($searchResult["status"]=="false"){
6180
 
6181
				#設置執行不正常
6182
				$result["status"]="false";
6183
 
6184
				#設置錯誤訊息
6185
				$result["error"]=$searchResult;
6186
 
6187
				#回傳結果
6188
				return $result;
6189
 
6190
				}#if end
6191
 
6192
			#如果有找到 "  KEY "
6193
			if($searchResult["founded"]=="true"){
6194
 
6195
				# 用 "  KEY " 來分割
6196
				#函式說明:
6197
				#將固定格式的字串分開,並回傳分開的結果。
6198
				#回傳的參數:
6199
				#$result["oriStr"],要分割的原始字串內容
6200
				#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
6201
				#$result["dataCounts"],爲總共分成幾段
6202
				#必填參數:
6203
				$conf["stringProcess"]["spiltString"]["stringIn"]=$unClassifyString;#要處理的字串。
6204
				$conf["stringProcess"]["spiltString"]["spiltSymbol"]="  KEY ";#爲以哪個符號作爲分割
6205
				$keyString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
6206
				unset($conf["stringProcess"]["spiltString"]);
6207
 
6208
				#如果分割字串失敗
6209
				if($keyString["status"]=="false"){
6210
 
6211
					#設置執行不正常
6212
					$result["status"]="false";
6213
 
6214
					#設置錯誤訊息
6215
					$result["error"]=$keyString;
6216
 
6217
					#回傳結果
6218
					return $result;
6219
 
6220
					}#if end
6221
 
6222
				#函式說明:
6223
				#將固定格式的字串分開,並回傳分開的結果。
6224
				#回傳的參數:
6225
				#$result["oriStr"],要分割的原始字串內容
6226
				#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
6227
				#$result["dataCounts"],爲總共分成幾段
6228
				#必填參數:
6229
				$conf["stringProcess"]["spiltString"]["stringIn"]=$keyString["dataArray"][0];#要處理的字串。
6230
				$conf["stringProcess"]["spiltString"]["spiltSymbol"]="`";#爲以哪個符號作爲分割
6231
				$keyString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
6232
				unset($conf["stringProcess"]["spiltString"]);
6233
 
6234
				#debug
6235
				#var_dump($keyString);
6236
 
6237
				#如果分割字串失敗
6238
				if($keyString["status"]=="false"){
6239
 
6240
					#設置執行不正常
6241
					$result["status"]="false";
6242
 
6243
					#設置錯誤訊息
6244
					$result["error"]=$keyString;
6245
 
6246
					#回傳結果
6247
					return $result;
6248
 
6249
					}#if end
6250
 
6251
				#取得索引的欄位名稱
6252
				$thisKeyColumnName=$keyString["dataArray"][2];
6253
 
6254
				#取得要回傳的key欄位名稱
6255
				$result["key"][]=$thisKeyColumnName;
6256
 
6257
				#用index key欄位的名稱來儲存index key的欄位
6258
				$result["key"][$thisKeyColumnName]=$thisKeyColumnName;
6259
 
6260
				#取得用於識別 key 的 Constraint
6261
				$keyConstraintName=$keyString["dataArray"][0];
6262
 
6263
				#將「`」去掉 
6264
				#函式說明:
6265
				#處理字串避免網頁出錯
6266
				#回傳結果::
6267
				#$result,爲處理好的字串。
6268
				#必填參數:
6269
				$conf["stringProcess"]["correctCharacter"]["stringIn"]=$keyConstraintName;#爲要處理的字串
6270
				#可省略參數:
6271
				$conf["stringProcess"]["correctCharacter"]["selectedCharacter"]=array("`");#爲被選擇要處理的字串/字元,須爲陣列值。
6272
				#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
6273
				#$conf["stringProcess"]["correctCharacter"]["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
6274
				$thisKeyConstraintName=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);
6275
				unset($conf["stringProcess"]["correctCharacter"]);
6276
 
6277
				#如果處理字串失敗
6278
				if($thisKeyConstraintName["status"]=="false"){
6279
 
6280
					#設置執行不正常
6281
					$result["status"]="false";
6282
 
6283
					#設置錯誤訊息
6284
					$result["error"]=$thisKeyConstraintName;
6285
 
6286
					#回傳結果
6287
					return $result;
6288
 
6289
					}#if end
6290
 
6291
				#儲存 key 的名稱
6292
				$result["keyConstraintName"][]=$thisKeyConstraintName["content"];
6293
 
6294
				#將 $result["keyConstraintName"] 用 欄位的名稱去儲存
6295
				$result["keyConstraintName"][$thisKeyColumnName]=$thisKeyConstraintName["content"];
6296
 
6297
				#後續省略
6298
				continue;
6299
 
6300
				}#if end
6301
 
6302
			#尋找是否有 CONSTRAINT 關鍵字
6303
			#函式說明:
6304
			#檢查字串裡面有無指定的關鍵字
6305
			#回傳結果::
6306
			#$result["status"],"true"代表執行成功,"false"代表執行失敗。
6307
			#$result["error"],錯誤訊息
6308
			#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
6309
			#必填參數:
6310
			$conf["search"]["findKeyWord"]["keyWord"]="CONSTRAINT";#想要搜尋的關鍵字
6311
			$conf["search"]["findKeyWord"]["string"]=$unClassifyString;#要被搜尋的字串內容
6312
			#可省略參數:
6313
			#$conf["search"]["findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
6314
			$searchResult=search::findKeyWord($conf["search"]["findKeyWord"]);
6315
			unset($conf["search"]["findKeyWord"]);
6316
 
6317
			#如果尋找關鍵字失敗
6318
			if($searchResult["status"]=="false"){
6319
 
6320
				#設置執行不正常
6321
				$result["status"]="false";
6322
 
6323
				#設置錯誤訊息
6324
				$result["error"]=$searchResult;
6325
 
6326
				#回傳結果
6327
				return $result;
6328
 
6329
				}#if end
6330
 
6331
			#如果有找到 "CONSTRAINT"
6332
			if($searchResult["founded"]=="true"){
6333
 
6334
				#取得 CONSTRAINT 的名稱
6335
 
6336
				#用 " " 來分割字串
6337
				#函式說明:
6338
				#將固定格式的字串分開,並回傳分開的結果。
6339
				#回傳的參數:
6340
				#$result["oriStr"],要分割的原始字串內容
6341
				#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
6342
				#$result["dataCounts"],爲總共分成幾段
6343
				#必填參數:
6344
				$conf["stringProcess"]["spiltString"]["stringIn"]=$unClassifyString;#要處理的字串。
6345
				$conf["stringProcess"]["spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
6346
				$foreignKeyConstraintString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
6347
				unset($conf["stringProcess"]["spiltString"]);
6348
 
6349
				#如果分割字串失敗
6350
				if($foreignKeyConstraintString["status"]=="false"){
6351
 
6352
					#設置執行不正常
6353
					$result["status"]="false";
6354
 
6355
					#設置錯誤訊息
6356
					$result["error"]=$foreignKeyConstraintString;
6357
 
6358
					#回傳結果
6359
					return $result;
6360
 
6361
					}#if end	
6362
 
6363
				#將 $foreignKeyString[0] 的非必要字元踢除
6364
				#將「,」、「`」、「(」、「)」去掉 
6365
				#函式說明:
6366
				#處理字串避免網頁出錯
6367
				#回傳結果::
6368
				#$result,爲處理好的字串。
6369
				#必填參數:
6370
				$conf["stringProcess"]["correctCharacter"]["stringIn"]=$foreignKeyConstraintString["dataArray"][1];#爲要處理的字串
6371
				#可省略參數:
6372
				$conf["stringProcess"]["correctCharacter"]["selectedCharacter"]=array("`");#爲被選擇要處理的字串/字元,須爲陣列值。
6373
				#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
6374
				#$conf["stringProcess"]["correctCharacter"]["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
6375
				$foreignConstraintName=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);
6376
				unset($conf["stringProcess"]["correctCharacter"]);		
6377
 
6378
				#如果處理 CONSTRAINT 字串失敗
6379
				if($foreignConstraintName["status"]=="false"){
6380
 
6381
					#設置執行不正常
6382
					$result["status"]="false";
6383
 
6384
					#設置錯誤訊息
6385
					$result["error"]=$foreignConstraintName;
6386
 
6387
					#回傳結果
6388
					return $result;
6389
 
6390
					}#if end	
6391
 
6392
				#儲存 foreignKey 的 CONSTRAINT 名稱
6393
				$result["foreignKey"]["constraintName"][]=$foreignConstraintName["content"];	
6394
 
6395
				#尋找 "FOREIGN KEY"
6396
				#函式說明:
6397
				#檢查字串裡面有無指定的關鍵字
6398
				#回傳結果::
6399
				#$result["status"],"true"代表執行成功,"false"代表執行失敗。
6400
				#$result["error"],錯誤訊息
6401
				#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
6402
				#必填參數:
6403
				$conf["search"]["findKeyWord"]["keyWord"]="FOREIGN KEY";#想要搜尋的關鍵字
6404
				$conf["search"]["findKeyWord"]["string"]=$unClassifyString;#要被搜尋的字串內容
6405
				#可省略參數:
6406
				#$conf["search"]["findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
6407
				$searchResult=search::findKeyWord($conf["search"]["findKeyWord"]);
6408
				unset($conf["search"]["findKeyWord"]);
6409
 
6410
				#如果尋找關鍵字失敗
6411
				if($searchResult["status"]=="false"){
6412
 
6413
					#設置執行不正常
6414
					$result["status"]="false";
6415
 
6416
					#設置錯誤訊息
6417
					$result["error"]=$searchResult;
6418
 
6419
					#回傳結果
6420
					return $result;
6421
 
6422
					}#if end
6423
 
6424
				#如果有找到 "FOREIGN KEY"
6425
				if($searchResult["founded"]=="true"){
6426
 
6427
					#用 "FOREIGN KEY " 來分割字串
6428
					#函式說明:
6429
					#將固定格式的字串分開,並回傳分開的結果。
6430
					#回傳的參數:
6431
					#$result["oriStr"],要分割的原始字串內容
6432
					#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
6433
					#$result["dataCounts"],爲總共分成幾段
6434
					#必填參數:
6435
					$conf["stringProcess"]["spiltString"]["stringIn"]=$unClassifyString;#要處理的字串。
6436
					$conf["stringProcess"]["spiltString"]["spiltSymbol"]="FOREIGN KEY ";#爲以哪個符號作爲分割
6437
					$foreignKeyString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
6438
					unset($conf["stringProcess"]["spiltString"]);
6439
 
6440
					#如果分割字串失敗
6441
					if($foreignKeyString["status"]=="false"){
6442
 
6443
						#設置執行不正常
6444
						$result["status"]="false";
6445
 
6446
						#設置錯誤訊息
6447
						$result["error"]=$foreignKeyString;
6448
 
6449
						#回傳結果
6450
						return $result;
6451
 
6452
						}#if end	
6453
 
6454
					#用 " " 來分割字串
6455
					#函式說明:
6456
					#將固定格式的字串分開,並回傳分開的結果。
6457
					#回傳的參數:
6458
					#$result["oriStr"],要分割的原始字串內容
6459
					#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
6460
					#$result["dataCounts"],爲總共分成幾段
6461
					#必填參數:
6462
					$conf["stringProcess"]["spiltString"]["stringIn"]=$foreignKeyString["dataArray"][1];#要處理的字串。
6463
					$conf["stringProcess"]["spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
6464
					$foreignKeyString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
6465
					unset($conf["stringProcess"]["spiltString"]);
6466
 
6467
					#如果分割字串失敗
6468
					if($foreignKeyString["status"]=="false"){
6469
 
6470
						#設置執行不正常
6471
						$result["status"]="false";
6472
 
6473
						#設置錯誤訊息
6474
						$result["error"]=$foreignKeyString;
6475
 
6476
						#回傳結果
6477
						return $result;
6478
 
6479
						}#if end	
6480
 
6481
					#將 $foreignKeyString[0] 的非必要字元踢除
6482
					#將「,」、「`」、「(」、「)」去掉 
6483
					#函式說明:
6484
					#處理字串避免網頁出錯
6485
					#回傳結果::
6486
					#$result,爲處理好的字串。
6487
					#必填參數:
6488
					$conf["stringProcess"]["correctCharacter"]["stringIn"]=$foreignKeyString["dataArray"][0];#爲要處理的字串
6489
					#可省略參數:
6490
					$conf["stringProcess"]["correctCharacter"]["selectedCharacter"]=array(",","`","(",")");#爲被選擇要處理的字串/字元,須爲陣列值。
6491
					#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
6492
					#$conf["stringProcess"]["correctCharacter"]["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
6493
					$thisForeignKeyColumnName=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);
6494
					unset($conf["stringProcess"]["correctCharacter"]);
6495
 
6496
					#如果 處理字串失敗
6497
					if($thisForeignKeyColumnName["status"]=="false"){
6498
 
6499
						#設置執行不正常
6500
						$result["status"]="false";
6501
 
6502
						#設置錯誤訊息
6503
						$result["error"]=$thisForeignKeyColumnName;
6504
 
6505
						#回傳結果
6506
						return $result;
6507
 
6508
						}#if end
6509
 
6510
					#儲存外鍵欄位的名稱
6511
					$result["foreignKey"]["columnName"][]=$thisForeignKeyColumnName["content"];
6512
 
6513
					#用該外鍵欄位的名稱,作為key來存放外鍵欄位的名稱
6514
					$result["foreignKey"]["columnName"][$thisForeignKeyColumnName["content"]]=$thisForeignKeyColumnName["content"];
6515
 
6516
					#用 "REFERENCES " 來分割字串
6517
					#函式說明:
6518
					#將固定格式的字串分開,並回傳分開的結果。
6519
					#回傳的參數:
6520
					#$result["oriStr"],要分割的原始字串內容
6521
					#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
6522
					#$result["dataCounts"],爲總共分成幾段
6523
					#必填參數:
6524
					$conf["stringProcess"]["spiltString"]["stringIn"]=$unClassifyString;#要處理的字串。
6525
					$conf["stringProcess"]["spiltString"]["spiltSymbol"]="REFERENCES ";#爲以哪個符號作爲分割
6526
					$foreignKeyReferencesString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
6527
					unset($conf["stringProcess"]["spiltString"]);
6528
 
6529
					#如果分割字串失敗
6530
					if($foreignKeyReferencesString["status"]=="false"){
6531
 
6532
						#設置執行不正常
6533
						$result["status"]="false";
6534
 
6535
						#設置錯誤訊息
6536
						$result["error"]=$foreignKeyReferencesString;
6537
 
6538
						#回傳結果
6539
						return $result;
6540
 
6541
						}#if end
6542
 
6543
					#用 " " 來分割字串
6544
					#函式說明:
6545
					#將固定格式的字串分開,並回傳分開的結果。
6546
					#回傳的參數:
6547
					#$result["oriStr"],要分割的原始字串內容
6548
					#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
6549
					#$result["dataCounts"],爲總共分成幾段
6550
					#必填參數:
6551
					$conf["stringProcess"]["spiltString"]["stringIn"]=$foreignKeyReferencesString["dataArray"][1];#要處理的字串。
6552
					$conf["stringProcess"]["spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
6553
					$foreignKeyReferencesString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
6554
					unset($conf["stringProcess"]["spiltString"]);
6555
 
6556
					#如果分割字串失敗
6557
					if($foreignKeyReferencesString["status"]=="false"){
6558
 
6559
						#設置執行不正常
6560
						$result["status"]="false";
6561
 
6562
						#設置錯誤訊息
6563
						$result["error"]=$foreignKeyReferencesString;
6564
 
6565
						#回傳結果
6566
						return $result;
6567
 
6568
						}#if end
6569
 
6570
					#將 $foreignKeyString[0] 的非必要字元踢除
6571
					#將「,」、「`」、「(」、「)」去掉 
6572
					#函式說明:
6573
					#處理字串避免網頁出錯
6574
					#回傳結果::
6575
					#$result,爲處理好的字串。
6576
					#必填參數:
6577
					$conf["stringProcess"]["correctCharacter"]["stringIn"]=$foreignKeyReferencesString["dataArray"][1];#爲要處理的字串
6578
					#可省略參數:
6579
					$conf["stringProcess"]["correctCharacter"]["selectedCharacter"]=array(",","`","(",")");#爲被選擇要處理的字串/字元,須爲陣列值。
6580
						#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
6581
					#$conf["stringProcess"]["correctCharacter"]["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
6582
					$tempReferencesColumn=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);
6583
					unset($conf["stringProcess"]["correctCharacter"]);
6584
 
6585
					#如果 處理字串失敗
6586
					if($tempReferencesColumn["status"]=="false"){
6587
 
6588
						#設置執行不正常
6589
						$result["status"]="false";
6590
 
6591
						#設置錯誤訊息
6592
						$result["error"]=$tempReferencesColumn;
6593
 
6594
						#回傳結果
6595
						return $result;
6596
 
6597
						}#if end
6598
 
6599
					#取得參照的欄位名稱
6600
					$result["foreignKey"]["referencesColumn"][]=$tempReferencesColumn["content"];
6601
 
6602
					#用欄位名稱來儲存參照的資料表
6603
					$result["foreignKey"]["referencesColumn"][$thisForeignKeyColumnName["content"]]=$tempReferencesColumn["content"];
6604
 
6605
					#將 $foreignKeyString[0] 的非必要字元踢除
6606
					#將「,」、「`」、「(」、「)」去掉 
6607
					#函式說明:
6608
					#處理字串避免網頁出錯
6609
					#回傳結果::
6610
					#$result,爲處理好的字串。
6611
					#必填參數:
6612
					$conf["stringProcess"]["correctCharacter"]["stringIn"]=$foreignKeyReferencesString["dataArray"][0];#爲要處理的字串
6613
					#可省略參數:
6614
					$conf["stringProcess"]["correctCharacter"]["selectedCharacter"]=array("`");#爲被選擇要處理的字串/字元,須爲陣列值。
6615
					#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
6616
					#$conf["stringProcess"]["correctCharacter"]["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
6617
					$tempReferencesTable=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);
6618
					unset($conf["stringProcess"]["correctCharacter"]);
6619
 
6620
					#如果處理字串失敗
6621
					if($tempReferencesTable["status"]=="false"){
6622
 
6623
						#設置執行不正常
6624
						$result["status"]="false";
6625
 
6626
						#設置錯誤訊息
6627
						$result["error"]=$tempReferencesTable;
6628
 
6629
						#回傳結果
6630
						return $result;
6631
 
6632
						}#if end	
6633
 
6634
					#取得參照的資料表
6635
					$result["foreignKey"]["referencesTable"][]=$tempReferencesTable["content"];
6636
 
6637
					#用欄位名稱來儲存參照的欄位
6638
					$result["foreignKey"]["referencesTable"][$thisForeignKeyColumnName["content"]]=$tempReferencesTable["content"];
6639
 
6640
					#如果有 "ON UPDATE" 存在
6641
					#函式說明:
6642
					#檢查字串裡面有無指定的關鍵字
6643
					#回傳結果::
6644
					#$result["status"],"true"代表執行成功,"false"代表執行失敗。
6645
					#$result["error"],錯誤訊息
6646
					#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
6647
					#必填參數:
6648
					$conf["search"]["findKeyWord"]["keyWord"]="ON UPDATE";#想要搜尋的關鍵字
6649
					$conf["search"]["findKeyWord"]["string"]=$unClassifyString;#要被搜尋的字串內容
6650
					#可省略參數:
6651
					#$conf["search"]["findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
6652
					$searchResult=search::findKeyWord($conf["search"]["findKeyWord"]);
6653
					unset($conf["search"]["findKeyWord"]);
6654
 
6655
					#如果尋找關鍵字失敗
6656
					if($searchResult["status"]=="false"){
6657
 
6658
						#設置執行不正常
6659
						$result["status"]="false";
6660
 
6661
						#設置錯誤訊息
6662
						$result["error"]=$searchResult;
6663
 
6664
						#回傳結果
6665
						return $result;
6666
 
6667
						}#if end
6668
 
6669
					#如果有找到 "ON UPDATE"
6670
					if($searchResult["founded"]=="true"){
6671
 
6672
						#用 "ON UPDATE " 來分割字串
6673
						#函式說明:
6674
						#將固定格式的字串分開,並回傳分開的結果。
6675
						#回傳的參數:
6676
						#$result["oriStr"],要分割的原始字串內容
6677
						#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
6678
						#$result["dataCounts"],爲總共分成幾段
6679
						#必填參數:
6680
						$conf["stringProcess"]["spiltString"]["stringIn"]=$unClassifyString;#要處理的字串。
6681
						$conf["stringProcess"]["spiltString"]["spiltSymbol"]="ON UPDATE ";#爲以哪個符號作爲分割
6682
						$foreignKeyOnUpdateString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
6683
						unset($conf["stringProcess"]["spiltString"]);
6684
 
6685
						#如果分割字串失敗
6686
						if($foreignKeyOnUpdateString["status"]=="false"){
6687
 
6688
							#設置執行不正常
6689
							$result["status"]="false";
6690
 
6691
							#設置錯誤訊息
6692
							$result["error"]=$searchResult;
6693
 
6694
							#回傳結果
6695
							return $result;
6696
 
6697
							}#if end
6698
 
6699
						#檢查裏面是否含有 " ON DELETE " 字樣
6700
						#函式說明:
6701
						#檢查字串裡面有無指定的關鍵字
6702
						#回傳結果::
6703
						#$result["status"],"true"代表執行成功,"false"代表執行失敗。
6704
						#$result["error"],錯誤訊息
6705
						#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
6706
						#必填參數:
6707
						$conf["search"]["findKeyWord"]["keyWord"]=" ON DELETE ";#想要搜尋的關鍵字
6708
						$conf["search"]["findKeyWord"]["string"]=$foreignKeyOnUpdateString["dataArray"][1];#要被搜尋的字串內容
6709
						#可省略參數:
6710
						#$conf["search"]["findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
6711
						$searchResult=search::findKeyWord($conf["search"]["findKeyWord"]);
6712
						unset($conf["search"]["findKeyWord"]);
6713
 
6714
						#如果尋找關鍵字失敗
6715
						if($searchResult["status"]=="false"){
6716
 
6717
							#設置執行不正常
6718
							$result["status"]="false";
6719
 
6720
							#設置錯誤訊息
6721
							$result["error"]=$searchResult;
6722
 
6723
							#回傳結果
6724
							return $result;
6725
 
6726
							}#if end
6727
 
6728
						#如果裏面含有 "ON DELETE " 字樣
6729
						if($searchResult["founded"]=="true"){
6730
 
6731
							#我們只要取得 "ON DELETE " 前面的內容
6732
							#用"ON UPDATE "來分割
6733
							#函式說明:
6734
							#將固定格式的字串分開,並回傳分開的結果。
6735
							#回傳的參數:
6736
							#$result["oriStr"],要分割的原始字串內容
6737
							#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
6738
							#$result["dataCounts"],爲總共分成幾段
6739
							#必填參數:
6740
							$conf["stringProcess"]["spiltString"]["stringIn"]=$foreignKeyOnUpdateString["dataArray"][1];#要處理的字串。
6741
							$conf["stringProcess"]["spiltString"]["spiltSymbol"]=" ON DELETE ";#爲以哪個符號作爲分割
6742
							$foreignKeyOnDeleteString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
6743
							unset($conf["stringProcess"]["spiltString"]);
6744
							#var_dump($foreignKeyOnDeleteString);
6745
 
6746
							#如果分割字串失敗
6747
							if($foreignKeyOnDeleteString["status"]=="false"){
6748
 
6749
								#設置執行不正常
6750
								$result["status"]="false";
6751
 
6752
								#設置錯誤訊息
6753
								$result["error"]=$foreignKeyOnDeleteString;
6754
 
6755
								#回傳結果
6756
								return $result;
6757
 
6758
								}#if end
6759
 
6760
							$foreignKeyOnUpdateString=$foreignKeyOnUpdateString["dataArray"][0];
6761
 
6762
							#將 $foreignKeyOnUpdateString 的非必要字元踢除
6763
							#將「,」、「`」、「(」、「)」去掉 
6764
							#函式說明:
6765
							#處理字串避免網頁出錯
6766
							#回傳結果::
6767
							#$result,爲處理好的字串。
6768
							#必填參數:
6769
							$conf["stringProcess"]["correctCharacter"]["stringIn"]=$foreignKeyOnUpdateString;#爲要處理的字串
6770
							#可省略參數:
6771
							$conf["stringProcess"]["correctCharacter"]["selectedCharacter"]=array(",");#爲被選擇要處理的字串/字元,須爲陣列值。
6772
								#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
6773
							#$conf["stringProcess"]["correctCharacter"]["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
6774
							$tempOnUpdateAction=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);
6775
							unset($conf["stringProcess"]["correctCharacter"]);
6776
 
6777
							#如果 處理字串 失敗
6778
							if($tempOnUpdateAction["status"]=="false"){
6779
 
6780
								#設置執行不正常
6781
								$result["status"]="false";
6782
 
6783
								#設置錯誤訊息
6784
								$result["error"]=$tempOnUpdateAction;
6785
 
6786
								#回傳結果
6787
								return $result;
6788
 
6789
								}#if end
6790
 
6791
							#紀錄 ON UPDATE 的動作字串
6792
							$result["foreignKey"]["onUpdateAction"][]=$tempOnUpdateAction["content"];
6793
 
6794
							#用 freign key 的名稱來紀錄外鍵更新的動作
6795
							$result["foreignKey"]["onUpdateAction"][$thisForeignKeyColumnName]=$tempOnUpdateAction["content"];
6796
 
6797
							}#if end
6798
 
6799
						#反之 沒有 "ON DELETE " 字樣
6800
						else{	
6801
 
6802
							#var_dump($foreignKeyOnUpdateString["dataArray"][1]);
6803
 
6804
							#將 $foreignKeyOnUpdateString 的非必要字元踢除
6805
							#將「,」、「`」、「(」、「)」去掉 
6806
							#函式說明:
6807
							#處理字串避免網頁出錯
6808
							#回傳結果::
6809
							#$result,爲處理好的字串。
6810
							#必填參數:
6811
							$conf["stringProcess"]["correctCharacter"]["stringIn"]=$foreignKeyOnUpdateString["dataArray"][1];#爲要處理的字串
6812
							#可省略參數:
6813
							$conf["stringProcess"]["correctCharacter"]["selectedCharacter"]=array(",");#爲被選擇要處理的字串/字元,須爲陣列值。
6814
								#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
6815
							#$conf["stringProcess"]["correctCharacter"]["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
6816
							$tempOnUpdateAction=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);
6817
							unset($conf["stringProcess"]["correctCharacter"]);
6818
 
6819
							#如果處理字串失敗
6820
							if($tempOnUpdateAction["status"]=="false"){
6821
 
6822
								#設置執行不正常
6823
								$result["status"]="false";
6824
 
6825
								#設置錯誤訊息
6826
								$result["error"]=$tempOnUpdateAction;
6827
 
6828
								#回傳結果
6829
								return $result;
6830
 
6831
								}#if end
6832
 
6833
							#紀錄外鍵更新的動作
6834
							$result["foreignKey"]["onUpdateAction"][]=$tempOnUpdateAction["content"];
6835
 
6836
							#用 freign key 的名稱來紀錄外鍵更新的動作
6837
							$result["foreignKey"]["onUpdateAction"][$thisForeignKeyColumnName["content"]]=$tempOnUpdateAction["content"];
6838
 
6839
							}#else end
6840
 
6841
						}#if end
6842
 
6843
					#如果有 "ON DELETE" 存在
6844
					#函式說明:
6845
					#檢查字串裡面有無指定的關鍵字
6846
					#回傳結果::
6847
					#$result["status"],"true"代表執行成功,"false"代表執行失敗。
6848
					#$result["error"],錯誤訊息
6849
					#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
6850
					#必填參數:
6851
					$conf["search"]["findKeyWord"]["keyWord"]="ON DELETE";#想要搜尋的關鍵字
6852
					$conf["search"]["findKeyWord"]["string"]=$unClassifyString;#要被搜尋的字串內容
6853
					#可省略參數:
6854
					#$conf["search"]["findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
6855
					$searchResult=search::findKeyWord($conf["search"]["findKeyWord"]);
6856
					unset($conf["search"]["findKeyWord"]);
6857
 
6858
					#如果尋找關鍵字失敗
6859
					if($searchResult["status"]=="false"){
6860
 
6861
						#設置執行不正常
6862
						$result["status"]="false";
6863
 
6864
						#設置錯誤訊息
6865
						$result["error"]=$searchResult;
6866
 
6867
						#回傳結果
6868
						return $result;
6869
 
6870
						}#if end
6871
 
6872
					#如果有找到 "ON DELETE"
6873
					if($searchResult["founded"]=="true"){							
6874
 
6875
						#用 "ON DELETE " 來分割字串
6876
						#函式說明:
6877
						#將固定格式的字串分開,並回傳分開的結果。
6878
						#回傳的參數:
6879
						#$result["oriStr"],要分割的原始字串內容
6880
						#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
6881
						#$result["dataCounts"],爲總共分成幾段
6882
						#必填參數:
6883
						$conf["stringProcess"]["spiltString"]["stringIn"]=$unClassifyString;#要處理的字串。
6884
						$conf["stringProcess"]["spiltString"]["spiltSymbol"]="ON DELETE ";#爲以哪個符號作爲分割
6885
						$foreignKeyOnDeleteString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
6886
						unset($conf["stringProcess"]["spiltString"]);
6887
 
6888
						#如果分割字串失敗
6889
						if($foreignKeyOnDeleteString["status"]=="false"){
6890
 
6891
							#設置執行不正常
6892
							$result["status"]="false";
6893
 
6894
							#設置錯誤訊息
6895
							$result["error"]=$foreignKeyOnDeleteString;
6896
 
6897
							#回傳結果
6898
							return $result;
6899
 
6900
							}#if end
6901
 
6902
						#檢查裏面是否含有 " ON UPDATE " 字樣
6903
						#函式說明:
6904
						#檢查字串裡面有無指定的關鍵字
6905
						#回傳結果::
6906
						#$result["status"],"true"代表執行成功,"false"代表執行失敗。
6907
						#$result["error"],錯誤訊息
6908
						#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
6909
						#必填參數:
6910
						$conf["search"]["findKeyWord"]["keyWord"]="ON UPDATE ";#想要搜尋的關鍵字
6911
						$conf["search"]["findKeyWord"]["string"]=$foreignKeyOnDeleteString["dataArray"][1];#要被搜尋的字串內容
6912
						#可省略參數:
6913
						#$conf["search"]["findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
6914
						$searchResult=search::findKeyWord($conf["search"]["findKeyWord"]);
6915
						unset($conf["search"]["findKeyWord"]);
6916
 
6917
						#如果分割字串失敗
6918
						if($searchResult["status"]=="false"){
6919
 
6920
							#設置執行不正常
6921
							$result["status"]="false";
6922
 
6923
							#設置錯誤訊息
6924
							$result["error"]=$searchResult;
6925
 
6926
							#回傳結果
6927
							return $result;
6928
 
6929
							}#if end
6930
 
6931
						#如果裏面含有 "ON UPDATE " 字樣
6932
						if($searchResult["founded"]=="true"){
6933
 
6934
							#我們只要取得 "ON UPDATE " 前面的內容
6935
							#用"ON UPDATE "來分割
6936
							#函式說明:
6937
							#將固定格式的字串分開,並回傳分開的結果。
6938
							#回傳的參數:
6939
							#$result["oriStr"],要分割的原始字串內容
6940
							#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
6941
							#$result["dataCounts"],爲總共分成幾段
6942
							#必填參數:
6943
							$conf["stringProcess"]["spiltString"]["stringIn"]=$foreignKeyOnDeleteString["dataArray"][1];#要處理的字串。
6944
							$conf["stringProcess"]["spiltString"]["spiltSymbol"]=" ON UPDATE ";#爲以哪個符號作爲分割
6945
							$foreignKeyOnDeleteString=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
6946
							unset($conf["stringProcess"]["spiltString"]);
6947
 
6948
							#如果分割字串失敗
6949
							if($searchResult["status"]=="false"){
6950
 
6951
								#設置執行不正常
6952
								$result["status"]="false";
6953
 
6954
								#設置錯誤訊息
6955
								$result["error"]=$searchResult;
6956
 
6957
								#回傳結果
6958
								return $result;
6959
 
6960
								}#if end
6961
 
6962
							$foreignKeyOnDeleteString=$foreignKeyOnDeleteString["dataArray"][0];
6963
 
6964
							#將 $foreignKeyString[0] 的非必要字元踢除
6965
							#將「,」、「`」、「(」、「)」去掉 
6966
							#函式說明:
6967
							#處理字串避免網頁出錯
6968
							#回傳結果::
6969
							#$result,爲處理好的字串。
6970
							#必填參數:
6971
							$conf["stringProcess"]["correctCharacter"]["stringIn"]=$foreignKeyOnDeleteString;#爲要處理的字串
6972
							#可省略參數:
6973
							$conf["stringProcess"]["correctCharacter"]["selectedCharacter"]=array(",");#爲被選擇要處理的字串/字元,須爲陣列值。
6974
								#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
6975
							#$conf["stringProcess"]["correctCharacter"]["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
6976
							$tempOneleteAction=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);
6977
							unset($conf["stringProcess"]["correctCharacter"]);
6978
 
6979
							#如果處理字串失敗
6980
							if($tempOneleteAction["status"]=="false"){
6981
 
6982
								#設置執行不正常
6983
								$result["status"]="false";
6984
 
6985
								#設置錯誤訊息
6986
								$result["error"]=$tempOneleteAction;
6987
 
6988
								#回傳結果
6989
								return $result;
6990
 
6991
								}#if end
6992
 
6993
							#儲存外鍵移除後的動作
6994
							$result["foreignKey"]["onDeleteAction"][]=$tempOneleteAction["content"];
6995
 
6996
							#用 freign key 的名稱來紀錄外鍵移除後的動作
6997
							$result["foreignKey"]["onDeleteAction"][$thisForeignKeyColumnName["content"]]=$tempOneleteAction["content"];
6998
 
6999
							}#if end
7000
 
7001
						#反之裏面沒有 "ON UPDATE " 字樣
7002
						else{
7003
 
7004
							#將 $foreignKeyString[0] 的非必要字元踢除
7005
							#將「,」、「`」、「(」、「)」去掉 
7006
							#函式說明:
7007
							#處理字串避免網頁出錯
7008
							#回傳結果::
7009
							#$result,爲處理好的字串。
7010
							#必填參數:
7011
							$conf["stringProcess"]["correctCharacter"]["stringIn"]=$foreignKeyOnDeleteString["dataArray"][1];#爲要處理的字串
7012
							#可省略參數:
7013
							$conf["stringProcess"]["correctCharacter"]["selectedCharacter"]=array(",");#爲被選擇要處理的字串/字元,須爲陣列值。
7014
							#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
7015
							#$conf["stringProcess"]["correctCharacter"]["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
7016
							$tempOneleteAction=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);
7017
							unset($conf["stringProcess"]["correctCharacter"]);
7018
 
7019
							#如果處理字串失敗
7020
							if($tempOneleteAction["status"]=="false"){
7021
 
7022
								#設置執行不正常
7023
								$result["status"]="false";
7024
 
7025
								#設置錯誤訊息
7026
								$result["error"]=$tempOneleteAction;
7027
 
7028
								#回傳結果
7029
								return $result;
7030
 
7031
								}#if end
7032
 
7033
							#取得 外鍵移除後的動作
7034
							$result["foreignKey"]["OnDeleteAction"][]=$tempOneleteAction["content"];
7035
 
7036
							#用 freign key 的名稱來紀錄外鍵移除後的動作
7037
							$result["foreignKey"]["onDeleteAction"][$thisForeignKeyColumnName]=$tempOneleteAction["content"];
7038
 
7039
							}#else end
7040
 
7041
						}#if end
7042
 
7043
					}#if end
7044
 
7045
				}#if end
7046
 
7047
			}#foreach end
7048
 
7049
		#如果儲存索引鍵資訊的變數存在
7050
		if(isset($result["key"])){
7051
 
7052
			#如果索引鍵的數量大於0
7053
			if(count($result["key"])>0){
7054
 
7055
				#設置 $result["key"]["exist"] 為 "true";
7056
				$result["key"]["exist"]="true";
7057
 
7058
				}#if end
7059
 
7060
			#反之沒有索引鍵	
7061
			else{
7062
 
7063
				#設置 $result["key"]["exist"] 為 "false";
7064
				$result["key"]["exist"]="false";
7065
 
7066
				}#else end
7067
 
7068
			}#if end
7069
 
7070
		#如果 $result["foreignKey"]["constraintName"] 存在
7071
		if(isset($result["foreignKey"]["constraintName"])){
7072
 
7073
			#如果 $result["foreignKey"]["constraintName"] 數量大於 0
7074
			if(count($result["foreignKey"]["constraintName"])>0){
7075
 
7076
				#針對每個 $result["foreignKey"]["constraintName"][$k] 
7077
				for($i=0;$i<count($result["foreignKey"]["columnName"])/2;$i++){
7078
 
7079
					#指派 $result["foreignKey"]["constraintName"][$k] 的內容同時指派給 $result["foreignKey"]["constraintName"][$result["foreignKey"]["columnName"][$k]]
7080
					$result["foreignKey"]["constraintName"][$result["foreignKey"]["columnName"][$i]]=$result["foreignKey"]["constraintName"][$i];
7081
 
7082
					}#if end
7083
 
7084
				#將 $result["foreignKey"]["exist"] 設為 "true"
7085
				$result["foreignKey"]["exist"]="true";
7086
 
7087
				}#if end
7088
 
7089
			#反之 $result["foreignKey"]["exist"] 數量等於 0
7090
			else{
7091
 
7092
				#將 $result["foreignKey"]["exist"] 設為 "fasle"
7093
				$result["foreignKey"]["exist"]="false";
7094
 
7095
				}#else end
7096
 
7097
			}#if end	
7098
 
7099
		#反之 $result["foreignKey"]["constraintName"] 不存在
7100
		else{
7101
 
7102
			#將 $result["foreignKey"]["exist"] 設為 "fasle"
7103
			$result["foreignKey"]["exist"]="false";
7104
 
7105
			}#else end
7106
 
7107
		#執行到這邊代表執行成功
7108
 
7109
		#設置成功訊息
7110
		$result["status"]="true";
7111
 
7112
		#回傳結果
7113
		return $result;
7114
 
7115
		}#function getTableColumnDetailInfo end
7116
 
7117
	/*
7118
	#函式說明:
7119
	#移除資料表單1欄位的外鍵
7120
	#回傳結果:
7121
	#$result["status"],"true",代表執行成功;"false"代表執行失敗
7122
	#$result["function"],當前執行的函數名稱.
7123
	#$result["error"],錯誤訊息陣列
7124
	#$result["sql"],執行的sql字串.
7125
	#必填參數:
7126
	#$conf["dbAddress"],字串,爲mysql-Server的位置
7127
	$conf["dbAddress"]=$dbAddress;
7128
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號
7129
	$conf["dbAccount"]=$dbAccount;
7130
	#$conf["selectedDataBaseName"],字串,爲目標資料表所屬的資料庫.
7131
	$conf["selectedDataBaseName"]="";
7132
	#$conf["selectedDataTableName"],字串,爲目標資料表所屬的資料庫.
7133
	$conf["selectedDataTableName"]="";
7134
	#$conf["erasedForeignKeyColumnConstraintName"],字串,要移除外鍵欄位的CONSTRAINT名稱.
7135
	$conf["erasedForeignKeyColumnConstraintName"]="";
7136
	#可省略參數: 
7137
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼.
7138
	#$conf["dbPassword"]=$dbPassword;
7139
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,預設為3306.
7140
	#$conf["dbPort"]="3306";
7141
	#參考資料:
7142
	#無.
7143
	#備註:
7144
	#無.
7145
	*/ 
7146
	public static function eraseForeignKey($conf){
7147
 
7148
		#初始化要回傳的內容
7149
		$result=array();
7150
 
7151
		#取得當前執行的函數名稱
7152
		$result["function"]=__FUNCTION__;
7153
 
7154
		#如果 $conf 不為陣列
7155
		if(gettype($conf)!="array"){
7156
 
7157
			#設置執行失敗
7158
			$result["status"]="false";
7159
 
7160
			#設置執行錯誤訊息
7161
			$result["error"][]="\$conf變數須為陣列形態";
7162
 
7163
			#如果傳入的參數為 null
7164
			if($conf==null){
7165
 
7166
				#設置執行錯誤訊息
7167
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
7168
 
7169
				}#if end
7170
 
7171
			#回傳結果
7172
			return $result;
7173
 
7174
			}#if end
7175
 
7176
		#函式說明:
7177
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
7178
		#回傳結果:
7179
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
7180
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
7181
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
7182
		#必填參數:
7183
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
7184
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("dbAddress","dbAccount","selectedDataBaseName","selectedDataTableName","erasedForeignKeyColumnConstraintName");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
7185
		#可省略參數:
7186
		#$conf["variableType"]=array();#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
7187
		#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
7188
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
7189
		unset($conf["variableCheck"]["isexistMuti"]);
7190
 
7191
		#如果檢查不通過
7192
		if($checkResult["passed"]=="false"){
7193
 
7194
			#設置執行失敗的訊息
7195
			$result["status"]="false";
7196
 
7197
			#設置錯誤訊息
7198
			$result["error"]=$checkResult;
7199
 
7200
			#回傳結果
7201
			return $result;
7202
 
7203
			}#if end
7204
 
7205
		#移除foreignKey的語法
7206
		$sql="ALTER TABLE ".$conf["selectedDataBaseName"].".".$conf["selectedDataTableName"]." DROP FOREIGN KEY ".$conf["erasedForeignKeyColumnConstraintName"];
7207
 
7208
		#函式說明:
7209
		#執行mysql查詢的指令
7210
		#回傳結果::
7211
		#$result["status"],"true"為執行成功;"false"為執行失敗。
7212
		#$result["error"],錯誤訊息的陣列
7213
		#查詢號的解果,需要解析。
7214
		#必填參數:
7215
		$conf["db"]["execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
7216
		$conf["db"]["execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
7217
		$conf["db"]["execMysqlQuery"]["dbSql"]=$sql;#要執行sql語法
7218
		#可省略參數: 
7219
 
7220
		#如果有設定密碼
7221
		if(isset($conf["dbPassword"])){
7222
 
7223
			$conf["db"]["execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
7224
 
7225
			}#if end
7226
 
7227
		#如果有設定 $conf["dbPort"]	
7228
		if(isset($conf["dbPort"])){
7229
 
7230
			#設定 $conf["dbPort"]
7231
			$conf["db"]["execMysqlQuery"]["dbPort"]=$conf["dbPort"];
7232
 
7233
			}#if end	
7234
 
7235
		$queryResult=db::execMysqlQuery($conf["db"]["execMysqlQuery"]);
7236
		unset($conf["db"]["execMysqlQuery"]);
7237
 
7238
		#取得執行的sql語法
7239
		$result["sql"]=$queryResult["queryString"];
7240
 
7241
		#如果執行sql語法錯誤
7242
		if($queryResult["status"]=="false"){
7243
 
7244
			#設置執行失敗的識別
7245
			$result["status"]="false";
7246
 
7247
			#設置執行錯誤資訊
7248
			$result["error"]=$queryResult;
7249
 
7250
			#回傳結果
7251
			return $result;
7252
 
7253
			}#if end
7254
 
7255
		#執行到這邊代表執行無誤
7256
 
7257
		#設置執行成功的識別
7258
		$result["status"]="true";
7259
 
7260
		#回傳結果
7261
		return $result;
7262
 
7263
		}#function eraseForeignKey end
7264
 
7265
	/*
7266
	#函式說明:
7267
	#移除資料表單1欄位的索引鍵
7268
	#回傳結果:
7269
	#$result["status"],"true",代表執行成功;"false"代表執行失敗
7270
	#$result["error"],錯誤訊息陣列
7271
	#$result["sql"],執行的sql字串.
7272
	#必填參數:
7273
	$conf["dbAddress"],字串,爲mysql-Server的位置.
7274
	$conf["dbAddress"]=$dbAddress;
7275
	$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號.
7276
	$conf["dbAccount"]=$dbAccount;
7277
	$conf["selectedDataBaseName"],字串,爲目標資料表所屬的資料庫.
7278
	$conf["selectedDataBaseName"]="";
7279
	$conf["selectedDataTableName"],字串,爲目標資料表所屬的資料庫.
7280
	$conf["selectedDataTableName"]="";
7281
	$conf["erasedIndexKeyColumnConstraintName"],字串,要移除外鍵欄位的CONSTRAINT名稱.
7282
	$conf["erasedIndexKeyColumnConstraintName"]="";
7283
	#可省略參數: 
7284
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼.
7285
	#$conf["dbPassword"]=$dbPassword;
7286
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,預設為3306.
7287
	#$conf["dbPort"]="3306";
7288
	#參考資料:
7289
	#無.
7290
	#備註:
7291
	#無.
7292
	*/ 
7293
	public static function eraseIndexKey($conf){
7294
 
7295
		#初始化要回傳的內容
7296
		$result=array();
7297
 
7298
		#取得當前執行的函數名稱
7299
		$result["function"]=__FUNCTION__;
7300
 
7301
		#如果 $conf 不為陣列
7302
		if(gettype($conf)!="array"){
7303
 
7304
			#設置執行失敗
7305
			$result["status"]="false";
7306
 
7307
			#設置執行錯誤訊息
7308
			$result["error"][]="\$conf變數須為陣列形態";
7309
 
7310
			#如果傳入的參數為 null
7311
			if($conf==null){
7312
 
7313
				#設置執行錯誤訊息
7314
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
7315
 
7316
				}#if end
7317
 
7318
			#回傳結果
7319
			return $result;
7320
 
7321
			}#if end
7322
 
7323
		#函式說明:
7324
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
7325
		#回傳結果:
7326
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
7327
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
7328
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
7329
		#必填參數:
7330
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
7331
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("dbAddress","dbAccount","selectedDataBaseName","selectedDataTableName","erasedIndexKeyColumnConstraintName");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
7332
		#可省略參數:
7333
		#$conf["variableType"]=array();#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
7334
		#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
7335
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
7336
		unset($conf["variableCheck"]["isexistMuti"]);
7337
 
7338
		#檢查有誤
7339
		if($checkResult["status"]=="false"){
7340
 
7341
			#設置執行失敗的訊息
7342
			$result["status"]="false";
7343
 
7344
			#設置錯誤訊息
7345
			$result["error"]=$checkResult;
7346
 
7347
			#回傳結果
7348
			return $result;
7349
 
7350
			}#if end
7351
 
7352
		#如果檢查不通過
7353
		if($checkResult["passed"]=="false"){
7354
 
7355
			#設置執行失敗的訊息
7356
			$result["status"]="false";
7357
 
7358
			#設置錯誤訊息
7359
			$result["error"]=$checkResult;
7360
 
7361
			#回傳結果
7362
			return $result;
7363
 
7364
			}#if end
7365
 
7366
		#移除Key的語法
7367
		$sql="ALTER TABLE ".$conf["selectedDataBaseName"].".".$conf["selectedDataTableName"]." DROP INDEX `".$conf["erasedIndexKeyColumnConstraintName"]."`";
7368
 
7369
		#函式說明:
7370
		#執行mysql查詢的指令
7371
		#回傳結果::
7372
		#$result["status"],"true"為執行成功;"false"為執行失敗。
7373
		#$result["error"],錯誤訊息的陣列
7374
		#查詢號的解果,需要解析。
7375
		#必填參數:
7376
		$conf["db"]["execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
7377
		$conf["db"]["execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
7378
		$conf["db"]["execMysqlQuery"]["dbSql"]=$sql;#要執行sql語法
7379
		#可省略參數: 
7380
 
7381
		#如果有設定密碼
7382
		if(isset($conf["dbPassword"])){
7383
 
7384
			$conf["db"]["execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
7385
 
7386
			}#if end
7387
 
7388
		#如果有設定 $conf["dbPort"]	
7389
		if(isset($conf["dbPort"])){
7390
 
7391
			#設定 $conf["dbPort"]
7392
			$conf["db"]["execMysqlQuery"]["dbPort"]=$conf["dbPort"];
7393
 
7394
			}#if end	
7395
 
7396
		$queryResult=db::execMysqlQuery($conf["db"]["execMysqlQuery"]);
7397
		unset($conf["db"]["execMysqlQuery"]);
7398
 
7399
		#取得執行的sql語法
7400
		$result["sql"]=$queryResult["queryString"];
7401
 
7402
		#如果執行sql語法錯誤
7403
		if($queryResult["status"]=="false"){
7404
 
7405
			#設置執行失敗的識別
7406
			$result["status"]="false";
7407
 
7408
			#設置執行錯誤資訊
7409
			$result["error"]=$queryResult;
7410
 
7411
			#回傳結果
7412
			return $result;
7413
 
7414
			}#if end
7415
 
7416
		#執行到這邊代表執行無誤
7417
 
7418
		#設置執行失敗的識別
7419
		$result["status"]="true";
7420
 
7421
		#回傳結果
7422
		return $result;
7423
 
7424
		}#function eraseIndexKey end
7425
 
7426
	/*
7427
	#函式說明:
7428
	#移除資料表的欄位
7429
	#回傳結果:
7430
	#$result["status"],若成功則爲"true",失敗則爲,"false"
7431
	#$result["error"],錯誤訊息.
7432
	#$result["function"],當前執行的函數名稱.
7433
	#必填參數:
7434
	#$conf["dbAddress"],字串,爲mysql-Server的位置.
7435
	$conf["dbAddress"]=$dbAddress;
7436
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號.
7437
	$conf["dbAccount"]=$dbAccount;
7438
	#$conf["selectedDataBaseName"],字串,爲目標資料表所屬的資料庫.
7439
	$conf["selectedDataBaseName"]="";
7440
	#$conf["selectedDataTableName"],字串,爲目標資料表所屬的資料庫.
7441
	$conf["selectedDataTableName"]="";
7442
	#$conf["removedColumnName"],字串,要移除的欄位名稱.
7443
	$conf["removedColumnName"]="";
7444
	#可省略參數: 
7445
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼.
7446
	#$conf["dbPassword"]=$dbPassword;
7447
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,預設為3306.
7448
	#$conf["dbPort"]="3306";
7449
	#參考資料:
7450
	#無.
7451
	#備註:
7452
	#無.
7453
	*/
7454
	public static function dropColumn($conf){
7455
 
7456
		#初始化要回傳的內容
7457
		$result=array();
7458
 
7459
		#取得當前執行的函數名稱
7460
		$result["function"]=__FUNCTION__;
7461
 
7462
		#如果 $conf 不為陣列
7463
		if(gettype($conf)!="array"){
7464
 
7465
			#設置執行失敗
7466
			$result["status"]="false";
7467
 
7468
			#設置執行錯誤訊息
7469
			$result["error"][]="\$conf變數須為陣列形態";
7470
 
7471
			#如果傳入的參數為 null
7472
			if($conf==null){
7473
 
7474
				#設置執行錯誤訊息
7475
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
7476
 
7477
				}#if end
7478
 
7479
			#回傳結果
7480
			return $result;
7481
 
7482
			}#if end
7483
 
7484
		#函式說明:
7485
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
7486
		#回傳結果:
7487
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
7488
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
7489
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
7490
		#必填參數:
7491
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
7492
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("dbAddress","dbAccount","selectedDataBaseName","selectedDataTableName","removedColumnName");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
7493
		#可省略參數:
7494
		$conf["variableType"]=array("string","string","string","string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
7495
		#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
7496
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
7497
		unset($conf["variableCheck"]["isexistMuti"]);
7498
 
7499
		#如果檢查失敗
7500
		if($checkResult["status"]=="false"){
7501
 
7502
			#設置執行失敗的訊息
7503
			$result["status"]="false";
7504
 
7505
			#設置錯誤訊息
7506
			$result["error"]=$checkResult;
7507
 
7508
			#回傳結果
7509
			return $result;
7510
 
7511
			}#if end
7512
 
7513
		#如果檢查不通過
7514
		if($checkResult["passed"]=="false"){
7515
 
7516
			#設置執行失敗的訊息
7517
			$result["status"]="false";
7518
 
7519
			#設置錯誤訊息
7520
			$result["error"]=$checkResult;
7521
 
7522
			#回傳結果
7523
			return $result;
7524
 
7525
			}#if end
7526
 
7527
		#函式說明:
7528
		#取得資料表所有欄位的詳細資訊
7529
		#回傳的內容:
7530
		#$result["status"],執行結果,"true"代表執行成功;"false"代表執行失敗
7531
		#$result["error"],錯誤訊息陣列
7532
		#$result["sql"],執行的sql語法
7533
		#$result["oriInput"],原始的資料表欄位資訊
7534
		#$result["everyLine"],逐行的欄位資訊
7535
		#$result["tableName"],當前查詢的資料表名稱
7536
		#$result["engine"],資料表使用的儲存引擎
7537
		#$result["charset"],資料表預設的編碼
7538
		#$result["columnName"][$i],各欄位的名稱陣列,$i爲0開始的數字,也可以使用欄位的名稱。
7539
		#$result["columnVarTypeAndLengthLimit"][$i],各欄位儲存的變數形態與長度限制,$i爲0開始的數字,也可以使用欄位的名稱。
7540
		#$result["columnNotNull"][$i],各欄位是否可以不爲null,"true"爲可以不爲null;"false"爲可以爲"null",$i爲0開始的數字,也可以使用欄位的名稱。
7541
		#$result["columnAutoIncrement"][$i],各欄位是否會自動加1,"true"爲會;"false"爲不會,$i爲0開始的數字,也可以使用欄位的名稱。
7542
		#$result["columnDefault"][$i],各欄位的預設內容,若無則爲"沒有指定",$i爲0開始的數字,也可以使用欄位的名稱。
7543
		#$result["columnOnUpdateAction"][$i],當資料有修改時,該欄位的內容要怎麼因應,$i爲0開始的數字,也可以使用欄位的名稱。
7544
		#$result["columnCharacterSet"][$i],各欄位使用的CharacterSet,$i爲0開始的數字,也可以使用欄位的名稱。
7545
		#$result["columnCollate"][$i],各欄位使用的Collate,$i爲0開始的數字,也可以使用欄位的名稱。
7546
		#$result["key"]["exist"],該資料表是否有索引鍵,"true"代表有;"false"代表沒有。
7547
		#$result["key"][$j],該資料表的索引鍵陣列,$j爲0開始的數字,也可以使用欄位的名稱。
7548
		#$result["keyConstraintName"][$j],該資料表用於識別索引鍵的CONSTRAINT名稱陣列,$j爲0開始的數字,也可以使用欄位的名稱。
7549
		#$result["primaryKey"],該資料表的主鍵
7550
		#$result["foreignKey"]["exist"],該資料表是否有foreign key,"true"代表有;"fasle"代表沒有。
7551
		#$result["foreignKey"]["constraintName"][$k],用來識別外鍵的CONSTRAINT名稱陣列,$k爲0開始的數字,也可以使用欄位的名稱。
7552
		#$result["foreignKey"]["columnName"][$k],外鍵的名稱陣列,$k爲0開始的數字,也可以使用欄位的名稱。
7553
		#$result["foreignKey"]["referencesTable"][$k],外鍵參照的欄位,$k爲0開始的數字
7554
		#$result["foreignKey"]["referencesColumn"][$k],外鍵參照的欄位屬於哪個資料表,$k爲0開始的數字
7555
		#$result["columnOnUpdateAction"][$i],當參照的欄位資料更新時,會怎麼同步,$i爲0開始的數字,"沒有指定"為沒有設定
7556
		#$result["columnOnDeleteAction"][$i],當參照的欄位資料移除時,會怎麼同步,$i爲0開始的數字,"沒有指定"為沒有設定
7557
		#必填參數:
7558
		$conf["db"]["getTableColumnDetailInfo"]["dbAddress"]=$conf["dbAddress"];#資料庫的網路位置
7559
		$conf["db"]["getTableColumnDetailInfo"]["dbAccount"]=$conf["dbAccount"];#連線到資料庫要用的帳號
7560
		$conf["db"]["getTableColumnDetailInfo"]["selectedDataBase"]=$conf["selectedDataBaseName"];#連線到資料庫要選擇的資料庫
7561
		$conf["db"]["getTableColumnDetailInfo"]["selectedDataTable"]=$conf["selectedDataTableName"];#連線到資料庫要檢視的資料表
7562
		#可省略參數:
7563
 
7564
		#如果 $conf["dbPassword"] 有設置
7565
		if(isset($conf["dbPassword"])){
7566
 
7567
			$conf["db"]["getTableColumnDetailInfo"]["dbPassword"]=$conf["dbPassword"];#連線到資料庫要用的密碼
7568
 
7569
			}#if end
7570
 
7571
		#如果有設定 $conf["dbPort"]	
7572
		if(isset($conf["dbPort"])){
7573
 
7574
			#設定 $conf["dbPort"]
7575
			$conf["db"]["getTableColumnDetailInfo"]["dbPort"]=$conf["dbPort"];
7576
 
7577
			}#if end	
7578
 
7579
		$tableDetail=db::getTableColumnDetailInfo($conf["db"]["getTableColumnDetailInfo"]);
7580
		unset($conf["db"]["getTableColumnDetailInfo"]);
7581
 
7582
		#如果取得資料表結構詳細資料失敗
7583
		if($tableDetail["status"]=="false"){
7584
 
7585
			#設置執行失敗的訊息
7586
			$result["status"]="false";
7587
 
7588
			#設置錯誤訊息
7589
			$result["error"]=$tableDetail;
7590
 
7591
			#回傳結果
7592
			return $result;
7593
 
7594
			}#if end
7595
 
7596
		#var_dump($tableDetail["foreignKey"]);
7597
 
7598
		#判斷該欄位是否爲 foreign key
7599
		if(isset($tableDetail["foreignKey"]["columnName"][$conf["removedColumnName"]])){
7600
 
7601
			#代表該欄位等於 foreign key 
7602
 
7603
			#先移除foreign key...
7604
			#函式說明:
7605
			#移除資料表單1欄位的外鍵
7606
			#回傳結果:
7607
			#$result["status"],"true",代表執行成功;"false"代表執行失敗
7608
			#$result["error"],錯誤訊息陣列
7609
			#必填參數:
7610
			$conf["db"]["eraseForeignKey"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
7611
			$conf["db"]["eraseForeignKey"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
7612
			$conf["db"]["eraseForeignKey"]["selectedDataBaseName"]=$conf["selectedDataBaseName"];#爲目標資料表所屬的資料庫
7613
			$conf["db"]["eraseForeignKey"]["selectedDataTableName"]=$conf["selectedDataTableName"];#爲目標資料表所屬的資料庫
7614
			$conf["db"]["eraseForeignKey"]["erasedForeignKeyColumnConstraintName"]=$tableDetail["foreignKey"]["constraintName"][$conf["removedColumnName"]];#要移除外鍵欄位的CONSTRAINT名稱
7615
			#可省略參數: 
7616
 
7617
			#如果 $conf["dbPassword"] 有設置
7618
			if(isset($conf["dbPassword"])){
7619
 
7620
				$conf["db"]["eraseForeignKey"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
7621
 
7622
				}#if end
7623
 
7624
			#如果有設定 $conf["dbPort"]	
7625
			if(isset($conf["dbPort"])){
7626
 
7627
				#設定 $conf["dbPort"]
7628
				$conf["db"]["eraseForeignKey"]["dbPort"]=$conf["dbPort"];
7629
 
7630
				}#if end	
7631
 
7632
			$eraseForeignKeyResult=db::eraseForeignKey($conf["db"]["eraseForeignKey"]);
7633
			unset($conf["db"]["eraseForeignKey"]);
7634
 
7635
			#var_dump($eraseForeignKeyResult);
7636
 
7637
			#如果執行失敗
7638
			if($eraseForeignKeyResult["status"]=="false"){
7639
 
7640
				#var_dump($eraseForeignKeyResult);
7641
 
7642
				#設置錯誤識別
7643
				$result["status"]="fasle";
7644
 
7645
				#設置錯誤提示
7646
				$result["error"]=$eraseForeignKeyResult;
7647
 
7648
				#回傳結果
7649
				return $result;
7650
 
7651
				}#if end
7652
 
7653
			}#if end
7654
 
7655
		#如果要移除欄位是index
7656
		if(isset($tableDetail["key"][$conf["removedColumnName"]])){
7657
 
7658
			#移除索引鍵
7659
			#函式說明:
7660
			#移除資料表單1欄位的索引鍵
7661
			#回傳結果:
7662
			#$result["status"],"true",代表執行成功;"false"代表執行失敗
7663
			#$result["error"],錯誤訊息陣列
7664
			#必填參數:
7665
			$conf["db"]["eraseIndexKey"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
7666
			$conf["db"]["eraseIndexKey"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
7667
			$conf["db"]["eraseIndexKey"]["selectedDataBaseName"]=$conf["selectedDataBaseName"];#爲目標資料表所屬的資料庫
7668
			$conf["db"]["eraseIndexKey"]["selectedDataTableName"]=$conf["selectedDataTableName"];#爲目標資料表所屬的資料庫
7669
			$conf["db"]["eraseIndexKey"]["erasedIndexKeyColumnConstraintName"]=$tableDetail["keyConstraintName"][$conf["removedColumnName"]];#要移除索引鍵欄位的CONSTRAINT名稱
7670
			#可省略參數: 
7671
 
7672
			#如果 $conf["dbPassword"] 有設置
7673
			if(isset($conf["dbPassword"])){
7674
 
7675
				$conf["db"]["eraseIndexKey"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
7676
 
7677
				}#if end
7678
 
7679
			#如果有設定 $conf["dbPort"]	
7680
			if(isset($conf["dbPort"])){
7681
 
7682
				#設定 $conf["dbPort"]
7683
				$conf["db"]["eraseIndexKey"]["dbPort"]=$conf["dbPort"];
7684
 
7685
				}#if end
7686
 
7687
			$eraseIndexKeyResult=db::eraseIndexKey($conf["db"]["eraseIndexKey"]);
7688
			unset($conf["db"]["eraseIndexKey"]);
7689
 
7690
			#如果執行失敗
7691
			if($eraseIndexKeyResult["status"]=="false"){
7692
 
7693
				#var_dump($eraseIndexKeyResult);
7694
 
7695
				#設置錯誤識別
7696
				$result["status"]="fasle";
7697
 
7698
				#設置錯誤提示
7699
				$result["error"]=$eraseIndexKeyResult;
7700
 
7701
				#回傳結果
7702
				return $result;
7703
 
7704
				}#if end
7705
 
7706
			}#if end		
7707
 
7708
		#組合sql語言
7709
		$sql="alter table ".$conf["selectedDataBaseName"].".".$conf["selectedDataTableName"]." drop `".$conf["removedColumnName"]."`;";
7710
 
7711
		#函式說明:
7712
		#執行mysql指令
7713
		#回傳結果::
7714
		#$result["status"],"true"為執行成功;"false"為執行失敗。
7715
		#$result["error"],錯誤訊息的陣列
7716
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
7717
		#查詢號的解果,需要解析。
7718
		#必填參數:
7719
		$conf["db"]["execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
7720
		$conf["db"]["execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
7721
		$conf["db"]["execMysqlQuery"]["dbSql"]=$sql;#要執行sql語法
7722
		#可省略參數: 
7723
 
7724
		#如果有設定連線密碼
7725
		if(isset($conf["dbPassword"])){
7726
 
7727
			#就套用密碼
7728
			$conf["db"]["execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
7729
 
7730
			}#if end
7731
 
7732
		#如果有設定 $conf["dbPort"]	
7733
		if(isset($conf["dbPort"])){
7734
 
7735
			#設定 $conf["dbPort"]
7736
			$conf["db"]["execMysqlQuery"]["dbPort"]=$conf["dbPort"];
7737
 
7738
			}#if end
7739
 
7740
		$queryResult=db::execMysqlQuery($conf["db"]["execMysqlQuery"]);
7741
		unset($conf["db"]["execMysqlQuery"]);
7742
 
7743
		#如果執行失敗
7744
		if($queryResult["status"]=="false"){
7745
 
7746
			#設置執行失敗
7747
			$result["status"]="false";
7748
 
7749
			#取得錯誤訊息
7750
			$result["error"]=$queryResult;
7751
 
7752
			#回傳結果
7753
			return $result;
7754
 
7755
			}#if end
7756
 
7757
		#設置執行成功
7758
		$result["status"]="true";
7759
 
7760
		#回傳結果
7761
		return $result;
7762
 
7763
		}#function dropColumn end
7764
 
7765
	/*
7766
	#函式說明:
7767
	#清空資料表儲存的資料
7768
	#回傳結果::
7769
	#$result["status"],執行成功與否,"true"代表執行成功;"fasle"代表執行失敗
7770
	#$result["error"],錯誤訊息
7771
	#$result["function"],當前執行的涵式.
7772
	#必填參數:
7773
	$conf["dbAddress"]="字串,爲mysql-Server的位置
7774
	$conf["dbAddress"]=$dbAddress;
7775
	$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號
7776
	$conf["dbAccount"]=$dbAccount;
7777
	$conf["dbName"]=$dbName;#爲目標資料表所屬的資料庫
7778
	$conf["dtName"]="";#爲要移除的資料表名稱
7779
	#可省略參數:		
7780
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼.
7781
	#$conf["dbPassword"]=$dbPassword;
7782
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,預設為3306.
7783
	#$conf["dbPort"]="3306";
7784
	#參考資料:
7785
	#https://dev.mysql.com/doc/refman/5.0/en/truncate-table.html
7786
	#備註:
7787
	#無.
7788
	*/
7789
	public static function emptyTable($conf){
7790
 
7791
		#初始化要回傳的內容
7792
		$result=array();
7793
 
7794
		#取得當前執行的函數名稱
7795
		$result["function"]=__FUNCTION__;
7796
 
7797
		#如果 $conf 不為陣列
7798
		if(gettype($conf)!="array"){
7799
 
7800
			#設置執行失敗
7801
			$result["status"]="false";
7802
 
7803
			#設置執行錯誤訊息
7804
			$result["error"][]="\$conf變數須為陣列形態";
7805
 
7806
			#如果傳入的參數為 null
7807
			if($conf==null){
7808
 
7809
				#設置執行錯誤訊息
7810
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
7811
 
7812
				}#if end
7813
 
7814
			#回傳結果
7815
			return $result;
7816
 
7817
			}#if end
7818
 
7819
		#函式說明:
7820
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
7821
		#回傳結果:
7822
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
7823
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
7824
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
7825
		#必填參數:
7826
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
7827
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("dbAddress","dbAccount","dbName","dtName");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
7828
		#可省略參數:
7829
		#$conf["variableType"]=array();#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
7830
		#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
7831
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
7832
		unset($conf["variableCheck"]);
7833
 
7834
		#如果檢查不通過
7835
		if($checkResult["status"]=="false"){
7836
 
7837
			#設置錯誤識別
7838
			$result["status"]="fasle";
7839
 
7840
			#設置錯誤訊息
7841
			$result["error"]=$checkResult;
7842
 
7843
			#回傳結果
7844
			return $result;
7845
 
7846
			}#if end
7847
 
7848
		#如果檢查不通過
7849
		if($checkResult["passed"]=="false"){
7850
 
7851
			#設置錯誤識別
7852
			$result["status"]="fasle";
7853
 
7854
			#設置錯誤訊息
7855
			$result["error"]=$checkResult;
7856
 
7857
			#回傳結果
7858
			return $result;
7859
 
7860
			}#if end
7861
 
7862
		#設定要執行的sql語法
7863
		$sql="TRUNCATE TABLE ".$conf["dbName"].".".$conf["dtName"].";";
7864
 
7865
		#函式說明:
7866
		#執行mysql指令
7867
		#回傳結果::
7868
		#$result["status"],"true"為執行成功;"false"為執行失敗。
7869
		#$result["error"],錯誤訊息的陣列
7870
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
7871
		#$result["queryString"],mysql查詢的語言
7872
		#查詢號的解果,需要解析。
7873
		#必填參數:
7874
		$conf["db.execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
7875
		$conf["db.execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
7876
		$conf["db.execMysqlQuery"]["dbSql"]=$sql;#要執行sql語法
7877
		#可省略參數: 
7878
 
7879
		#如果 $conf["dbPassword"] 有設置
7880
		if(isset($conf["dbPassword"])){
7881
 
7882
			$conf["db.execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
7883
 
7884
			}#if end
7885
 
7886
		#如果有設定 $conf["dbPort"]	
7887
		if(isset($conf["dbPort"])){
7888
 
7889
			#設定 $conf["dbPort"]
7890
			$conf["db.execMysqlQuery"]["dbPort"]=$conf["dbPort"];
7891
 
7892
			}#if end				
7893
 
7894
		$queryResult=db::execMysqlQuery($conf["db.execMysqlQuery"]);
7895
		unset($conf["db.execMysqlQuery"]);
7896
 
7897
		#如果 $queryResult["status"] 為 "false"
7898
		if($queryResult["status"]=="false"){
7899
 
7900
			#函式說明:
7901
			#透過一筆筆將資料表刪除後,重設識別欄位的自動增量欄位起始值為1
7902
			#回傳結果:
7903
			#$result["status"],執行是否正常,"true"代表執行正常,"false"代表執行失敗.
7904
			#$result["error"],錯誤訊息.
7905
			#$result["function"],當前執行的函數名稱.
7906
			#$result["sql"],執行的sql語法陣列.
7907
			#必填參數:
7908
			#$conf["db.eraseDataInTableThenResetAutoIncrement"]["dbAddress"],字串,連線到資料庫的位置.
7909
			$conf["db.eraseDataInTableThenResetAutoIncrement"]["dbAddress"]=$conf["dbAddress"];
7910
			#$conf["db.eraseDataInTableThenResetAutoIncrement"]["dbAccount"],字串,連線到資料庫的帳號.
7911
			$conf["db.eraseDataInTableThenResetAutoIncrement"]["dbAccount"]=$conf["dbAccount"];
7912
			#$conf["db.eraseDataInTableThenResetAutoIncrement"]["dbName"],字串,要連線到哪個資料庫.
7913
			$conf["db.eraseDataInTableThenResetAutoIncrement"]["dbName"]=$conf["dbName"];
7914
			#$conf["db.eraseDataInTableThenResetAutoIncrement"]["dtName"],字串,要重設重設識別欄位的自動增量為0的資料表名稱.
7915
			$conf["db.eraseDataInTableThenResetAutoIncrement"]["dtName"]=$conf["dtName"];
7916
			#可省略參數:
7917
 
7918
			#如果 $conf["dbPassword"] 有設置
7919
			if(isset($conf["dbPassword"])){
7920
 
7921
				#$conf["db.eraseDataInTableThenResetAutoIncrement"]["dbPassword"],字串,連線到資料庫的密碼.
7922
				$conf["db.eraseDataInTableThenResetAutoIncrement"]["dbPassword"]=$conf["dbPassword"];
7923
 
7924
				}#if end
7925
 
7926
			#如果有設定 $conf["dbPort"]	
7927
			if(isset($conf["dbPort"])){
7928
 
7929
				#設定 $conf["dbPort"]
7930
				$conf["db.eraseDataInTableThenResetAutoIncrement"]["dbPort"]=$conf["dbPort"];
7931
 
7932
				}#if end	
7933
 
7934
			#參考資料:
7935
			#http://dev.mysql.com/doc/refman/5.0/en/alter-table.html
7936
			#參考語法:
7937
			#ALTER TABLE dbName.dtName AUTO_INCREMENT = 1;
7938
			$eraseDataInTableThenResetAutoIncrementResult=db::eraseDataInTableThenResetAutoIncrement($conf["db.eraseDataInTableThenResetAutoIncrement"]);
7939
			unset($conf["db.eraseDataInTableThenResetAutoIncrement"]);
7940
 
7941
			#如果 透過一筆筆將資料表刪除後,重設識別欄位的自動增量欄位起始值為1 失敗
7942
			if($eraseDataInTableThenResetAutoIncrementResult["status"]=="false"){
7943
 
7944
				#設置錯誤識別
7945
				$result["status"]="false";
7946
 
7947
				#設置錯誤訊息
7948
				$result["error"]=$eraseDataInTableThenResetAutoIncrementResult;
7949
 
7950
				#回傳結果
7951
				return $result;
7952
 
7953
				}#if end
7954
 
7955
			}#if end	
7956
 
7957
		#值行到這邊代表執行成功
7958
		$result["status"]="true";
7959
 
7960
		#回傳結果
7961
		return $result;
7962
 
7963
		}#function emptyTable end
7964
 
7965
	/*
7966
	#函式說明:
7967
	#更改資料庫的名稱 
7968
	#回傳結果::
7969
	#$result["status"],"true"代表執行成功
7970
	#$result["function"],當前執行的函數名稱.
7971
	#$result["error"],錯誤訊息陣列.
7972
	#必填參數:
7973
	#$conf["editedDatabaseName"],爲要更改的資料庫名稱.
7974
	$conf["editedDatabaseName"]=$editedDbName;
7975
	#$conf["newDatabaseName"],新的資料庫名稱
7976
	$conf["newDatabaseName"]="";
7977
	#$conf["dbAccount"],爲用於連入資料庫server時要使用的帳號
7978
	$conf["dbAccount"]=$dbAccount;
7979
	#$conf["dbAddress"],爲資料庫server的位置
7980
	$conf["dbAddress"]=$dbAddress;
7981
	#$conf["fileArgu"],字串,__FILE__的內容.
7982
	$conf["fileArgu"]=__FILE__;
7983
	#可省略參數:
7984
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼.
7985
	#$conf["dbPassword"]=$dbPassword;
7986
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,預設為3306.
7987
	#$conf["dbPort"]="3306";
7988
	#參考資料:
7989
	#http://stackoverflow.com/questions/1708651/how-can-i-change-case-of-database-name-in-mysql
7990
	#備註:
7991
	#無.
7992
	*/
7993
	public static function editDatabaseName($conf){
7994
 
7995
		#初始化要回傳的內容
7996
		$result=array();
7997
 
7998
		#取得當前執行的函數名稱
7999
		$result["function"]=__FUNCTION__;
8000
 
8001
		#如果 $conf 不為陣列
8002
		if(gettype($conf)!="array"){
8003
 
8004
			#設置執行失敗
8005
			$result["status"]="false";
8006
 
8007
			#設置執行錯誤訊息
8008
			$result["error"][]="\$conf變數須為陣列形態";
8009
 
8010
			#如果傳入的參數為 null
8011
			if($conf==null){
8012
 
8013
				#設置執行錯誤訊息
8014
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
8015
 
8016
				}#if end
8017
 
8018
			#回傳結果
8019
			return $result;
8020
 
8021
			}#if end
8022
 
8023
		#函式說明:
8024
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
8025
		#回傳結果:
8026
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
8027
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
8028
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
8029
		#必填參數:
8030
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
8031
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("fileArgu","editedDatabaseName","newDatabaseName","dbAccount","dbAddress");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
8032
		#可省略參數:
8033
		#$conf["variableType"]=array();#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
8034
		#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
8035
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
8036
		unset($conf["variableCheck"]["isexistMuti"]);
8037
 
8038
		#如果檢查失敗
8039
		if($checkResult["status"]=="false"){
8040
 
8041
			#設置錯誤識別
8042
			$result["status"]="false";
8043
 
8044
			#設置錯誤訊息
8045
			$result["error"]=$checkResult;
8046
 
8047
			#回傳錯誤訊息
8048
			return $result;
8049
 
8050
			}#if end
8051
 
8052
		#如果檢查不通過
8053
		if($checkResult["passed"]=="false"){
8054
 
8055
			#設置錯誤識別
8056
			$result["status"]="false";
8057
 
8058
			#設置錯誤訊息
8059
			$result["error"]=$checkResult;
8060
 
8061
			#回傳錯誤訊息
8062
			return $result;
8063
 
8064
			}#if end
8065
 
8066
		#檢查要修改名稱的資料庫是否爲系統資料庫
8067
		#函式說明:
8068
		#檢查一個數值是否與陣列裏面的元素相同
8069
		#回傳結果::
8070
		#$result["status"],"true"表示執行正確,"false"表示執行錯誤.
8071
		#$result["founded"],"true"表示有找到相同的,"false"表示沒有找到相同的.
8072
		#$result["error"],錯誤訊息
8073
		#$result["function"],當前執行的函數名稱
8074
		#$result["equalVarName"],相等的變數名稱或key.
8075
		#$result["equalVarValue"],相等的變數數值內容.
8076
		#必填參數:
8077
		$conf["search"]["getEqualVar"]["conditionElement"]=$conf["editedDatabaseName"];#條件元素,要等於的元素內容。
8078
		$conf["search"]["getEqualVar"]["compareElements"]=array("information_schema","mysql","performance_schema");#要比對的陣列變數內容。
8079
		$searchResult=search::getEqualVar($conf["search"]["getEqualVar"]);
8080
		unset($conf["search"]["getEqualVar"]);
8081
 
8082
		#如果檢查失敗
8083
		if($searchResult["status"]=="false"){
8084
 
8085
			#設置錯誤識別
8086
			$result["status"]="false";
8087
 
8088
			#設置錯誤訊息
8089
			$result["error"]=$searchResult;
8090
 
8091
			#回傳結果
8092
			return $result;
8093
 
8094
			}#if end
8095
 
8096
		#如果要移除的資料庫爲系統資料庫
8097
		if($searchResult["founded"]=="true"){
8098
 
8099
			#設置錯誤識別
8100
			$result["status"]="false";
8101
 
8102
			#設置錯誤訊息
8103
			$result["error"][]="您不能更改系統資料庫";
8104
 
8105
			#回傳結果
8106
			return $result;
8107
 
8108
			}#if end
8109
 
8110
		#如果 $conf["dbPassword"] 不存在
8111
		if(!isset($conf["dbPassword"])){
8112
 
8113
			#設爲空值
8114
			$conf["dbPassword"]="";
8115
 
8116
			}#if end
8117
 
8118
		#反之有設定
8119
		else{
8120
 
8121
			#設定連線用的密碼
8122
			$formatedPassword="--password=".$conf["dbPassword"];
8123
 
8124
			}#else end
8125
 
8126
		#檢查新名字的資料庫是否存在
8127
		#函式說明:
8128
		#檢查該資料庫是否存在,結果會回傳一個陣列。
8129
		#回傳結果:
8130
		#$result["status"],執行正常則回傳"true",執行失敗則回傳"false".
8131
		#$result["error"],錯誤訊息
8132
		#$result["exist"],有為"true",無為"false".
8133
		#必填的參數
8134
		$conf["db"]["checkDataBaseExists"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
8135
		$conf["db"]["checkDataBaseExists"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
8136
		$conf["db"]["checkDataBaseExists"]["checkDataBaseName"]=$conf["newDatabaseName"];#爲要檢查是否存在的資料庫名稱
8137
		#可省略參數
8138
 
8139
		#如果 $conf["dbPassword"] 存在
8140
		if(isset($conf["dbPassword"])){
8141
 
8142
			#設置密碼
8143
			$conf["db"]["checkDataBaseExists"]["dbPassword"]=$conf["dbPassword"];
8144
 
8145
			}#if end
8146
 
8147
		#如果 $conf["dbPort"] 存在
8148
		if(isset($conf["dbPort"])){
8149
 
8150
			#設置密碼
8151
			$conf["db"]["checkDataBaseExists"]["dbPort"]=$conf["dbPort"];
8152
 
8153
			}#if end		
8154
 
8155
		$checkResult=db::checkDataBaseExists($conf["db"]["checkDataBaseExists"]);
8156
		unset($conf["db"]["checkDataBaseExists"]);
8157
 
8158
		#如果 $checkResult["status"] 等於 "false"
8159
		if($checkResult["status"]==="false"){
8160
 
8161
			#設置錯誤識別
8162
			$result["status"]="false";
8163
 
8164
			#設置錯誤訊息
8165
			$result["error"]=$checkResult;
8166
 
8167
			#回傳結果
8168
			return $result;
8169
 
8170
			}#if end
8171
 
8172
		#如果跟現有的資料庫名稱一樣
8173
		if($checkResult["exist"]==="true"){
8174
 
8175
			#設置錯誤訊息
8176
			$result["error"]=$checkResult;
8177
 
8178
			#設置錯誤識別
8179
			$result["status"]="false";
8180
 
8181
			#回傳結果
8182
			return $result;
8183
 
8184
			}#if end
8185
 
8186
		#如果沒有跟現有的資料庫名稱一樣	
8187
		if($checkResult["exist"]==="false"){
8188
 
8189
			#建立新的資料庫
8190
			#函式說明:
8191
			#建立資料庫,會回傳一個陣列。
8192
			#回傳結果:
8193
			#$result["status"],若成功則爲"true",失敗則爲"false".
8194
			#$result["error"],錯誤訊息 
8195
			#必填參數:
8196
			$conf["db"]["createDatabase"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
8197
			$conf["db"]["createDatabase"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
8198
			$conf["db"]["createDatabase"]["newDatabaseName"]=$conf["newDatabaseName"];#爲要新增的資料庫名稱
8199
			#可省略參數:
8200
 
8201
			#如果 $conf["dbPassword"] 存在
8202
			if(isset($conf["dbPassword"])){
8203
 
8204
				#設置密碼
8205
				$conf["db"]["createDatabase"]["dbPassword"]=$conf["dbPassword"];
8206
 
8207
				}#if end
8208
 
8209
			#如果 $conf["dbPort"] 存在
8210
			if(isset($conf["dbPort"])){
8211
 
8212
				#設置密碼
8213
				$conf["db"]["createDatabase"]["dbPort"]=$conf["dbPort"];
8214
 
8215
				}#if end	
8216
 
8217
			$createNewDbResult=db::createDatabase($conf["db"]["createDatabase"]);
8218
			unset($conf["db"]["createDatabase"]);
8219
 
8220
			#如果新資料庫建立失敗
8221
			if($createNewDbResult["status"]=="false"){
8222
 
8223
				#設置錯誤識別
8224
				$result["status"]="false";
8225
 
8226
				#設置錯誤訊息
8227
				$result["error"]=$createNewDbResult;
8228
 
8229
				#回傳結果
8230
				return $result;
8231
 
8232
				}#if end
8233
 
8234
			#將舊的資料庫內容完整複製到新的資料庫
8235
			#函式說明:
8236
			#呼叫shell執行系統命令,並取得回傳的內容.
8237
			#回傳結果:
8238
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
8239
			#$result["error"],錯誤訊息陣列.
8240
			#$result["function"],當前執行的函數名稱.
8241
			#$result["argu"],使用的參數.
8242
			#$result["cmd"],執行的指令內容.
8243
			#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
8244
			#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
8245
			#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
8246
			#$result["running"],是否還在執行.
8247
			#$result["pid"],pid.
8248
			#$result["statusCode"],執行結束後的代碼.
8249
			#$result["escape"],陣列,儲存出新排序過且已經escape過的指令(key為"cmd")與參數(key為"argu").
8250
			#必填參數:
8251
			#$conf["command"],字串,要執行的指令.
8252
			$conf["external::callShell"]["command"]="mysqldump";
8253
			#$conf["fileArgu"],字串,變數__FILE__的內容.
8254
			$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];
8255
			#可省略參數:
8256
			#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
8257
			$conf["external::callShell"]["argu"]=array("-u".$conf["dbAccount"],$formatedPassword,$conf["editedDatabaseName"],"|","mysql","-u".$conf["dbAccount"],$formatedPassword,$conf["newDatabaseName"]);
8258
			#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
8259
			#$conf["arguIsAddr"]=array();
8260
			#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
8261
			#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
8262
			#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
8263
			#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
8264
			#$conf["enablePrintDescription"]="true";
8265
			#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
8266
			#$conf["printDescription"]="";
8267
			#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".如果參數為"< 、<< 、> 、>> 、| 、2>&1"之一則不會過濾.
8268
			#$conf["escapeshellarg"]="false";
8269
			#$conf["thereIsShellVar"],陣列字串,指令搭配的參數"argu",若含有「\'」,則取代為「"」.每個argu參數都要有對應的元素."true"代表要置換.
8270
			#$conf["thereIsShellVar"]=array();
8271
			#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
8272
			#$conf["username"]="";
8273
			#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
8274
			#$conf["password"]="";
8275
			#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
8276
			#$conf["useScript"]="";
8277
			#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
8278
			#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
8279
			#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
8280
			#$conf["inBackGround"]="";
8281
			#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
8282
			#$conf["getErr"]="false";
8283
			#$conf["doNotRun"],字串,"true"代表不執行指令,預設為"false"會執行指令.
8284
			#$conf["doNotRun"]="false";
8285
			#參考資料:
8286
			#exec=>http://php.net/manual/en/function.exec.php
8287
			#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
8288
			#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
8289
			#備註:
8290
			#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
8291
			#若使用的 command、argu 參數,含有 ~ 則會被視為字串,若有需要其於 shell 中代表的家目錄位置,可用 fileAccess::tildeToPath 來進行轉換.
8292
			$callShell=external::callShell($conf["external::callShell"]);
8293
			unset($conf["external::callShell"]);
8294
 
8295
			#若執行shell失敗
8296
			if($callShell["status"]=="false"){
8297
 
8298
				#設置錯誤識別
8299
				$result["status"]="false";
8300
 
8301
				#設置錯誤訊息
8302
				$result["error"]=$callShell;
8303
 
8304
				#回傳結果
8305
				return $result;					
8306
 
8307
				}#if end
8308
 
8309
			#將舊的資料庫丟棄
8310
			#函式說明:
8311
			#移除資料庫,會回傳一個陣列。
8312
			#回傳結果:
8313
			#$result["status"],若成功則爲0,失敗則爲1。
8314
			#$result["error"],錯誤訊息
8315
			#必填參數:
8316
			$conf["db"]["dropDatabase"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
8317
			$conf["db"]["dropDatabase"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
8318
			$conf["db"]["dropDatabase"]["dropedDatabaseName"]=$conf["editedDatabaseName"];#爲要移除的資料庫名稱
8319
			#可省略參數:		
8320
 
8321
			#如果 $conf["dbPassword"] 存在
8322
			if(isset($conf["dbPassword"])){
8323
 
8324
				#設置密碼
8325
				$conf["db"]["dropDatabase"]["dbPassword"]=$conf["dbPassword"];
8326
 
8327
				}#if end
8328
 
8329
			#如果 $conf["dbPort"] 存在
8330
			if(isset($conf["dbPort"])){
8331
 
8332
				#設置密碼
8333
				$conf["db"]["dropDatabase"]["dbPort"]=$conf["dbPort"];
8334
 
8335
				}#if end	
8336
 
8337
			$dropDbResult=db::dropDatabase($conf["db"]["dropDatabase"]);
8338
			unset($conf["db"]["dropDatabase"]);
8339
 
8340
			#如果舊資料庫丟棄失敗
8341
			if($dropDbResult["status"]=="false"){
8342
 
8343
				#設置錯誤識別
8344
				$result["status"]="false";
8345
 
8346
				#設置錯誤訊息
8347
				$result["error"][]="舊名稱資料庫丟棄失敗";
8348
 
8349
				#回傳結果
8350
				return $result;
8351
 
8352
				}#if end				
8353
 
8354
			}#if end
8355
 
8356
		#執行到這邊代表執行正確
8357
		$result["status"]="true";
8358
 
8359
		#回傳結果
8360
		return $result;
8361
 
8362
		}#function editDatabaseName
8363
 
8364
	/*
8365
	#函式說明:
8366
	#更改資料表的名稱. 
8367
	#回傳結果:
8368
	#$result["status"],"true"代表執行成功;若失敗會回傳錯誤訊息.
8369
	#$resuly["function"],當前執行的函數名稱.
8370
	#$result["error"],錯誤訊息.
8371
	#$result["sql"],執行的sql字串.
8372
	#必填參數:
8373
	#$conf["editedDataBaseName"],爲要更改的資料表所屬的資料庫名稱.
8374
	$conf["editedDataBaseName"]="";
8375
	#$conf["editedDataTableName"],爲要更改的資料表原始名稱.
8376
	$conf["editedDataTableName"]="";
8377
	#$conf["newDataTableName"],新的資料庫名稱.
8378
	$conf["newDataTableName"]="";
8379
	#$conf["dbAccount"],爲用於連入資料庫server時要使用的帳號.
8380
	$conf["dbAccount"]=$dbAccount;
8381
	#conf["dbAddress"],爲資料庫server的位置.
8382
	$conf["dbAddress"]=$dbAddress;
8383
	#可省略參數:
8384
	#$conf["dbPassword"],爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
8385
	#$conf["dbPassword"]=$dbPassword;
8386
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,預設為3306.
8387
	#$conf["dbPort"]="3306";
8388
	#參考資料:
8389
	#無.
8390
	#備註:
8391
	#無.
8392
	*/
8393
	public static function editDataTableName($conf){
8394
 
8395
		#初始化要回傳的內容
8396
		$result=array();
8397
 
8398
		#取得當前執行的函數名稱
8399
		$result["function"]=__FUNCTION__;
8400
 
8401
		#如果 $conf 不為陣列
8402
		if(gettype($conf)!="array"){
8403
 
8404
			#設置執行失敗
8405
			$result["status"]="false";
8406
 
8407
			#設置執行錯誤訊息
8408
			$result["error"][]="\$conf變數須為陣列形態";
8409
 
8410
			#如果傳入的參數為 null
8411
			if($conf==null){
8412
 
8413
				#設置執行錯誤訊息
8414
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
8415
 
8416
				}#if end
8417
 
8418
			#回傳結果
8419
			return $result;
8420
 
8421
			}#if end
8422
 
8423
		#函式說明:
8424
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
8425
		#回傳結果:
8426
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
8427
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
8428
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
8429
		#必填參數:
8430
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
8431
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("editedDataBaseName","editedDataTableName","newDataTableName","dbAccount","dbAddress");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
8432
		#可省略參數:
8433
		$conf["variableType"]=array("string","string","string","string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
8434
		#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
8435
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
8436
		unset($conf["variableCheck"]["isexistMuti"]);
8437
 
8438
		#如果 $checkResult["passed"]等於"false".
8439
		if($checkResult["passed"]=="false"){
8440
 
8441
			#代表參數有錯
8442
 
8443
			#設置錯誤識別
8444
			$result["status"]="false";
8445
 
8446
			#設置錯誤訊息
8447
			$result["error"]=$checkResult;
8448
 
8449
			#回傳結果
8450
			return $result;
8451
 
8452
			}#if end
8453
 
8454
		#設定要執行的sql語法
8455
		$sql="rename table ".$conf["editedDataBaseName"].".".$conf["editedDataTableName"]." to ".$conf["editedDataBaseName"].".".$conf["newDataTableName"].";";
8456
 
8457
		#函式說明:
8458
		#執行mysql指令
8459
		#回傳結果::
8460
		#$result["status"],"true"為執行成功;"false"為執行失敗。
8461
		#$result["error"],錯誤訊息的陣列
8462
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
8463
		#$result["queryString"],mysql查詢的語言
8464
		#查詢號的解果,需要解析。
8465
		#必填參數:
8466
		$conf["db"]["execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
8467
		$conf["db"]["execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
8468
		$conf["db"]["execMysqlQuery"]["dbSql"]=$sql;#要執行sql語法
8469
		#可省略參數: 
8470
 
8471
		#如果 $conf["dbPassword"] 有設定
8472
		if(isset($conf["dbPassword"])){
8473
 
8474
			$conf["db"]["execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
8475
 
8476
			}#if end
8477
 
8478
		#如果 $conf["dbPort"] 有設定
8479
		if(isset($conf["dbPort"])){
8480
 
8481
			$conf["db"]["execMysqlQuery"]["dbPort"]=$conf["dbPort"];#爲連線到mysql-Server時要使用的port.
8482
 
8483
			}#if end			
8484
 
8485
		$db["execMysqlQuery"]=db::execMysqlQuery($conf["db"]["execMysqlQuery"]);
8486
		unset($conf["db"]["execMysqlQuery"]);
8487
 
8488
		#如果 $db["execMysqlQuery"]["status"] 等於 "false".
8489
		if($db["execMysqlQuery"]["status"]=="false"){
8490
 
8491
			#設置執行錯誤的識別
8492
			$result["status"]="false";
8493
 
8494
			#設置錯誤訊息
8495
			$result["error"]=$db["execMysqlQuery"]["error"];
8496
 
8497
			#回傳結果
8498
			return $result;
8499
 
8500
			}#if end
8501
 
8502
		#取得執行的sql語法
8503
		$result["sql"]=$db["execMysqlQuery"]["queryString"];
8504
 
8505
		#執行到這邊代表執行成功
8506
		$result["status"]="true";
8507
 
8508
		#回傳結果
8509
		return $result;
8510
 
8511
		}#function editDataTableName end
8512
 
8513
	/*
8514
	#函式說明:
8515
	#移除資料庫,會回傳一個陣列。
8516
	#回傳結果:
8517
	#$result["status"],若成功則爲"true",失敗則爲,"false"
8518
	#$result["error"],錯誤訊息.
8519
	#$result["function"],當前執行的函數名稱.
8520
	#必填參數:
8521
	$conf["dbAddress"]=$dbAddress;#爲mysql-Server的位置
8522
	$conf["dbAccount"]=$dbAccount;#爲用於連入mysql-Server時要使用的帳號
8523
	$conf["dropedDatabaseName"]=$dbName;#爲要移除的資料庫名稱
8524
	#可省略參數:		
8525
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼.
8526
	#$conf["dbPassword"]=$dbPassword;
8527
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,預設為3306.
8528
	#$conf["dbPort"]="3306";
8529
	#參考資料:
8530
	#無.
8531
	#備註:
8532
	#無.
8533
	*/
8534
	public static function dropDatabase($conf){
8535
 
8536
		#初始化要回傳的內容
8537
		$result=array();
8538
 
8539
		#取得當前執行的函數名稱
8540
		$result["function"]=__FUNCTION__;
8541
 
8542
		#如果 $conf 不為陣列
8543
		if(gettype($conf)!="array"){
8544
 
8545
			#設置執行失敗
8546
			$result["status"]="false";
8547
 
8548
			#設置執行錯誤訊息
8549
			$result["error"][]="\$conf變數須為陣列形態";
8550
 
8551
			#如果傳入的參數為 null
8552
			if($conf==null){
8553
 
8554
				#設置執行錯誤訊息
8555
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
8556
 
8557
				}#if end
8558
 
8559
			#回傳結果
8560
			return $result;
8561
 
8562
			}#if end
8563
 
8564
		#函式說明:
8565
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
8566
		#回傳結果:
8567
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
8568
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
8569
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
8570
		#必填參數:
8571
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
8572
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("dbAddress","dbAccount","dropedDatabaseName");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
8573
		#可省略參數:
8574
		$conf["variableCheck"]["isexistMuti"]["variableType"]=array("string","string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
8575
		#$conf["variableCheck"]["isexistMuti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
8576
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
8577
		unset($conf["variableCheck"]["isexistMuti"]);
8578
 
8579
		#如果 $checkResult["passed"] 等於 "fasle"
8580
		if($checkResult["passed"]=="false"){
8581
 
8582
			#設置錯誤識別
8583
			$result["status"]="false";
8584
 
8585
			#設置錯誤訊息
8586
			$result["error"]=$checkResult;
8587
 
8588
			#回傳結果
8589
			return $result;
8590
 
8591
			}#if end
8592
 
8593
		#檢查要移除的資料庫爲系統資料庫
8594
		#函式說明:
8595
		#檢查一個數值是否與陣列裏面的元素相同
8596
		#回傳結果::
8597
		#$result["status"],"true"表示有找到相同的,"false"表示沒有找到相同的。
8598
		#$result["equalVarName"],相等的變數內容。
8599
		#$result["equalVarPosition"],相同的元素內容其位置爲該陣列元素的第幾個位置。
8600
		#必填參數:
8601
		$conf["search"]["getEqualVar"]["conditionElement"]=$conf["dropedDatabaseName"];#條件元素,要等於的元素內容。
8602
		$conf["search"]["getEqualVar"]["compareElements"]=array("information_schema","mysql","performance_schema");#要比對的陣列變數內容。
8603
		$searchResult=search::getEqualVar($conf["search"]["getEqualVar"]);
8604
		unset($conf["search"]["getEqualVar"]);
8605
 
8606
		#如果檢查失敗
8607
		if($searchResult["status"]=="false"){
8608
 
8609
			#設置失敗代碼
8610
			$result["status"]="false";
8611
 
8612
			#設置錯誤訊息
8613
			$result["error"]=$searchResult;
8614
 
8615
			#回傳結果
8616
			return $result;
8617
 
8618
			}#if end
8619
 
8620
		#如果要移除的資料庫爲系統資料庫
8621
		if($searchResult["founded"]=="true"){
8622
 
8623
			#設置失敗代碼
8624
			$result["status"]="false";
8625
 
8626
			#設置錯誤訊息
8627
			$result["error"]="您不能丟棄系統資料庫";
8628
 
8629
			#回傳結果
8630
			return $result;
8631
 
8632
			}#if end
8633
 
8634
		#丟棄資料庫的sql語法
8635
		$sql="DROP DATABASE ".$conf["dropedDatabaseName"];
8636
 
8637
		#執行sql語法
8638
		#函式說明:
8639
		#執行mysql指令
8640
		#回傳結果::
8641
		#$result["status"],"true"為執行成功;"false"為執行失敗。
8642
		#$result["error"],錯誤訊息的陣列
8643
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
8644
		#$result["queryString"],mysql查詢的語言
8645
		#查詢號的解果,需要解析。
8646
		#必填參數:
8647
		$conf["db"]["execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
8648
		$conf["db"]["execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
8649
		$conf["db"]["execMysqlQuery"]["dbSql"]=$sql;#要執行sql語法
8650
		#可省略參數: 
8651
 
8652
		#如果 $conf["dbPassword"] 有設定
8653
		if(isset($conf["dbPassword"])){
8654
 
8655
			$conf["db"]["execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
8656
 
8657
			}#if end
8658
 
8659
 
8660
		#如果 $conf["dbPort"] 有設定
8661
		if(isset($conf["dbPort"])){
8662
 
8663
			$conf["db"]["execMysqlQuery"]["dbPort"]=$conf["dbPort"];#爲連線到mysql-Server時要使用的port,可省略,若省略則代表不使用密碼
8664
 
8665
			}#if end
8666
 
8667
		$db["execMysqlQuery"]=db::execMysqlQuery($conf["db"]["execMysqlQuery"]);
8668
		unset($conf["db"]["execMysqlQuery"]);
8669
 
8670
		#如果 $db["execMysqlQuery"]["status"] 等於 "false"
8671
		if($db["execMysqlQuery"]["status"]=="false"){
8672
 
8673
			#設置錯誤識別
8674
			$result["status"]="false";
8675
 
8676
			#設置錯誤訊息
8677
			$result["error"]=$db["execMysqlQuery"];
8678
 
8679
			#回傳結果
8680
			return $result;
8681
 
8682
			}#if end
8683
 
8684
		#執行到這邊代表執行正常
8685
		$result["status"]="true";
8686
 
8687
		#回傳結果
8688
		return $result;
8689
 
8690
		}#function dropDatabase end
8691
 
8692
	/*
8693
	#函式說明:
8694
	#備份資料庫
8695
	#回傳結果::
8696
	#$result["status"],"true"代表執行正常,"false"代表執行有誤.
8697
	#$result["error"],錯誤訊息陣列.
8698
	#$result["sqlAddress"],sql檔案的位置.
8699
	#$result["function"],當前執行的函數名稱
8700
	#必填參數:
8701
	#$conf["backedDatabaseName"],字串.
8702
	$conf["backedDatabaseName"]=$dbName;#爲要備份的資料庫名稱.
8703
	#$conf["dbAddress"],字串,資料庫的位置.
8704
	$conf["dbAddress"]=$dbAddress;
8705
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號.
8706
	$conf["dbAccount"]=$dbAccount;
8707
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
8708
	$conf["fileArgu"]=__FILE__;
8709
	#可省略參數:
8710
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
8711
	#$conf["dbPassword"]=$dbPassword;
8712
	#$conf["storePlace"],字串,要將輸出檔案儲存到哪邊,預設爲當前目錄.
8713
	#$conf["storePlace"]="";
8714
	#$conf["exportFileName"],字串,要輸出的檔案名稱,預設爲其export
8715
	#$conf["exportFileName"]="export";
8716
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,預設不使用.
8717
	#$conf["dbPort"]="3306";
8718
	#參考資料:
8719
	#無.
8720
	#備註:
8721
	#無.
8722
	*/
8723
	public static function backupDatabase($conf){
8724
 
8725
		#原始語法
8726
		# mysqldump --column-statistics=0 -u account --password=Password -Pport --default-character-set=utf8 --events --routines --single-transaction --skip-lock-tables --quick databaseName > "all.sql"
8727
 
8728
		#初始化要回傳的變數
8729
		$result=array();
8730
 
8731
		#紀錄當前執行的函數名稱
8732
		$result["function"]=__FUNCTION__;
8733
 
8734
		#如果 $conf 不為陣列
8735
		if(gettype($conf)!="array"){
8736
 
8737
			#設置執行失敗
8738
			$result["status"]="false";
8739
 
8740
			#設置執行錯誤訊息
8741
			$result["error"][]="\$conf變數須為陣列形態";
8742
 
8743
			#如果傳入的參數為 null
8744
			if($conf==null){
8745
 
8746
				#設置執行錯誤訊息
8747
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
8748
 
8749
				}#if end
8750
 
8751
			#回傳結果
8752
			return $result;
8753
 
8754
			}#if end
8755
 
8756
		#函式說明:
8757
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
8758
		#回傳結果:
8759
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
8760
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
8761
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
8762
		#必填參數:
8763
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
8764
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("fileArgu","backedDatabaseName","dbAccount","dbAddress");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
8765
		#可省略參數:
8766
		$conf["variableCheck"]["isexistMuti"]["variableType"]=array("string","string","string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
8767
		#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
8768
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
8769
		unset($conf["variableCheck"]["isexistMuti"]);
8770
 
8771
		#如果檢查失敗
8772
		if($checkResult["status"]=="false"){
8773
 
8774
			#設置錯誤識別
8775
			$result["status"]="false";
8776
 
8777
			#設置錯誤訊息
8778
			$result["error"]=$checkResult;
8779
 
8780
			#回傳錯誤訊息
8781
			return $result;
8782
 
8783
			}#if end
8784
 
8785
		#如果檢查不通過
8786
		if($checkResult["passed"]=="false"){
8787
 
8788
			#設置錯誤識別
8789
			$result["status"]="false";
8790
 
8791
			#設置錯誤訊息
8792
			$result["error"]=$checkResult;
8793
 
8794
			#回傳錯誤訊息
8795
			return $result;
8796
 
8797
			}#if end
8798
 
8799
		#檢查要備份的資料庫是否爲系統資料庫
8800
		#函式說明:
8801
		#檢查一個數值是否與陣列裏面的元素相同
8802
		#回傳結果::
8803
		#$result["status"],"true"表示有找到相同的,"false"表示沒有找到相同的。
8804
		#$result["error"],錯誤訊息
8805
		#$result["equalVarName"],相等的變數內容。
8806
		#$result["equalVarPosition"],相同的元素內容其位置爲該陣列元素的第幾個位置。
8807
		#必填參數:
8808
		$conf["search"]["getEqualVar"]["conditionElement"]=$conf["backedDatabaseName"];#條件元素,要等於的元素內容。
8809
		$conf["search"]["getEqualVar"]["compareElements"]=array("information_schema","mysql","performance_schema");#要比對的陣列變數內容。
8810
		$searchResult=search::getEqualVar($conf["search"]["getEqualVar"]);
8811
		unset($conf["search"]["getEqualVar"]);
8812
 
8813
		#如果檢查失敗
8814
		if($searchResult["status"]=="false"){
8815
 
8816
			#設置錯誤識別
8817
			$result["status"]="false";
8818
 
8819
			#設置錯誤訊息
8820
			$result["error"]=$searchResult;
8821
 
8822
			#回傳結果
8823
			return $result;
8824
 
8825
			}#if end
8826
 
8827
		#如果要備份的資料庫爲系統資料庫
8828
		if($searchResult["founded"]=="true"){
8829
 
8830
			#設置錯誤識別
8831
			$result["status"]="false";
8832
 
8833
			#設置錯誤訊息
8834
			$result["error"]="您不能備份系統資料庫";
8835
 
8836
			#回傳結果
8837
			return $result;
8838
 
8839
			}#if end
8840
 
8841
		#初始化連線的密碼
8842
		$dbPassword="";
8843
 
8844
		#如果 $conf["dbPassword"] 有設置
8845
		if(isset($conf["dbPassword"])){
8846
 
8847
			#令存密碼
8848
			$dbPassword=$conf["dbPassword"];
8849
 
8850
			#設置其連線密碼
8851
			$conf["dbPassword"]="-p".$conf["dbPassword"];
8852
 
8853
			}#if end
8854
 
8855
		#反之
8856
		else{
8857
 
8858
			#設爲空值
8859
			$conf["dbPassword"]="";
8860
 
8861
			}#else end
8862
 
8863
		#如果 $conf["storePlace"] 沒有設置
8864
		if(!isset($conf["storePlace"])){
8865
 
8866
			#將其設爲空值
8867
			$conf["storePlace"]="";
8868
 
8869
			}#if end
8870
 
8871
		#反之有設定且結尾不為 "/"
8872
		else if($conf["storePlace"][strlen($conf["storePlace"])-1]!=="/"){
8873
 
8874
			#在其路徑後方加上 /
8875
			$conf["storePlace"]=$conf["storePlace"]."/";
8876
 
8877
			}#if end
8878
 
8879
		#如果 $conf["exportFileName"] 沒有設置
8880
		if(!isset($conf["exportFileName"])){
8881
 
8882
			#設置預設名稱
8883
			$conf["exportFileName"]="export.sql";
8884
 
8885
			}#if end
8886
 
8887
		#反之有設定
8888
		else{
8889
 
8890
			#名稱結尾加上 .sql
8891
			$conf["exportFileName"]=$conf["exportFileName"].".sql";
8892
 
8893
			}#else end
8894
 
8895
		#檢查資料庫是否存在
8896
		#函式說明:
8897
		#檢查該資料庫是否存在,結果會回傳一個陣列。
8898
		#回傳結果:
8899
		#$result["status"],設置執行錯誤.
8900
		#$result["error"],錯誤訊息.
8901
		#$result["exist"],有為"true",無為"false".
8902
		#$result["function"],當前執行的函數名稱.
8903
		#必填的參數
8904
		$conf["db::checkDataBaseExists"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
8905
		$conf["db::checkDataBaseExists"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
8906
		$conf["db::checkDataBaseExists"]["checkDataBaseName"]=$conf["backedDatabaseName"];#爲要檢查是否存在的資料庫名稱
8907
		#可省略參數
8908
 
8909
		#如果密碼不為""
8910
		if($dbPassword!=""){
8911
 
8912
			$conf["db::checkDataBaseExists"]["dbPassword"]=$dbPassword;#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
8913
 
8914
			}#if end
8915
 
8916
		#如果有設置 $conf["dnPort"]
8917
		if(isset($conf["dbPort"])){
8918
 
8919
			$conf["db::checkDataBaseExists"]["dbPort"]=$conf["dbPort"];
8920
 
8921
			}#if end
8922
 
8923
		$checkDataBaseExists=db::checkDataBaseExists($conf["db::checkDataBaseExists"]);
8924
		unset($conf["db::checkDataBaseExists"]);
8925
 
8926
		#如果檢查資料庫是否存在失敗
8927
		if($checkDataBaseExists["status"]=="false"){
8928
 
8929
			#設置錯誤識別
8930
			$result["status"]="false";
8931
 
8932
			#設置錯誤訊息
8933
			$result["error"]=$checkDataBaseExists;
8934
 
8935
			#回傳結果
8936
			return $result;
8937
 
8938
			}#if end
8939
 
8940
		#如果資料庫不存在
8941
		if($checkDataBaseExists["exist"]=="false"){
8942
 
8943
			#設置錯誤識別
8944
			$result["status"]="false";
8945
 
8946
			#設置錯誤訊息
8947
			$result["error"]=$checkDataBaseExists;
8948
 
8949
			#回傳結果
8950
			return $result;
8951
 
8952
			}#if end
8953
 
8954
		#若有設置port
8955
		if(isset($conf["dbPort"])){
8956
 
8957
			#指定port
8958
			$port="-P".$conf["dbPort"];
8959
 
8960
			}#if end
8961
 
8962
		#反之
8963
		else{
8964
			#設置為空
8965
			$port="";
8966
 
8967
			}#else end
8968
 
8969
		#透過以下指令判斷是否支援 --column-statistics 參數
8970
		#mysqldump --help | grep "\--column-statistics" | wc -l
8971
		#函式說明:
8972
		#呼叫shell執行系統命令,並取得回傳的內容.
8973
		#回傳結果:
8974
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
8975
		#$result["error"],錯誤訊息陣列.
8976
		#$result["function"],當前執行的函數名稱.
8977
		#$result["argu"],使用的參數.
8978
		#$result["cmd"],執行的指令內容.
8979
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
8980
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
8981
		#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
8982
		#$result["running"],是否還在執行.
8983
		#$result["pid"],pid.
8984
		#$result["statusCode"],執行結束後的代碼.
8985
		#必填參數:
8986
		#$conf["command"],字串,要執行的指令與.
8987
		$conf["external::callShell"]["command"]="mysqldump";
8988
		#$conf["fileArgu"],字串,變數__FILE__的內容.
8989
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];
8990
		#可省略參數:
8991
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
8992
		$conf["external::callShell"]["argu"]=array("--help","|","grep","\--column-statistics","|","wc","-l");
8993
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
8994
		#$conf["arguIsAddr"]=array();
8995
		#$conf["plainArgu"],字串陣列,哪幾個參數不要加上"".
8996
		#$conf["external::callShell"]["plainArgu"]=array("true","true","true","false","true","true","true");
8997
		#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
8998
		#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
8999
		#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
9000
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
9001
		#$conf["enablePrintDescription"]="true";
9002
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
9003
		#$conf["printDescription"]="";
9004
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".
9005
		$conf["external::callShell"]["escapeshellarg"]="true";
9006
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
9007
		#$conf["username"]="";
9008
		#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
9009
		#$conf["password"]="";
9010
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
9011
		#$conf["useScript"]="";
9012
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
9013
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
9014
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
9015
		#$conf["inBackGround"]="";
9016
		#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
9017
		#$conf["getErr"]="false";
9018
		#備註:
9019
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
9020
		#參考資料:
9021
		#exec=>http://php.net/manual/en/function.exec.php
9022
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
9023
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
9024
		$callShell=external::callShell($conf["external::callShell"]);
9025
		unset($conf["external::callShell"]);
9026
 
9027
		#如果執行shell失敗
9028
		if($callShell["status"]==="false"){
9029
 
9030
			#設置錯誤識別
9031
			$result["status"]="false";
9032
 
9033
			#設置錯誤訊息
9034
			$result["error"]=$callShell;
9035
 
9036
			#回傳結果
9037
			return $result;
9038
 
9039
			}#if end
9040
 
9041
		#初始化參數
9042
		$conf["external::callShell"]["argu"]=array();
9043
 
9044
		#如果支援 --column-statistics 參數
9045
		if($callShell["output"][0]==="1"){
9046
 
9047
			#增加參數
9048
			$conf["external::callShell"]["argu"][]="--column-statistics=0";
9049
 
9050
			}#if end
9051
 
9052
		#輸出資料庫sql檔案		
9053
		#函式說明:
9054
		#呼叫shell執行系統命令,並取得回傳的內容.
9055
		#回傳結果:
9056
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
9057
		#$result["error"],錯誤訊息陣列.
9058
		#$result["function"],當前執行的函數名稱.
9059
		#$result["argu"],使用的參數.
9060
		#$result["cmd"],執行的指令內容.
9061
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
9062
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
9063
		#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
9064
		#$result["running"],是否還在執行.
9065
		#$result["pid"],pid.
9066
		#$result["statusCode"],執行結束後的代碼.
9067
		#必填參數:
9068
		#$conf["command"],字串,要執行的指令與.
9069
		$conf["external::callShell"]["command"]="mysqldump";
9070
		#$conf["fileArgu"],字串,變數__FILE__的內容.
9071
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];
9072
		#可省略參數:
9073
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
9074
		$conf["external::callShell"]["argu"][]="-u";
9075
		$conf["external::callShell"]["argu"][]=$conf["dbAccount"];
9076
		$conf["external::callShell"]["argu"][]=$conf["dbPassword"];
9077
		$conf["external::callShell"]["argu"][]="-h";
9078
		$conf["external::callShell"]["argu"][]=$conf["dbAddress"];
9079
 
9080
		#如果有指定 port
9081
		if($port!==""){
9082
 
9083
			#設置port
9084
			$conf["external::callShell"]["argu"][]=$port;
9085
 
9086
			}#if end
9087
 
9088
		$conf["external::callShell"]["argu"][]="--default-character-set=utf8";
9089
		$conf["external::callShell"]["argu"][]="--events";
9090
		$conf["external::callShell"]["argu"][]="--routines";
9091
		$conf["external::callShell"]["argu"][]="--single-transaction";
9092
		$conf["external::callShell"]["argu"][]="--skip-lock-tables";
9093
		$conf["external::callShell"]["argu"][]="--quick";
9094
		$conf["external::callShell"]["argu"][]=$conf["backedDatabaseName"];
9095
		$conf["external::callShell"]["argu"][]=">";
9096
		$conf["external::callShell"]["argu"][]=$conf["storePlace"].$conf["exportFileName"];
9097
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
9098
		#$conf["arguIsAddr"]=array();
9099
		#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
9100
		#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
9101
		#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
9102
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
9103
		#$conf["enablePrintDescription"]="true";
9104
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
9105
		#$conf["printDescription"]="";
9106
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".
9107
		$conf["external::callShell"]["escapeshellarg"]="true";
9108
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
9109
		#$conf["username"]="";
9110
		#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
9111
		#$conf["password"]="";
9112
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
9113
		#$conf["useScript"]="";
9114
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
9115
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
9116
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
9117
		#$conf["inBackGround"]="";
9118
		#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
9119
		#$conf["getErr"]="false";
9120
		#備註:
9121
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
9122
		#參考資料:
9123
		#exec=>http://php.net/manual/en/function.exec.php
9124
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
9125
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
9126
		$callShell=external::callShell($conf["external::callShell"]);
9127
		unset($conf["external::callShell"]);
9128
 
9129
		#如果執行shell失敗
9130
		if($callShell["status"]==="false"){
9131
 
9132
			#設置錯誤識別
9133
			$result["status"]="false";
9134
 
9135
			#設置錯誤訊息
9136
			$result["error"]=$callShell;
9137
 
9138
			#回傳結果
9139
			return $result;
9140
 
9141
			}#if end
9142
 
9143
		#設置產生的sql檔案位置
9144
		$result["sqlAddress"]=$conf["storePlace"].$conf["exportFileName"];
9145
 
9146
		#設置執行成功
9147
		$result["status"]="true";
9148
 
9149
		#回傳結果
9150
		return $result;
9151
 
9152
		}#function backupDatabase end
9153
 
9154
	/*
9155
	#函式說明:
9156
	#移除表,會回傳一個陣列。
9157
	#回傳結果:
9158
	#$result["status"],若成功則爲"true",失敗則爲,"false"
9159
	#$result["error"],錯誤訊息.
9160
	#$result["function"],當前執行的函數名稱.
9161
	#必填參數:
9162
	$conf["dbAddress"],字串,爲mysql-Server的位置
9163
	$conf["dbAddress"]=$dbAddress;
9164
	$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號
9165
	$conf["dbAccount"]=$dbAccount;
9166
	$conf["selectedDatabaseName"],字串,爲要移除的資料表位於哪個資料庫
9167
	$conf["selectedDatabaseName"]=$dbName;
9168
	$conf["dropedDataTableName"],字串,爲要移除的資料表名稱
9169
	$conf["dropedDataTableName"]=$tableName;#爲要移除的資料表名稱
9170
	#可省略參數:		
9171
	#$conf["dbPassword"],字串.爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
9172
	#$conf["dbPassword"]=$dbPassword;
9173
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,預設為3306.
9174
	#$conf["dbPort"]="3306";
9175
	#參考資料:
9176
	#無.
9177
	#備註:
9178
	#無.
9179
	*/
9180
	public static function dropDataTable($conf){
9181
 
9182
		#初始化要回傳的內容
9183
		$result=array();
9184
 
9185
		#取得當前執行的函數名稱
9186
		$result["function"]=__FUNCTION__;
9187
 
9188
		#如果 $conf 不為陣列
9189
		if(gettype($conf)!="array"){
9190
 
9191
			#設置執行失敗
9192
			$result["status"]="false";
9193
 
9194
			#設置執行錯誤訊息
9195
			$result["error"][]="\$conf變數須為陣列形態";
9196
 
9197
			#如果傳入的參數為 null
9198
			if($conf==null){
9199
 
9200
				#設置執行錯誤訊息
9201
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
9202
 
9203
				}#if end
9204
 
9205
			#回傳結果
9206
			return $result;
9207
 
9208
			}#if end
9209
 
9210
		#函式說明:
9211
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
9212
		#回傳結果:
9213
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
9214
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
9215
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
9216
		#必填參數:
9217
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
9218
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("dbAddress","dbAccount","selectedDatabaseName","dropedDataTableName");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
9219
		#可省略參數:
9220
		$conf["variableType"]=array("string","string","string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
9221
		#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
9222
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
9223
		unset($conf["variableCheck"]["isexistMuti"]);
9224
 
9225
		#如果檢查不正常
9226
		if($checkResult["status"]=="false"){
9227
 
9228
			#設置執行錯誤
9229
			$result["status"]="fasle";
9230
 
9231
			#設置錯誤訊息
9232
			$result["error"]=$checkResult;
9233
 
9234
			#回傳結果:
9235
			return $result;
9236
 
9237
			}#if end
9238
 
9239
		#如果檢查不通過
9240
		if($checkResult["passed"]=="false"){
9241
 
9242
			#設置執行錯誤
9243
			$result["status"]="fasle";
9244
 
9245
			#設置錯誤訊息
9246
			$result["error"]=$checkResult;
9247
 
9248
			#回傳結果:
9249
			return $result;
9250
 
9251
			}#if end
9252
 
9253
		#建立移除資料表的sql語言
9254
		$sql="drop table ".$conf["selectedDatabaseName"].".".$conf["dropedDataTableName"].";";
9255
 
9256
		#函式說明:
9257
		#執行mysql查詢的指令
9258
		#回傳結果::
9259
		#$result["status"],"true"為執行成功;"false"為執行失敗。
9260
		#$result["error"],錯誤訊息的陣列
9261
		#查詢號的解果,需要解析。
9262
		#必填參數:
9263
		$conf["db"]["execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
9264
		$conf["db"]["execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
9265
		$conf["db"]["execMysqlQuery"]["dbSql"]=$sql;#要執行sql語法
9266
		#可省略參數: 
9267
 
9268
		#如果有設定密碼
9269
		if(isset($conf["dbPassword"])){
9270
 
9271
			$conf["db"]["execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
9272
 
9273
			}#if end
9274
 
9275
		#如果有設定 $conf["dbPort"]
9276
		if(isset($conf["dbPort"])){
9277
 
9278
			#設置 $conf["dbPort"]
9279
			$conf["db"]["execMysqlQuery"]["dbPort"]=$conf["dbPort"];
9280
 
9281
			}#if end
9282
 
9283
		$queryResult=db::execMysqlQuery($conf["db"]["execMysqlQuery"]);
9284
		unset($conf["db"]["execMysqlQuery"]);
9285
 
9286
		#如果移除資料表失敗
9287
		if($queryResult["status"]=="false"){
9288
 
9289
			#設置錯誤識別
9290
			$result["status"]="false";
9291
 
9292
			#設置錯誤訊息
9293
			$result["error"]=$queryResult["error"];
9294
 
9295
			#回傳結果
9296
			return $result;
9297
 
9298
			}#if end
9299
 
9300
		#設置執行成功的訊息
9301
		$result["status"]="true";
9302
 
9303
		#回傳結果
9304
		return $result;
9305
 
9306
		}#funcotion dropDataTable end
9307
 
9308
	/*
9309
	#函式說明:
9310
	#查詢所有的資料庫列表,會回傳查詢的結果
9311
	#回傳結果:
9312
	#$result["status"],執行是否正常,"true"為正常,"fasle"為不正常
9313
	#$result["error"],爲錯誤訊息
9314
	#$result["function"],當前執行的函數名稱
9315
	#$result["dbName"] 爲查詢的資料庫名稱陣列,第一筆資料庫名稱爲$result["dbName"][0],第二筆資料庫名稱爲$result["dbName"][1],其餘以此類推。
9316
	#$result["dbCounts"] 爲資料庫的總筆數	
9317
	#必填參數:
9318
	$conf["dbAddress"],字串,爲mysql-Server的位置.
9319
	$conf["dbAddress"]=$dbAddress;
9320
	$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號
9321
	$conf["dbAccount"]=$dbAccount;
9322
	#可省略參數:
9323
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
9324
	#$conf["dbPassword"]=$dbPassword;
9325
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,預設為3306.
9326
	#$conf["dbPort"]="3306";
9327
	#參考資料:
9328
	#無.
9329
	#備註:
9330
	#無.
9331
	*/
9332
	public static function getDataBaseList($conf){
9333
 
9334
		#初始化要回傳的內容
9335
		$result=array();
9336
 
9337
		#取得當前執行的函數名稱
9338
		$result["function"]=__FUNCTION__;
9339
 
9340
		#如果 $conf 不為陣列
9341
		if(gettype($conf)!="array"){
9342
 
9343
			#設置執行失敗
9344
			$result["status"]="false";
9345
 
9346
			#設置執行錯誤訊息
9347
			$result["error"][]="\$conf變數須為陣列形態";
9348
 
9349
			#如果傳入的參數為 null
9350
			if($conf==null){
9351
 
9352
				#設置執行錯誤訊息
9353
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
9354
 
9355
				}#if end
9356
 
9357
			#回傳結果
9358
			return $result;
9359
 
9360
			}#if end
9361
 
9362
		#檢查參數
9363
		#函式說明:
9364
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
9365
		#回傳結果:
9366
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
9367
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
9368
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
9369
		#必填參數:
9370
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
9371
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("dbAddress","dbAccount");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
9372
		#可省略參數:
9373
		#$conf["variableType"]=array();#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
9374
		#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
9375
		#備註:
9376
		#功能與checkExistAndType函式相同
9377
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
9378
		unset($conf["variableCheck"]["isexistMuti"]);
9379
 
9380
		#如果 $checkResult["passed"]等於"fasle"
9381
		if($checkResult["passed"]=="fasle"){
9382
 
9383
			#設置錯誤識別
9384
			$result["status"]="fasle";
9385
 
9386
			#設置錯誤訊息
9387
			$result["error"]=$checkResult;
9388
 
9389
			#回傳結果
9390
			return $result;
9391
 
9392
			}#if end 
9393
 
9394
		#連線到mysql-server
9395
		#函式說明:
9396
		#連線到mysql-server,會回傳一個陣列
9397
		#回傳結果:
9398
		#$result["status"],若連線成功則爲"true",連線失敗則爲"false"。
9399
		#$result["connectInformation"],爲回傳的mysql連線資訊。
9400
		#$result["error"],爲錯誤訊息陣列
9401
		#必填參數:
9402
		$conf["db"]["mysqlConnect"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置。
9403
		$conf["db"]["mysqlConnect"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號。
9404
		#可省略參數:
9405
 
9406
		#如果有設置 $conf["dbPassword"]
9407
		if(isset($conf["dbPassword"])){
9408
 
9409
			$conf["db"]["mysqlConnect"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼。
9410
 
9411
			}#if end
9412
 
9413
		#如果有設置 $conf["dbPort"]
9414
		if(isset($conf["dbPort"])){
9415
 
9416
			$conf["db"]["mysqlConnect"]["dbPort"]=$conf["dbPort"];#連線時用的port.
9417
 
9418
			}#if end
9419
 
9420
		$con=db::mysqlConnect($conf["db"]["mysqlConnect"]);
9421
		unset($conf["db"]["mysqlConnect"]);
9422
 
9423
		#如果 $con["status"] 等於 "fasle"
9424
		if($con["status"]=="fasle"){
9425
 
9426
			#設置錯誤識別
9427
			$result["status"]="false";
9428
 
9429
			#設置錯誤訊息
9430
			$result["error"]=$con;
9431
 
9432
			#回傳結果
9433
			return $result;
9434
 
9435
			}#if end
9436
 
9437
		#執行列出資料庫列表的SQL語法
9438
		#函式說明:
9439
		#執行mysql指令
9440
		#回傳結果::
9441
		#$result["status"],"true"為執行成功;"false"為執行失敗。
9442
		#$result["error"],錯誤訊息的陣列
9443
		#$result["function"],當前執行的涵式
9444
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
9445
		#$result["queryString"],mysql查詢的語言
9446
		#查詢號的解果,需要解析。
9447
		#必填參數:
9448
		$conf["db::execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
9449
		$conf["db::execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
9450
		$conf["db::execMysqlQuery"]["dbSql"]="show databases;";#要執行sql語法
9451
		#可省略參數: 
9452
 
9453
		#如果存在 $conf["dbPassword"]
9454
		if(isset($conf["dbPassword"])){
9455
 
9456
			$conf["db::execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
9457
 
9458
			}#if end
9459
 
9460
		#如果存在 $conf["dbPort"]
9461
		if(isset($conf["dbPort"])){
9462
 
9463
			$conf["db::execMysqlQuery"]["dbPort"]=$conf["dbPort"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
9464
 
9465
			}#if end
9466
 
9467
		$execMysqlQuery=db::execMysqlQuery($conf["db::execMysqlQuery"]);
9468
		unset($conf["db::execMysqlQuery"]);
9469
 
9470
		#如果執行SQL語法失敗
9471
		if($execMysqlQuery["status"]=="false"){
9472
 
9473
			#設置錯誤識別
9474
			$result["status"]="false";
9475
 
9476
			#設置錯誤訊息
9477
			$result["error"]=$execMysqlQuery;
9478
 
9479
			#回傳結果
9480
			return $result;
9481
 
9482
			}#if end
9483
 
9484
		#設定 $i 的初始值
9485
		$times=0;
9486
 
9487
		#逐筆解析內容
9488
		while($row=mysqli_fetch_assoc($execMysqlQuery["queryResource"])) {
9489
 
9490
			#將結果存進 $fetchResult[$times]	    	
9491
			$fetchResult[$times]= $row['Database'];
9492
 
9493
			#$times + 1 (計數用)
9494
			$times++;
9495
 
9496
			}#while end
9497
 
9498
		#取得每筆資料內容(資料庫的名稱)
9499
		$result["dbName"]=$fetchResult;
9500
 
9501
		#取得總共的資料筆數
9502
		$result["dbCounts"]=$times;
9503
 
9504
		#執行到這邊代表執行成功
9505
		$result["status"]="true";
9506
 
9507
		#回傳查詢的結果 $result
9508
		return $result;
9509
 
9510
		}#function getDataBaseList end
9511
 
9512
	/*
9513
	#函式說明:
9514
	#查詢特定資料庫裡的資料表列表,會回傳查詢的結果
9515
	#回傳結果:
9516
	#$result["status"],執行是否成功,"true"代表執行成功;"false"代表執行失敗。
9517
	#$result["error"],執行錯誤的訊息.
9518
	#$result["function"],當前執行的函式名稱.
9519
	#$result["connectInformation"],爲回傳的mysql連線資訊。
9520
	#$result["tableName"] 爲查詢的資料庫名稱陣列,
9521
		#第一筆資料庫名稱爲$result["tableName"][0],
9522
		#第二筆資料庫名稱爲$result["tableName"][1],
9523
		#其餘以此類推。
9524
	#$result["dataCounts"] 爲資料表的總筆數
9525
	#必填參數:
9526
	$conf["dbAddress"],字串,爲mysql-Server的位置
9527
	$conf["dbAddress"]=$dbAddress;
9528
	$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號
9529
	$conf["dbAccount"]=$dbAccount;
9530
	$conf["selectedDataBaseName"],字串,爲指定的資料庫名稱
9531
	$conf["selectedDataBaseName"]=$dbName;
9532
	#可省略參數:
9533
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
9534
	#$conf["dbPassword"]=$dbPassword;
9535
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,預設為3306.
9536
	#$conf["dbPort"]="3306";
9537
	#參考資料:
9538
	#無.
9539
	#備註:
9540
	#原始語法,show tables FROM databaseName,代表檢視databaseName裡面的資料表清單。
9541
	*/
9542
	public static function getDataTableList($conf){
9543
 
9544
		#初始化要回傳的內容
9545
		$result=array();
9546
 
9547
		#取得當前執行的函數名稱
9548
		$result["function"]=__FUNCTION__;
9549
 
9550
		#如果 $conf 不為陣列
9551
		if(gettype($conf)!="array"){
9552
 
9553
			#設置執行失敗
9554
			$result["status"]="false";
9555
 
9556
			#設置執行錯誤訊息
9557
			$result["error"][]="\$conf變數須為陣列形態";
9558
 
9559
			#如果傳入的參數為 null
9560
			if($conf==null){
9561
 
9562
				#設置執行錯誤訊息
9563
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
9564
 
9565
				}#if end
9566
 
9567
			#回傳結果
9568
			return $result;
9569
 
9570
			}#if end
9571
 
9572
		#函式說明:
9573
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
9574
		#回傳結果:
9575
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
9576
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
9577
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
9578
		#必填參數:
9579
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
9580
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("dbAddress","dbAccount","selectedDataBaseName");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
9581
		#可省略參數:
9582
		#$conf["variableType"]=array();#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
9583
		#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
9584
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
9585
		unset($conf["variableCheck"]);
9586
 
9587
		#如果檢查失敗
9588
		if($checkResult["status"]=="false"){
9589
 
9590
			#設置錯誤訊息識別
9591
			$result["status"]="fasle";
9592
 
9593
			#設置錯誤訊息
9594
			$result["error"]=$checkResult;
9595
 
9596
			#回傳錯誤結果
9597
			return $result;
9598
 
9599
			}#if end
9600
 
9601
		#如果檢查不通過
9602
		if($checkResult["passed"]=="false"){
9603
 
9604
			#設置錯誤訊息識別
9605
			$result["status"]="fasle";
9606
 
9607
			#設置錯誤訊息
9608
			$result["error"]=$checkResult;
9609
 
9610
			#回傳錯誤結果
9611
			return $result;
9612
 
9613
			}#if end
9614
 
9615
		#要執行的 sql 語句
9616
		$sql="show tables FROM ".$conf["selectedDataBaseName"].";";
9617
 
9618
		#函式說明:
9619
		#執行mysql指令
9620
		#回傳結果::
9621
		#$result["status"],"true"為執行成功;"false"為執行失敗。
9622
		#$result["error"],錯誤訊息的陣列
9623
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
9624
		#$result["queryString"],mysql查詢的語言
9625
		#查詢號的解果,需要解析。
9626
		#必填參數:
9627
		$conf["db.execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
9628
		$conf["db.execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
9629
		$conf["db.execMysqlQuery"]["dbSql"]=$sql;#要執行sql語法
9630
		#可省略參數: 
9631
 
9632
		#如果 $conf["dbPassword"] 有設定
9633
		if(isset($conf["dbPassword"])){
9634
 
9635
			#$conf["db.execMysqlQuery"]["dbPassword"]=$dbPassword;#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
9636
			$conf["db.execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼。
9637
 
9638
			}#if end
9639
 
9640
		#如果 $conf["dbPort"] 有設定
9641
		if(isset($conf["dbPort"])){
9642
 
9643
			#設置 dbPort
9644
			$conf["db.execMysqlQuery"]["dbPort"]=$conf["dbPort"];
9645
 
9646
			}#if end
9647
 
9648
		$queryResult=db::execMysqlQuery($conf["db.execMysqlQuery"]);
9649
		unset($conf["db.execMysqlQuery"]);
9650
 
9651
		#如果執行sql語法失敗
9652
		if($queryResult["status"]=="false"){
9653
 
9654
			#設置執行不正常
9655
			$result["status"]="false";
9656
 
9657
			#設置錯誤訊息
9658
			$result["error"]=$queryResult;
9659
 
9660
			#回傳結果
9661
			return $result;
9662
 
9663
			}#if end
9664
 
9665
		#將查詢的結果放進$queryResult裏面
9666
		$queryResult=$queryResult["queryResource"];
9667
 
9668
		#debug
9669
		#var_dump($queryResult);
9670
 
9671
		#設定 $times 的初始值
9672
		$times=0;
9673
 
9674
		#初始化解析的內容儲存的地方
9675
		$fetchResult=array();
9676
 
9677
		#逐筆解析內容
9678
		while ($row = mysqli_fetch_assoc($queryResult)) {
9679
 
9680
			#將結果存進 $result[$i]		    	
9681
			$fetchResult[$times]= $row["Tables_in_".$conf["selectedDataBaseName"]];
9682
 
9683
			#$times + 1 (計數用)
9684
			$times++;
9685
 
9686
			#debug
9687
			#var_dump($row);
9688
 
9689
			}#while end
9690
 
9691
		#取得每筆資料內容(資料表的名稱)
9692
		$result["tableName"]=$fetchResult;
9693
 
9694
		#取得總共的資料筆數
9695
		$result["dataCounts"]=$times;
9696
 
9697
		#設置執行成功的識別
9698
		$result["status"]="true";
9699
 
9700
		#回傳查詢的結果 $result
9701
		return $result;
9702
 
9703
		}#function getDataTableList end
9704
 
9705
	/*
9706
	#函式說明:
9707
	#取得資料表所有欄位的詳細資訊
9708
	#回傳的內容:
9709
	#$result["status"],執行結果,"true"代表執行成功;"false"代表執行失敗
9710
	#$result["error"],錯誤訊息陣列
9711
	#$result["function"],當前執行的函數名稱.
9712
	#$result["sql"],執行的sql語法
9713
	#$result["oriInput"],原始的資料表欄位資訊
9714
	#$result["everyLine"],逐行的欄位資訊
9715
	#$result["tableName"],當前查詢的資料表名稱
9716
	#$result["engine"],資料表使用的儲存引擎
9717
	#$result["charset"],資料表預設的編碼
9718
	#$result["columnName"][$i],各欄位的名稱陣列,$i爲1開始的數字,也可以使用欄位的名稱。
9719
	#$result["columnVarTypeAndLengthLimit"][$i],各欄位儲存的變數形態與長度限制,$i爲1開始的數字,也可以使用欄位的名稱。
9720
	#$result["columnVarType"][$i],各欄位變數儲存的型態,$i爲1開始的數字,也可以使用欄位的名稱.
9721
	#$result["columnVarLengthLimit"][$i],個欄位變數的長度限制,若不存在其限制,則為"",$i爲1開始的數字,也可以使用欄位的名稱.
9722
	#$result["columnNotNull"][$i],各欄位是否不可爲null,"true"爲不可以爲null;"false"爲可爲"null",$i爲1開始的數字,也可以使用欄位的名稱。
9723
	#$result["columnAutoIncrement"][$i],各欄位是否會自動加1,"true"爲會;"false"爲不會,$i爲1開始的數字,也可以使用欄位的名稱。
9724
	#$result["columnDefault"][$i],各欄位的預設內容,若無則爲"沒有指定",$i爲1開始的數字,也可以使用欄位的名稱。
9725
	#$result["columnOnUpdateAction"][$i],當資料有修改時,該欄位的內容要怎麼因應,$i爲1開始的數字,也可以使用欄位的名稱。
9726
	#$result["columnCharacterSet"][$i],各欄位使用的CharacterSet,$i爲1開始的數字,也可以使用欄位的名稱。
9727
	#$result["columnCollate"][$i],各欄位使用的Collate,$i爲1開始的數字,也可以使用欄位的名稱。
9728
	#$result["key"]["exist"],該資料表是否有索引鍵,"true"代表有;"false"代表沒有。
9729
	#$result["key"][$j],該資料表的索引鍵陣列,$j爲0開始的數字,也可以使用欄位的名稱。
9730
	#$result["keyConstraintName"][$j],該資料表用於識別索引鍵的CONSTRAINT名稱陣列,$j爲1開始的數字,也可以使用欄位的名稱。
9731
	#$result["primaryKey"],該資料表的主鍵
9732
	#$result["foreignKey"]["exist"],該資料表是否有foreign key,"true"代表有;"fasle"代表沒有。
9733
	#$result["foreignKey"]["constraintName"][$k],用來識別外鍵的CONSTRAINT名稱陣列,$k爲1開始的數字,也可以使用欄位的名稱。
9734
	#$result["foreignKey"]["columnName"][$k],外鍵的名稱陣列,$k爲1開始的數字,也可以使用欄位的名稱。
9735
	#$result["foreignKey"]["referencesTable"][$k],外鍵參照的欄位,$k爲1開始的數字,,也可用欄位的名稱來找value.
9736
	#$result["foreignKey"]["referencesColumn"][$k],外鍵參照的欄位屬於哪個資料表,$k爲1開始的數字,也可用欄位的名稱來找value.
9737
	#$result["foreignKey"]["onUpdateAction"][$i],當參照的欄位資料更新時,會怎麼同步,$i爲1開始的數字,也可用欄位的名稱來找value.
9738
	#$result["foreignKey"]["onDeleteAction"][$i],當參照的欄位資料移除時,會怎麼同步,$i爲1開始的數字,也可用欄位的名稱來找value.
9739
	#必填參數:
9740
	#$conf["dbAddress"],字串,資料庫的網路位置.
9741
	$conf["dbAddress"]=$dbAddress;
9742
	#$conf["dbAccount"],字串,連線到資料庫要用的帳號.
9743
	$conf["dbAccount"]=$dbAccount;
9744
	#$conf["selectedDataBase"],字串,連線到資料庫要選擇的資料庫.
9745
	$conf["selectedDataBase"]=$dbName;
9746
	#$conf["selectedDataTable"],字串,連線到資料庫要檢視的資料表.
9747
	$conf["selectedDataTable"]="";
9748
	#可省略參數:
9749
	#$conf["dbPassword"],字串,連線到資料庫要用的密碼
9750
	#$conf["dbPassword"]=$dbPassword;
9751
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,預設為3306.
9752
	#$conf["dbPort"]="3306";
9753
	#參考資料:
9754
	#無.
9755
	#備註:
9756
	#查詢的功能有點弱,目前用getTableColumnDetailInfo替代
9757
	*/
9758
	public static function getDataTableColumn($conf){
9759
 
9760
		return db::getTableColumnDetailInfo($conf);
9761
 
9762
		}#function getDataTableColumn end
9763
 
9764
	/*
9765
	#函式說明:
9766
	#取得資料表內特定欄位的資訊
9767
	#回傳的內容:
9768
	#$result["status"],"true"代表執行成功;"false"代表執行失敗.
9769
	#$result["error"],錯誤訊息.
9770
	#$result["function"],當前執行的函數名稱.
9771
	#$result["columnInfo"]["name"],欄位的名稱.
9772
	#$result["columnInfo"]["type"],欄位的儲存型態.
9773
	#$result["columnInfo"]["length"],欄位的長度限制.
9774
	#$result["columnInfo"]["null"],欄位是否可以為null.
9775
	#$result["columnInfo"]["key"],索引鍵的名稱.
9776
	#$result["columnInfo"]["keyType"],欄位的鍵屬性.
9777
	#$result["columnInfo"]["foreignKeyConstraintName"],外建的名稱
9778
	#$result["columnInfo"]["referencesTable"],外鍵參考的資料表.
9779
	#$result["columnInfo"]["referencesColumn"],外鍵參考的資料表欄位.
9780
	#$result["columnInfo"]["onUpdateAction"],當參考的欄位更新時,要怎麼因應.
9781
	#$result["columnInfo"]["onDeleteAction"],當參考的欄位資料消失時,要怎麼因應.
9782
	#$result["columnInfo"]["default"],欄位的預設內容.
9783
	#$result["columnInfo"]["columnCharacterSet"],欄位的字元集.
9784
	#$result["columnInfo"]["columnCollate"],欄位的校對編碼.
9785
	#必填參數:
9786
	$conf["dbAddress"],字串,爲mysql-Server的位置
9787
	$conf["dbAddress"]=$dbAddress;
9788
	$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號
9789
	$conf["dbAccount"]=$dbAccount;
9790
	$conf["dbName"]=$dbName;#爲指定的資料庫名稱
9791
	$conf["dtName"]="";#為要檢視的資料表名稱
9792
	$conf["columnName"],字串,為要檢視的資料欄位名稱
9793
	$conf["columnName"]="";#為要檢視的資料欄位名稱
9794
	#可省略參數:
9795
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
9796
	#$conf["dbPassword"]=$dbPassword;
9797
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,預設為3306.
9798
	#$conf["dbPort"]="3306";
9799
	#參考資料:
9800
	#無.
9801
	#備註:
9802
	#無.
9803
	*/
9804
	public static function getDataTableSpecificColumn(&$conf){
9805
 
9806
		#初始化要回傳的內容
9807
		$result=array();
9808
 
9809
		#取得當前執行的函數名稱
9810
		$result["function"]=__FUNCTION__;
9811
 
9812
		#如果 $conf 不為陣列
9813
		if(gettype($conf)!="array"){
9814
 
9815
			#設置執行失敗
9816
			$result["status"]="false";
9817
 
9818
			#設置執行錯誤訊息
9819
			$result["error"][]="\$conf變數須為陣列形態";
9820
 
9821
			#如果傳入的參數為 null
9822
			if($conf==null){
9823
 
9824
				#設置執行錯誤訊息
9825
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
9826
 
9827
				}#if end
9828
 
9829
			#回傳結果
9830
			return $result;
9831
 
9832
			}#if end
9833
 
9834
		#檢查參數
9835
		#函式說明:
9836
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
9837
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
9838
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
9839
		#$result["function"],當前執行的函式名稱.
9840
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
9841
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
9842
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
9843
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
9844
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
9845
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
9846
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
9847
		#必填參數:
9848
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
9849
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
9850
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
9851
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("dbAddress","dbAccount","dbName","dtName","columnName");
9852
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
9853
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string","string","string");
9854
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
9855
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
9856
		#可省略參數:
9857
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
9858
		#$conf["canBeEmptyString"]="false";
9859
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
9860
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("dbPassword","dbPort");
9861
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
9862
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
9863
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
9864
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null);
9865
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
9866
		#$conf["arrayCountEqualCheck"][]=array();
9867
		#參考資料:
9868
		#array_keys=>http://php.net/manual/en/function.array-keys.php
9869
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
9870
		unset($conf["variableCheck::checkArguments"]);	
9871
 
9872
		#如果檢查失敗 
9873
		if($checkResult["status"]=="false"){
9874
 
9875
			#設置執行失敗
9876
			$result["status"]="false";
9877
 
9878
			#設置執行失敗訊息
9879
			$result["error"]=$checkResult;
9880
 
9881
			#回傳結果
9882
			return $result;
9883
 
9884
			}#if end
9885
 
9886
		#如果檢查沒有通過
9887
		if($checkResult["passed"]=="false"){
9888
 
9889
			#設置執行失敗
9890
			$result["status"]="false";
9891
 
9892
			#設置執行失敗訊息
9893
			$result["error"]=$checkResult;
9894
 
9895
			#回傳結果
9896
			return $result;
9897
 
9898
			}#if end
9899
 
9900
		#取得所有的欄位資訊
9901
		#函式說明:
9902
		#取得資料表所有欄位的詳細資訊
9903
		#回傳的內容:
9904
		#$result["status"],執行結果,"true"代表執行成功;"false"代表執行失敗
9905
		#$result["error"],錯誤訊息陣列
9906
		#$result["function"],當前執行的函數名稱.
9907
		#$result["sql"],執行的sql語法
9908
		#$result["oriInput"],原始的資料表欄位資訊
9909
		#$result["everyLine"],逐行的欄位資訊
9910
		#$result["tableName"],當前查詢的資料表名稱
9911
		#$result["engine"],資料表使用的儲存引擎
9912
		#$result["charset"],資料表預設的編碼
9913
		#$result["columnName"][$i],各欄位的名稱陣列,$i爲1開始的數字,也可以使用欄位的名稱。
9914
		#$result["columnVarTypeAndLengthLimit"][$i],各欄位儲存的變數形態與長度限制,$i爲1開始的數字,也可以使用欄位的名稱。
9915
		#$result["columnVarType"][$i],各欄位變數儲存的型態,$i爲1開始的數字,也可以使用欄位的名稱.
9916
		#$result["columnVarLengthLimit"][$i],個欄位變數的長度限制,若不存在其限制,則為"",$i爲1開始的數字,也可以使用欄位的名稱.
9917
		#$result["columnNotNull"][$i],各欄位是否不可爲null,"true"爲不可以爲null;"false"爲可爲"null",$i爲1開始的數字,也可以使用欄位的名稱。
9918
		#$result["columnAutoIncrement"][$i],各欄位是否會自動加1,"true"爲會;"false"爲不會,$i爲1開始的數字,也可以使用欄位的名稱。
9919
		#$result["columnDefault"][$i],各欄位的預設內容,若無則爲"沒有指定",$i爲1開始的數字,也可以使用欄位的名稱。
9920
		#$result["columnOnUpdateAction"][$i],當資料有修改時,該欄位的內容要怎麼因應,$i爲1開始的數字,也可以使用欄位的名稱。
9921
		#$result["columnCharacterSet"][$i],各欄位使用的CharacterSet,$i爲1開始的數字,也可以使用欄位的名稱。
9922
		#$result["columnCollate"][$i],各欄位使用的Collate,$i爲1開始的數字,也可以使用欄位的名稱。
9923
		#$result["key"]["exist"],該資料表是否有索引鍵,"true"代表有;"false"代表沒有。
9924
		#$result["key"][$j],該資料表的索引鍵陣列,$j爲0開始的數字,也可以使用欄位的名稱。
9925
		#$result["keyConstraintName"][$j],該資料表用於識別索引鍵的CONSTRAINT名稱陣列,$j爲1開始的數字,也可以使用欄位的名稱。
9926
		#$result["primaryKey"],該資料表的主鍵
9927
		#$result["foreignKey"]["exist"],該資料表是否有foreign key,"true"代表有;"fasle"代表沒有。
9928
		#$result["foreignKey"]["constraintName"][$k],用來識別外鍵的CONSTRAINT名稱陣列,$k爲1開始的數字,也可以使用欄位的名稱。
9929
		#$result["foreignKey"]["columnName"][$k],外鍵的名稱陣列,$k爲1開始的數字,也可以使用欄位的名稱。
9930
		#$result["foreignKey"]["referencesTable"][$k],外鍵參照的欄位,$k爲1開始的數字,,也可用欄位的名稱來找value.
9931
		#$result["foreignKey"]["referencesColumn"][$k],外鍵參照的欄位屬於哪個資料表,$k爲1開始的數字,也可用欄位的名稱來找value.
9932
		#$result["foreignKey"]["onUpdateAction"][$i],當參照的欄位資料更新時,會怎麼同步,$i爲1開始的數字,也可用欄位的名稱來找value.
9933
		#$result["foreignKey"]["onDeleteAction"][$i],當參照的欄位資料移除時,會怎麼同步,$i爲1開始的數字,也可用欄位的名稱來找value.
9934
		#必填參數:
9935
		$conf["db::getTableColumnDetailInfo"]["dbAddress"]=$conf["dbAddress"];#資料庫的網路位置
9936
		$conf["db::getTableColumnDetailInfo"]["dbAccount"]=$conf["dbAccount"];#連線到資料庫要用的帳號
9937
		$conf["db::getTableColumnDetailInfo"]["selectedDataBase"]=$conf["dbName"];#連線到資料庫要選擇的資料庫
9938
		$conf["db::getTableColumnDetailInfo"]["selectedDataTable"]=$conf["dtName"];#連線到資料庫要檢視的資料表
9939
		#可省略參數:
9940
 
9941
		#如果有設定連線密碼
9942
		if(isset($conf["dbPassword"])){
9943
 
9944
			$conf["db::getTableColumnDetailInfo"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
9945
 
9946
			}#if end
9947
 
9948
		#如果有設定連線port
9949
		if(isset($conf["dbPort"])){
9950
 
9951
			$conf["db::getTableColumnDetailInfo"]["dbPort"]=$conf["dbPort"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
9952
 
9953
			}#if end
9954
 
9955
		$queryResult=db::getTableColumnDetailInfo($conf["db::getTableColumnDetailInfo"]);
9956
		unset($conf["db::getTableColumnDetailInfo"]);
9957
 
9958
		#如果查詢失敗
9959
		if($queryResult["status"]=="false"){
9960
 
9961
			#設置錯誤
9962
			$result["status"]="false";
9963
 
9964
			#設置錯誤訊息
9965
			$result["error"]=$queryResult;
9966
 
9967
			#回傳結果
9968
			return $result;
9969
 
9970
			}#if end
9971
 
9972
		#var_dump($queryResult);
9973
 
9974
		#檢查是否有我們要的欄位存在
9975
		#函式說明:
9976
		#檢查一個數值是否與陣列裏面的元素相同
9977
		#回傳結果::
9978
		#$result["status"],"true"表示執行正確,"false"表示執行錯誤.
9979
		#$result["founded"],"true"表示有找到相同的,"false"表示沒有找到相同的.
9980
		#$result["error"],錯誤訊息
9981
		#$result["function"],當前執行的函數名稱
9982
		#$result["equalVarName"],相等的變數名稱或key.
9983
		#$result["equalVarValue"],相等的變數數值內容.
9984
		#必填參數:
9985
		$conf["search"]["getEqualVar"]["conditionElement"]=$conf["columnName"];#條件元素,要等於的元素內容。
9986
		$conf["search"]["getEqualVar"]["compareElements"]=$queryResult["columnName"];#要比對的陣列變數內容。
9987
		$searchResult=search::getEqualVar($conf["search"]["getEqualVar"]);
9988
		unset($conf["search"]["getEqualVar"]);
9989
 
9990
		#如果尋找失敗
9991
		if($searchResult["status"]=="false"){
9992
 
9993
			#設置錯誤
9994
			$result["status"]="false";
9995
 
9996
			#設置錯誤訊息
9997
			$result["error"]=$searchResult;
9998
 
9999
			#回傳結果
10000
			return $result;
10001
 
10002
			}#if end
10003
 
10004
		#如果沒有找到符合的欄位明稱
10005
		if($searchResult["founded"]=="false"){
10006
 
10007
			#設置錯誤
10008
			$result["status"]="false";
10009
 
10010
			#設置錯誤訊息
10011
			$result["error"]="沒有找到指定的欄位!";
10012
 
10013
			#回傳結果
10014
			return $result;
10015
 
10016
			}#if end
10017
 
10018
		#取得欄位資訊的key
10019
		$equalVarKey=$searchResult["equalVarName"];
10020
 
10021
		#取得欄位的名稱
10022
		$result["columnInfo"]["name"]=$queryResult["columnName"][$equalVarKey];
10023
 
10024
		#取欄位的儲存型態與長度限制
10025
		$result["columnInfo"]["type"]=$queryResult["columnVarType"][$equalVarKey];
10026
 
10027
		#檢查欄位儲存型態是否含有「(」與「)」
10028
		#函式說明:
10029
		#檢查一個字串裡面是否有多個關鍵字
10030
		#回傳結果::
10031
		#$result["status"],"true"代表執行成功,"false"代表執行失敗。
10032
		#$result["error"],錯誤訊息
10033
		#$result["founded"],是否找到所有的關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
10034
		#必填參數:
10035
		$conf["search"]["findManyKeyWords"]["keyWords"]=array("(",")");#想要搜尋的關鍵字
10036
		$conf["search"]["findManyKeyWords"]["string"]=$result["columnInfo"]["type"];#要被搜尋的字串內容
10037
		#可省略參數:
10038
		#$conf["search"]["findManyKeyWords"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
10039
		$searchResult=search::findManyKeyWords($conf["search"]["findManyKeyWords"]);
10040
		unset($conf["search"]["findManyKeyWords"]);
10041
 
10042
		#如果 檢查欄位儲存型態是否含有「(」與「)」 失敗
10043
		if($searchResult["status"]=="false"){
10044
 
10045
			#設置錯誤
10046
			$result["status"]="false";
10047
 
10048
			#設置錯誤訊息
10049
			$result["error"]=$searchResult;
10050
 
10051
			#回傳結果
10052
			return $result;
10053
 
10054
			}#if end
10055
 
10056
		#如果欄位儲存型態含有「(」與「)」,則將其從「(」開始分割
10057
		if($searchResult["founded"]=="true"){
10058
 
10059
			#函式說明:
10060
			#將固定格式的字串分開,並回傳分開的結果。
10061
			#回傳的參數:
10062
			#$result["oriStr"],要分割的原始字串內容
10063
			#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
10064
			#$result["dataCounts"],爲總共分成幾段
10065
			#必填參數:
10066
			$conf["stringProcess"]["spiltString"]["stringIn"]=$result["columnInfo"]["type"];#要處理的字串。
10067
			$conf["stringProcess"]["spiltString"]["spiltSymbol"]="(";#爲以哪個符號作爲分割
10068
			$spiltedStr=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
10069
			unset($conf["stringProcess"]["spiltString"]);
10070
 
10071
			#如果分割字串失敗
10072
			if($spiltedStr["status"]=="false"){
10073
 
10074
				#設置錯誤
10075
				$result["status"]="false";
10076
 
10077
				#設置錯誤訊息
10078
				$result["error"]=$spiltedStr;
10079
 
10080
				#回傳結果
10081
				return $result;
10082
 
10083
				}#if end
10084
 
10085
			#取得欄位型態
10086
			$result["columnInfo"]["type"]=$spiltedStr["dataArray"][0];
10087
 
10088
			}#if end 
10089
 
10090
		#取得欄位長度限制
10091
		$result["columnInfo"]["length"]=$queryResult["columnVarLengthLimit"][$conf["columnName"]];
10092
 
10093
		#取得欄位是否可以為null
10094
		$result["columnInfo"]["null"]=$queryResult["columnNotNull"][$conf["columnName"]];
10095
 
10096
		#如果該欄位有key的名稱
10097
		if(isset($queryResult["key"][$conf["columnName"]])){
10098
 
10099
			#該欄位為index key
10100
			$result["columnInfo"]["keyType"]="index key";
10101
 
10102
			#取得欄位的鍵名稱
10103
			$result["columnInfo"]["key"]=$queryResult["keyConstraintName"];
10104
 
10105
			}#if end
10106
 
10107
		#如果該欄位是foreignKey
10108
		if(isset($queryResult["foreignKey"]["constraintName"][$conf["columnName"]])){
10109
 
10110
			#該欄位為foreign key
10111
			$result["columnInfo"]["keyType"]="foreign key";
10112
 
10113
			#取得外鍵的名稱
10114
			$result["columnInfo"]["foreignKeyConstraintName"]=$queryResult["foreignKey"]["constraintName"][$conf["columnName"]];
10115
 
10116
			#取得外鍵參考的資料表
10117
			$result["columnInfo"]["referencesTable"]=$queryResult["foreignKey"]["referencesTable"][$conf["columnName"]];
10118
 
10119
			#取得外按鍵參考的欄位
10120
			$result["columnInfo"]["referencesColumn"]=$queryResult["foreignKey"]["referencesColumn"][$conf["columnName"]];
10121
 
10122
			#當參考的欄位更新時,要怎麼因應
10123
			$result["columnInfo"]["onUpdateAction"]=$queryResult["foreignKey"]["onUpdateAction"][$conf["columnName"]];
10124
 
10125
			#當參考的欄位資料消失時,要怎麼因應
10126
			$result["columnInfo"]["onDeleteAction"]=$queryResult["foreignKey"]["onDeleteAction"][$conf["columnName"]];
10127
 
10128
			}#if enb
10129
 
10130
		#取得欄位的預設內容
10131
		$result["columnInfo"]["default"]=$queryResult["columnDefault"][$conf["columnName"]];
10132
 
10133
		#取得欄位的字元集
10134
		$result["columnInfo"]["columnCharacterSet"]=$queryResult["columnCharacterSet"][$conf["columnName"]];
10135
 
10136
		#取得欄位的校對編碼設定
10137
		$result["columnInfo"]["columnCollate"]=$queryResult["columnCollate"][$conf["columnName"]];
10138
 
10139
		#設置執行成功
10140
		$result["status"]="true";
10141
 
10142
		#回傳結果
10143
		return $result;
10144
 
10145
		}#function getDataTableSpecificColumn end
10146
 
10147
	/*
10148
	#函式說明:
10149
	#檢查資料庫裏的資料表有無指定條件的資料
10150
	#回傳結果::
10151
	#$result["status"],執行是否成功,成功為"true",失敗為"false"。
10152
	#$result["error"],錯誤訊息	
10153
	#$result["founded"],是否找到資料,"true"代表有符合的資料;"false"代表沒有符合的資料.		
10154
	#$result["sql"],執行的sql字串.
10155
	#$result["function"],當前執行的函數名稱.
10156
	#必填參數:
10157
	$conf["dbAddress"],字串,爲mysql-Server的位置
10158
	$conf["dbAddress"]="";
10159
	$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號
10160
	$conf["dbAccount"]="";
10161
	$conf["selectedDataBaseName"],字串,爲指定的資料庫名稱,欲選擇的資料庫名稱
10162
	$conf["selectedDataBaseName"]="";
10163
	$conf["selectedDataTableName"],字串,欲選擇的資料表名稱
10164
	$conf["selectedDataTableName"]="";
10165
	#可省略參數:
10166
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼.
10167
	#$conf["dbPassword"]=$dbPassword;
10168
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,可省略,若省略則代表使用預設的3306 port.
10169
	#$conf["dbPort"]="";
10170
	#$conf["conditionTargetName"],字串陣列,用來判斷的資料表數值名稱,需爲陣列,可省略
10171
	#$conf["conditionTargetName"]=array("");
10172
	#$conf["conditionTargetValue"],字串陣列,用來判斷的資料表數值名稱若等於該數值,表示條件成立,需爲陣列,可省略
10173
	#$conf["conditionTargetValue"]=array("");
10174
	#參考資料:
10175
	#無.
10176
	#備註:
10177
	#無.
10178
	*/
10179
	public static function checkDataExists($conf){
10180
 
10181
		#初始化要回傳的內容
10182
		$result=array();
10183
 
10184
		#取得當前執行的函數名稱
10185
		$result["function"]=__FUNCTION__;
10186
 
10187
		#如果 $conf 不為陣列
10188
		if(gettype($conf)!="array"){
10189
 
10190
			#設置執行失敗
10191
			$result["status"]="false";
10192
 
10193
			#設置執行錯誤訊息
10194
			$result["error"][]="\$conf變數須為陣列形態";
10195
 
10196
			#如果傳入的參數為 null
10197
			if($conf==null){
10198
 
10199
				#設置執行錯誤訊息
10200
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
10201
 
10202
				}#if end
10203
 
10204
			#回傳結果
10205
			return $result;
10206
 
10207
			}#if end
10208
 
10209
		#函式說明:
10210
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
10211
		#回傳結果:
10212
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
10213
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
10214
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
10215
		#必填參數:
10216
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
10217
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("dbAddress","dbAccount","selectedDataBaseName","selectedDataTableName");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
10218
		#可省略參數:
10219
		$conf["variableType"]=array("string","string","string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
10220
		#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
10221
		#備註:
10222
		#功能與checkExistAndType函式相同
10223
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
10224
		unset($conf["variableCheck"]["isexistMuti"]);
10225
 
10226
		#如果檢查失敗
10227
		if($checkResult["status"]=="false"){
10228
 
10229
			#設置錯誤識別
10230
			$result["status"]="false";
10231
 
10232
			#設置錯誤訊息
10233
			$result["error"]=$checkResult;
10234
 
10235
			#回傳結果
10236
			return $result;
10237
 
10238
			}#if end
10239
 
10240
		#如果檢查沒有通過
10241
		if($checkResult["passed"]=="false"){
10242
 
10243
			#設置錯誤識別
10244
			$result["status"]="false";
10245
 
10246
			#設置錯誤訊息
10247
			$result["error"]=$checkResult;
10248
 
10249
			#回傳結果
10250
			return $result;
10251
 
10252
			}#if end
10253
 
10254
		#如果 $conf["conditionTargetName"] 有設定
10255
		if(isset($conf["conditionTargetName"])){
10256
 
10257
			#如果其形態不爲 array
10258
			if(gettype($conf["conditionTargetName"])!="array"){
10259
 
10260
				#設置錯誤識別
10261
				$result["status"]="false";
10262
 
10263
				#設置錯誤訊息
10264
				$result["error"]="\$conf[\"conditionTargetName\"]須爲陣列值";
10265
 
10266
				#回傳結果
10267
				return $result;
10268
 
10269
				}#if end
10270
 
10271
			}#if end
10272
 
10273
		#如果 $conf["conditionTargetValue"] 有設定
10274
		if(isset($conf["conditionTargetValue"])){
10275
 
10276
			#如果其形態不爲 array
10277
			if(gettype($conf["conditionTargetValue"])!="array"){
10278
 
10279
				#設置錯誤識別
10280
				$result["status"]="false";
10281
 
10282
				#設置錯誤訊息
10283
				$result["error"]="\$conf[\"conditionTargetValue\"]須爲陣列值";
10284
 
10285
				#回傳結果
10286
				return $result;
10287
 
10288
				}#if end
10289
 
10290
			}#if end
10291
 
10292
		#函式說明:
10293
		#一次取得資料庫、表的資料
10294
		#回傳結果:
10295
		#$result["status"],執行結果"true"為成功;"false"為執行失敗。
10296
		#$result["error"],錯誤訊息陣列。
10297
		#$result["dataContent"],爲資料的內容。
10298
		#$result["dataContent"][$conf["WhereColumnName"][$i]][$dataSetNum]
10299
			#$dataSetNum 爲第$dataSetNum+1筆資料
10300
			#$conf["WhereColumnName"][$i] 爲第 $i+1 個欄位的名稱
10301
		#$result["dataCount"],爲取得的資料筆數。
10302
		#必填參數:
10303
		$conf["db"]["fastGetDbData"]["dbAddress"]=$conf["dbAddress"];#爲dbServer的位置。
10304
		$conf["db"]["fastGetDbData"]["dbAccount"]=$conf["dbAccount"];#爲登入dbServer的帳號。
10305
		$conf["db"]["fastGetDbData"]["dbName"]=$conf["selectedDataBaseName"];#爲要存取的資料庫名稱
10306
		$conf["db"]["fastGetDbData"]["tableName"]=$conf["selectedDataTableName"];#爲要存取的資料表名稱
10307
		$conf["db"]["fastGetDbData"]["columnYouWant"]=$conf["conditionTargetName"];#你想要的欄位!
10308
		#可省略參數:
10309
 
10310
		#如果 $conf["dbPassword"] 有設置
10311
		if(isset($conf["dbPassword"])){
10312
 
10313
			$conf["db"]["fastGetDbData"]["dbPassword"]=$conf["dbPassword"];#爲要存取dbServer的密碼
10314
 
10315
			}#if end
10316
 
10317
		#如果 $conf["dbPort"] 有設置
10318
		if(isset($conf["dbPort"])){
10319
 
10320
			$conf["db"]["fastGetDbData"]["dbPort"]=$conf["dbPort"];#爲要存取dbServer的port
10321
 
10322
			}#if end
10323
 
10324
		$conf["db"]["fastGetDbData"]["WhereColumnName"]=$conf["conditionTargetName"];#用於判斷語句的欄位項目陣列。
10325
		$conf["db"]["fastGetDbData"]["WhereColumnValue"]=$conf["conditionTargetValue"];#用於判斷語句的欄位數值陣列,若與LIKE搭配,則可以在關鍵自字串的左右名加上「%」符號,這樣就可以搜尋具有該字串的內容。
10326
		#$conf["db"]["fastGetDbData"]["WhereColumnCombine"]=array("");#用於判斷語句當中需要()起來的判斷式,須爲陣列值,"s"代表「(」,"e"代表「)」 ,若無則須設爲""。
10327
		#$conf["db"]["fastGetDbData"]["WhereColumnOperator"]=array("");#用於判斷語句的比較符號陣列,可以用的符號有「"="、">"、"<"、"LIKE"、"NOT LIKE"」,預設都爲「=」。
10328
		#$conf["db"]["fastGetDbData"]["WhereColumnAndOr"]=array("");#用於判斷語句條件之間成立的條件是AND還是OR,須爲陣列值。其數量應爲要判斷的欄位數量減一。
10329
		#$conf["db"]["fastGetDbData"]["orderItem"]="";#爲排序的項目依據,若要用隨機抽樣,可以用"rand()",可省略。
10330
		#$conf["db"]["fastGetDbData"]["ascORdesc"]="";#爲要低增還是遞減排序,asc爲遞增;desc爲遞減。
10331
		#$conf["db"]["fastGetDbData"]["numberStart"]="0";#為從第幾筆開始讀取,預設為0,代筆第一筆。
10332
		#$conf["db"]["fastGetDbData"]["numLimit"]="30";#為要取幾筆資料,可以省略,省略則表示不限制數目。
10333
		#$conf["db"]["fastGetDbData"]["groupBy"]=array("");#爲要以哪幾個欄爲作爲分羣的依據(欄位相同的數值僅會取出一筆)。
10334
		$dataResult=db::fastGetDbData($conf["db"]["fastGetDbData"]);
10335
		unset($conf["db"]["fastGetDbData"]);
10336
 
10337
		#如果查詢資料失敗
10338
		if($dataResult["status"]=="false"){
10339
 
10340
			#設置錯誤識別
10341
			$result["status"]="false";
10342
 
10343
			#設置錯誤訊息
10344
			$result["error"]=$dataResult;
10345
 
10346
			#回傳結果
10347
			return $result;
10348
 
10349
			}#if end
10350
 
10351
		#取得執行的sql字串
10352
		$result["sql"]=$dataResult["sql"];
10353
 
10354
		#如果 $dataResult["status"] 等於"false"
10355
		if($dataResult["status"]=="false"){
10356
 
10357
			#設置錯誤識別
10358
			$result["status"]="false";
10359
 
10360
			#設置錯誤訊息
10361
			$result["error"]=$dataResult;
10362
 
10363
			#回傳結果
10364
			return $result;
10365
 
10366
			}#if end
10367
 
10368
		#如果$dataResult["dataCount"]沒設定,就表示沒找到相符的資料
10369
		if(!isset($dataResult["dataCount"])){
10370
 
10371
			#設置錯誤識別
10372
			$result["status"]="true";
10373
 
10374
			#設置沒有找到符合資料
10375
			$result["founded"]="false";
10376
 
10377
			#回傳結果
10378
			return $result;
10379
 
10380
			}#if end
10381
 
10382
		#如果符合的資料等於0
10383
		if($dataResult["dataCount"]==0){
10384
 
10385
			#設置錯誤識別
10386
			$result["status"]="true";
10387
 
10388
			#設置沒有找到符合資料
10389
			$result["founded"]="false";
10390
 
10391
			#回傳結果
10392
			return $result;
10393
 
10394
			}#if end
10395
 
10396
		#執行到這邊代表執行成功
10397
		$result["status"]="true";
10398
 
10399
		#設置有找到符合資料
10400
		$result["founded"]="true";
10401
 
10402
		#回傳結果
10403
		return $result;
10404
 
10405
		}#function checkDataExists
10406
 
10407
	/*
10408
	#函式說明:
10409
	#檢查資料表是否存在
10410
	#回傳結果::
10411
	#設置執行錯誤的識別
10412
	#$result["status"],"true"代表執行成功;"false"代表執行失敗.
10413
	#$result["error"],錯誤訊息.
10414
	#$result["founded"],是否有有找到相同的,"true"代表有找到符合的資料;"false"代表沒有符合的資料.
10415
	#$result["function"],當前執行的函數名稱.
10416
	#$result["argu"],使用的參數
10417
	#其餘的結果代表參數不正確
10418
	#必填參數:
10419
	#$conf["dbAddress"],字串,爲mysql-Server的位置
10420
	$conf["dbAddress"]=$dbAddress;
10421
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號
10422
	$conf["dbAccount"]=$dbAccount;
10423
	#$conf["selectedDataBaseName"],字串,爲指定的資料庫名稱
10424
	$conf["selectedDataBaseName"]="";
10425
	#$conf["selectedDataTableName"],字串,為要檢查是否存在的資料表名稱
10426
	$conf["selectedDataTableName"]="";
10427
	#可省略參數
10428
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼 
10429
	#$conf["dbPassword"]=$dbPassword;
10430
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,可省略,若省略則代表使用預設的3306 port.
10431
	#$conf["dbPort"]="";
10432
	#參考資料:
10433
	#無.
10434
	#備註:
10435
	#無.
10436
	*/
10437
	public static function checkDataTableExists($conf){
10438
 
10439
		#初始化要回傳的變數
10440
		$result=array();
10441
 
10442
		#取得當前執行的函數名稱
10443
		$result["function"]=__FUNCTION__;
10444
 
10445
		#如果 $conf 不為陣列
10446
		if(gettype($conf)!="array"){
10447
 
10448
			#設置執行失敗
10449
			$result["status"]="false";
10450
 
10451
			#設置執行錯誤訊息
10452
			$result["error"][]="\$conf變數須為陣列形態";
10453
 
10454
			#如果傳入的參數為 null
10455
			if($conf==null){
10456
 
10457
				#設置執行錯誤訊息
10458
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
10459
 
10460
				}#if end
10461
 
10462
			#回傳結果
10463
			return $result;
10464
 
10465
			}#if end
10466
 
10467
		#取得參數
10468
		$result["argu"]=$conf;
10469
 
10470
		#函式說明:
10471
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
10472
		#回傳結果:
10473
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
10474
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
10475
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
10476
		#必填參數:
10477
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
10478
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("dbAddress","dbAccount","selectedDataBaseName","selectedDataTableName");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
10479
		#可省略參數:
10480
		$conf["variableType"]=array("string","string","string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
10481
		#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
10482
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
10483
		unset($conf["variableCheck"]["isexistMuti"]);
10484
 
10485
		#var_dump($checkResult);
10486
 
10487
		#如果檢查不通過
10488
		if($checkResult["passed"]=="false"){
10489
 
10490
			#設置執行錯誤的識別
10491
			$result["status"]="false";
10492
 
10493
			#設置錯誤訊息
10494
			$result["error"]=$checkResult;
10495
 
10496
			#回傳結果
10497
			return $result;
10498
 
10499
			}#if end
10500
 
10501
		#查詢特定資料庫裡的資料表列表,會回傳查詢的結果
10502
		#$result["status"],若成功則爲0,失敗則爲1。
10503
		#$result["error"],錯誤訊息陣列.
10504
		#$result["tableName"] 爲查詢的資料庫名稱陣列,
10505
			#第一筆資料庫名稱爲$result["tableName"][0],
10506
			#第二筆資料庫名稱爲$result["tableName"][1],
10507
			#其餘以此類推。
10508
		#$result["dataCounts"] 爲資料庫的總筆數
10509
		#必填參數:
10510
		$conf["db"]["getDataTableList"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
10511
		$conf["db"]["getDataTableList"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
10512
		$conf["db"]["getDataTableList"]["selectedDataBaseName"]=$conf["selectedDataBaseName"];#爲指定的資料庫名稱
10513
		#可省略參數:
10514
 
10515
		#如果 $conf["dbPassword"] 有設定
10516
		if(isset($conf["dbPassword"])){
10517
 
10518
			#設定連線時要用的密碼
10519
			$conf["db"]["getDataTableList"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
10520
 
10521
			}#if end
10522
 
10523
		#如果 $conf["dbPort"] 有設定
10524
		if(isset($conf["dbPort"])){
10525
 
10526
			#設定連線時要用的密碼
10527
			$conf["db"]["getDataTableList"]["dbPort"]=$conf["dbPort"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
10528
 
10529
			}#if end		
10530
 
10531
		#原始語法:
10532
		#show tables FROM databaseName,代表檢視databaseName裡面的資料表清單。
10533
		$dataTableList=db::getDataTableList($conf["db"]["getDataTableList"]);
10534
		unset($conf["db"]["getDataTableList"]);
10535
 
10536
		#如果調閱資料表清單出錯
10537
		if($dataTableList["status"]=="false"){
10538
 
10539
			#設置錯誤識別
10540
			$result["status"]="false";
10541
 
10542
			#設置錯誤訊息
10543
			$result["error"]=$dataTableList;
10544
 
10545
			#回傳結果
10546
			return $result;
10547
 
10548
			}#if end
10549
 
10550
		#如果裡面沒有任何1個資料表
10551
		if($dataTableList["dataCounts"]==0){
10552
 
10553
			#設置執行成功的識別
10554
			$result["status"]="true";
10555
 
10556
			#設置有找到相同的
10557
			$result["founded"]="false";
10558
 
10559
			#回傳結果
10560
			return $result;
10561
 
10562
			}#if end
10563
 
10564
		#函式說明:
10565
		#檢查一個數值是否與陣列裏面的元素相同
10566
		#回傳結果::
10567
		#$result["status"],"true"表示執行正確,"false"表示執行錯誤.
10568
		#$result["founded"],"true"表示有找到相同的,"false"表示沒有找到相同的.
10569
		#$result["error"],錯誤訊息
10570
		#$result["function"],當前執行的函數名稱
10571
		#$result["argv"],使用的參數
10572
		#$result["equalVarName"],相等的變數名稱或key.
10573
		#$result["equalVarValue"],相等的變數數值內容.
10574
		#必填參數:
10575
		$conf["search"]["getEqualVar"]["conditionElement"]=$conf["selectedDataTableName"];#條件元素,要等於的元素內容。
10576
		$conf["search"]["getEqualVar"]["compareElements"]=$dataTableList["tableName"];#要比對的陣列變數內容。
10577
		$checkResult=search::getEqualVar($conf["search"]["getEqualVar"]);
10578
		unset($conf["search"]["getEqualVar"]);
10579
 
10580
		#如果有找到相同的元素
10581
		if($checkResult["founded"]==="true"){
10582
 
10583
			#設置執行成功的識別
10584
			$result["status"]="true";
10585
 
10586
			#設置有找到相同的
10587
			$result["founded"]="true";
10588
 
10589
			#回傳結果
10590
			return $result;
10591
 
10592
			}#if end
10593
 
10594
		#如果沒有找到相同的元素
10595
		if($checkResult["founded"]==="false"){
10596
 
10597
			#設置執行成功的識別
10598
			$result["status"]="true";
10599
 
10600
			#設置有找到相同的
10601
			$result["founded"]="false";
10602
 
10603
			#回傳結果
10604
			return $result;
10605
 
10606
			}#if end
10607
 
10608
		#不應該執行到這邊
10609
 
10610
		#設置執行失敗
10611
		$result["status"]="false";
10612
 
10613
		#設置執行錯誤
10614
		$result["error"]="不應該出現的例外狀況";
10615
 
10616
		#回傳結果
10617
		return $result;
10618
 
10619
		}#funcrion checkDataTableExists end
10620
 
10621
	/*
10622
	#函式說明:
10623
	#檢查資料表的欄位是否存在
10624
	#回傳結果::
10625
	#設置執行錯誤的識別
10626
	#$result["function"],當前執行的函數名稱.
10627
	#$result["status"],"true"代表執行成功;"false"代表執行失敗.
10628
	#$result["error"],錯誤訊息.
10629
	#$result["warning"],警告訊息陣列
10630
	#$result["passed"],是否通過檢查,"true"代表通過;"false"代表不通過.
10631
	#其餘的結果代表參數不正確
10632
	#必填參數:
10633
	#$conf["dbAddr"],字串,爲mysql-Server的位置
10634
	$conf["dbAddr"]=$dbAddress; 
10635
	#$conf["dbAcct"],字串,爲用於連入mysql-Server時要使用的帳號
10636
	$conf["dbAcct"]=$dbAccount;
10637
	#$conf["dbName"],字串,爲指定的資料庫名稱
10638
	$conf["dbName"]="";
10639
	#$conf["dtName"],字串,為要檢查是否存在的資料表名稱
10640
	$conf["dtName"]="";
10641
	#$conf["col"],字串陣列,要檢查的欄位名稱.
10642
	$conf["col"]=array();
10643
	#可省略參數
10644
	#$conf["dbPass"],爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼 
10645
	#$conf["dbPass"]=$dbPassword;
10646
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,可省略,若省略則代表使用預設的3306 port.
10647
	#$conf["dbPort"]="";
10648
	#參考資料:
10649
	#無.
10650
	#備註:
10651
	#無.
10652
	*/
10653
	public static function checkTableColExists(&$conf=array()){
10654
 
10655
		#初始化要回傳的結果
10656
		$result=array();
10657
 
10658
		#取得當前執行的函數名稱
10659
		$result["function"]=__FUNCTION__;
10660
 
10661
		#如果沒有參數
10662
		if(func_num_args()==0){
10663
 
10664
			#設置執行失敗
10665
			$result["status"]="false";
10666
 
10667
			#設置執行錯誤訊息
10668
			$result["error"]="函數".$result["function"]."需要參數";
10669
 
10670
			#回傳結果
10671
			return $result;
10672
 
10673
			}#if end
10674
 
10675
		#取得參數
10676
		$result["argu"]=$conf;
10677
 
10678
		#如果 $conf 不為陣列
10679
		if(gettype($conf)!=="array"){
10680
 
10681
			#設置執行失敗
10682
			$result["status"]="false";
10683
 
10684
			#設置執行錯誤訊息
10685
			$result["error"][]="\$conf變數須為陣列形態";
10686
 
10687
			#如果傳入的參數為 null
10688
			if($conf===null){
10689
 
10690
				#設置執行錯誤訊息
10691
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
10692
 
10693
				}#if end
10694
 
10695
			#回傳結果
10696
			return $result;
10697
 
10698
			}#if end
10699
 
10700
		#函式說明:
10701
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
10702
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
10703
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
10704
		#$result["function"],當前執行的函式名稱.
10705
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
10706
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
10707
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
10708
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
10709
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
10710
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
10711
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
10712
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
10713
		#必填參數:
10714
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
10715
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
10716
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
10717
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
10718
		#可以省略的參數:
10719
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
10720
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("dbAddr","dbName","dbAcct","dtName","col");
10721
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
10722
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string","string","array");
10723
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
10724
		#$conf["canBeEmptyString"]="false";
10725
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
10726
		#$conf["canNotBeEmpty"]=array();
10727
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
10728
		#$conf["canBeEmpty"]=array();
10729
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
10730
		#$conf["skipableVariableCanNotBeEmpty"]=array();
10731
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
10732
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("dbPass","dbPort");
10733
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
10734
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
10735
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
10736
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null);
10737
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
10738
		#$conf["disallowAllSkipableVarIsEmpty"]="";
10739
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
10740
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
10741
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
10742
		#$conf["arrayCountEqualCheck"][]=array();
10743
		#參考資料:
10744
		#array_keys=>http://php.net/manual/en/function.array-keys.php
10745
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
10746
		unset($conf["variableCheck::checkArguments"]);
10747
 
10748
		#如果檢查失敗
10749
		if($checkArguments["status"]==="false"){
10750
 
10751
			#設置執行失敗
10752
			$result["status"]="false";
10753
 
10754
			#設置錯誤訊息
10755
			$result["error"]=$checkArguments["error"];
10756
 
10757
			#回傳結果
10758
			return $result;
10759
 
10760
			}#if  end
10761
 
10762
		#如果檢查不通過
10763
		if($checkArguments["passed"]==="false"){
10764
 
10765
			#設置執行失敗
10766
			$result["status"]="false";
10767
 
10768
			#設置錯誤訊息
10769
			$result["error"]=$checkArguments["error"];
10770
 
10771
			#回傳結果
10772
			return $result;
10773
 
10774
			}#if  end
10775
 
10776
		#函式說明:
10777
		#取得資料表所有欄位的詳細資訊
10778
		#回傳的內容:
10779
		#$result["status"],執行結果,"true"代表執行成功;"false"代表執行失敗
10780
		#$result["error"],錯誤訊息陣列
10781
		#$result["function"],當前執行的函數名稱.
10782
		#$result["sql"],執行的sql語法
10783
		#$result["oriInput"],原始的資料表欄位資訊
10784
		#$result["everyLine"],逐行的欄位資訊
10785
		#$result["tableName"],當前查詢的資料表名稱
10786
		#$result["engine"],資料表使用的儲存引擎
10787
		#$result["charset"],資料表預設的編碼
10788
		#$result["columnName"][$i],各欄位的名稱陣列,$i爲1開始的數字,也可以使用欄位的名稱。
10789
		#$result["columnVarTypeAndLengthLimit"][$i],各欄位儲存的變數形態與長度限制,$i爲1開始的數字,也可以使用欄位的名稱。
10790
		#$result["columnVarType"][$i],各欄位變數儲存的型態,$i爲1開始的數字,也可以使用欄位的名稱.
10791
		#$result["columnVarLengthLimit"][$i],個欄位變數的長度限制,若不存在其限制,則為"",$i爲1開始的數字,也可以使用欄位的名稱.
10792
		#$result["columnNotNull"][$i],各欄位是否不可爲null,"true"爲不可以爲null;"false"爲可爲"null",$i爲1開始的數字,也可以使用欄位的名稱。
10793
		#$result["columnAutoIncrement"][$i],各欄位是否會自動加1,"true"爲會;"false"爲不會,$i爲1開始的數字,也可以使用欄位的名稱。
10794
		#$result["columnDefault"][$i],各欄位的預設內容,若無則爲"沒有指定",$i爲1開始的數字,也可以使用欄位的名稱。
10795
		#$result["columnOnUpdateAction"][$i],當資料有修改時,該欄位的內容要怎麼因應,$i爲1開始的數字,也可以使用欄位的名稱。
10796
		#$result["columnCharacterSet"][$i],各欄位使用的CharacterSet,$i爲1開始的數字,也可以使用欄位的名稱。
10797
		#$result["columnCollate"][$i],各欄位使用的Collate,$i爲1開始的數字,也可以使用欄位的名稱。
10798
		#$result["key"]["exist"],該資料表是否有索引鍵,"true"代表有;"false"代表沒有。
10799
		#$result["key"][$j],該資料表的索引鍵陣列,$j爲0開始的數字,也可以使用欄位的名稱。
10800
		#$result["keyConstraintName"][$j],該資料表用於識別索引鍵的CONSTRAINT名稱陣列,$j爲1開始的數字,也可以使用欄位的名稱。
10801
		#$result["primaryKey"],該資料表的主鍵
10802
		#$result["foreignKey"]["exist"],該資料表是否有foreign key,"true"代表有;"fasle"代表沒有。
10803
		#$result["foreignKey"]["constraintName"][$k],用來識別外鍵的CONSTRAINT名稱陣列,$k爲1開始的數字,也可以使用欄位的名稱。
10804
		#$result["foreignKey"]["columnName"][$k],外鍵的名稱陣列,$k爲1開始的數字,也可以使用欄位的名稱。
10805
		#$result["foreignKey"]["referencesTable"][$k],外鍵參照的欄位,$k爲1開始的數字,,也可用欄位的名稱來找value.
10806
		#$result["foreignKey"]["referencesColumn"][$k],外鍵參照的欄位屬於哪個資料表,$k爲1開始的數字,也可用欄位的名稱來找value.
10807
		#$result["foreignKey"]["onUpdateAction"][$i],當參照的欄位資料更新時,會怎麼同步,$i爲1開始的數字,也可用欄位的名稱來找value.
10808
		#$result["foreignKey"]["onDeleteAction"][$i],當參照的欄位資料移除時,會怎麼同步,$i爲1開始的數字,也可用欄位的名稱來找value.
10809
		#必填參數:
10810
		$conf["db::getDataTableColumn"]["dbAddress"]=$conf["dbAddr"];#資料庫的網路位置
10811
		$conf["db::getDataTableColumn"]["dbAccount"]=$conf["dbAcct"];#連線到資料庫要用的帳號
10812
		$conf["db::getDataTableColumn"]["selectedDataBase"]=$conf["dbName"];#連線到資料庫要選擇的資料庫
10813
		$conf["db::getDataTableColumn"]["selectedDataTable"]=$conf["dtName"];#連線到資料庫要檢視的資料表
10814
		#可省略參數:
10815
		if(isset($conf["dbPass"])){
10816
 
10817
			#$conf["dbPassword"]=$dbPassword;#連線到資料庫要用的密碼
10818
			$conf["db::getDataTableColumn"]["dbPassword"]=$conf["dbPass"];
10819
 
10820
			}#if end
10821
 
10822
		#如果有設置 $conf["dbPort"]
10823
		if(isset($conf["dbPort"])){
10824
 
10825
			#$conf["dbPort"]=$dbPort;#連線到資料庫要用的port
10826
			$conf["db::getDataTableColumn"]["dbPort"]=$conf["dbPass"];
10827
 
10828
			}#if end
10829
 
10830
		#備註:
10831
		#查詢的功能有點弱,目前用getTableColumnDetailInfo替代
10832
		$getDataTableColumn=db::getDataTableColumn($conf["db::getDataTableColumn"]);
10833
		unset($conf["db::getDataTableColumn"]);
10834
 
10835
		#如果查詢失敗
10836
		if($getDataTableColumn["status"]==="false"){
10837
 
10838
			#設置執行失敗
10839
			$result["status"]="false";
10840
 
10841
			#設置錯誤訊息
10842
			$result["error"]=$getDataTableColumn["error"];
10843
 
10844
			#回傳結果
10845
			return $result;
10846
 
10847
			}#if end
10848
 
10849
		#初始化通過檢查
10850
		$result["passed"]="true";
10851
 
10852
		#針對每個要檢查的欄位
10853
		foreach($conf["col"] as $colName){
10854
 
10855
			#如果欄位 $colName 不存在
10856
			if(!in_array($colName,$getDataTableColumn["columnName"])){
10857
 
10858
				#設置欄位不存在的警告訊息
10859
				$result["warning"][]="欄位 ".$colName." 不存在";
10860
 
10861
				#設置未通過檢查
10862
				$result["passed"]="false";
10863
 
10864
				}#if end
10865
 
10866
			}#foreach end
10867
 
10868
		#設置執行正常
10869
		$result["status"]="true";
10870
 
10871
		#回傳結果
10872
		return $result;
10873
 
10874
		}#function checkTableColExists end
10875
 
10876
	/*
10877
	#函式說明:
10878
	#檢查該資料庫是否存在,結果會回傳一個陣列。
10879
	#回傳結果:
10880
	#$result["status"],"true"代表執行成功;"false"代表執行失敗.
10881
	#$result["error"],錯誤訊息.
10882
	#$result["exist"],有為"true",無為"false".
10883
	#$result["function"],當前執行的函數名稱.
10884
	#必填參數:
177 liveuser 10885
	#$conf["dbAddress"],字串,爲mysql-Server的位置
3 liveuser 10886
	$conf["dbAddress"]=$dbAddress;
177 liveuser 10887
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號
3 liveuser 10888
	$conf["dbAccount"]=$dbAccount;
177 liveuser 10889
	#$conf["checkDataBaseName"],字串,爲要檢查是否存在的資料庫名稱
3 liveuser 10890
	$conf["checkDataBaseName"]="";
10891
	#可省略參數:
10892
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼.
10893
	#$conf["dbPassword"]="";
10894
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,可省略,若省略則代表使用預設的3306 port.
10895
	#$conf["dbPort"]="";
10896
	#參考資料:
10897
	#無.
10898
	#備註:
10899
	#無.
10900
	*/	
10901
	public static function checkDataBaseExists($conf){
10902
 
10903
		#初始化要回傳的變數
10904
		$result=array();
10905
 
10906
		#紀錄當前執行的函數名稱
10907
		$result["function"]=__FUNCTION__;
10908
 
10909
		#如果 $conf 不為陣列
10910
		if(gettype($conf)!="array"){
10911
 
10912
			#設置執行失敗
10913
			$result["status"]="false";
10914
 
10915
			#設置執行錯誤訊息
10916
			$result["error"][]="\$conf變數須為陣列形態";
10917
 
10918
			#如果傳入的參數為 null
10919
			if($conf==null){
10920
 
10921
				#設置執行錯誤訊息
10922
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
10923
 
10924
				}#if end
10925
 
10926
			#回傳結果
10927
			return $result;
10928
 
10929
			}#if end
10930
 
10931
		#檢查參數
10932
		#函式說明:
10933
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
10934
		#回傳結果:
10935
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
10936
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
10937
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
10938
		#必填參數:
10939
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
10940
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("dbAddress","dbAccount","checkDataBaseName");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
10941
		#可省略參數:
10942
		#$conf["variableType"]=array();#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
10943
		#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
10944
		#備註:
10945
		#功能與checkExistAndType函式相同
10946
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
10947
		unset($conf["variableCheck"]["isexistMuti"]);
10948
 
10949
		#如果 $checkResult["status"] 等於 "false"
10950
		if($checkResult["status"]=="false"){
10951
 
10952
			#設置執行失敗
10953
			$result["status"]="false";
10954
 
10955
			#設置執行錯誤
10956
			$result["error"]=$checkResult;
10957
 
10958
			#回傳結果
10959
			return $result;
10960
 
10961
			}#if end	
10962
 
10963
		#如果 $checkResult["passed"] 等於 "false"
10964
		if($checkResult["passed"]=="false"){
10965
 
10966
			#設置執行失敗
10967
			$result["status"]="false";
10968
 
10969
			#設置執行錯誤
10970
			$result["error"]=$checkResult;
10971
 
10972
			#回傳結果
10973
			return $result;
10974
 
10975
			}#if end
10976
 
10977
		#取得資料庫列表的語法
10978
		#查詢所有的資料庫列表,會回傳查詢的結果
10979
		#$result["status"],執行是否正常,"true"為正常,"fasle"為不正常
10980
		#$result["error"],爲錯誤訊息
10981
		#$result["connectInformation"],爲回傳的mysql連線資訊。
10982
		#$result["dbName"] 爲查詢的資料庫名稱陣列,第一筆資料庫名稱爲$result["dbName"][0],第二筆資料庫名稱爲$result["dbName"][1],其餘以此類推。
10983
		#$result["dbCounts"] 爲資料庫的總筆數	
10984
		#必填參數:
10985
		$conf["db"]["getDataBaseList"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
10986
		$conf["db"]["getDataBaseList"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
10987
		#可省略參數:
10988
 
10989
		#如果 $conf["dbPassword"] 有設定
10990
		if(isset($conf["dbPassword"])){
10991
 
10992
			$conf["db"]["getDataBaseList"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
10993
 
10994
			}#if end
10995
 
10996
		#如果 $conf["dbPort"] 有設定
10997
		if(isset($conf["dbPort"])){
10998
 
10999
			$conf["db"]["getDataBaseList"]["dbPort"]=$conf["dbPort"];#爲連線到mysql-Server時要使用的port,可省略,若省略則代表預設的3306.
11000
 
11001
			}#if end
11002
 
11003
		$queryResult=db::getDataBaseList($conf["db"]["getDataBaseList"]);
11004
		unset($conf["db"]["getDataBaseList"]);
11005
 
11006
		#如果 $queryResult["status"] 等於 "fasle"
11007
		if($queryResult["status"]=="false"){
11008
 
11009
			#設置錯誤識別
11010
			$result["status"]="false";
11011
 
11012
			#設置錯誤訊息
11013
			$result["error"]=$queryResult;
11014
 
11015
			#回傳結果
11016
			return $result;
11017
 
11018
			}#if end
11019
 
11020
		#有幾個資料庫就檢查該名稱有沒有重複
11021
		for($i=0;$i<$queryResult["dbCounts"];$i++){
11022
 
11023
			#檢查名稱是否相同			
11024
			if($queryResult["dbName"][$i]==$conf["checkDataBaseName"]){
11025
 
11026
				#相同名稱代表資料庫重複
11027
				$result["exist"]="true";
11028
 
11029
				#跳出迴圈
11030
				break;
11031
 
11032
				}#判斷式結束
11033
 
11034
			}#迴圈結束
11035
 
11036
		#如果 $result["exist"] 沒有設定
11037
		if(!isset($result["exist"])){
11038
 
11039
			#代表都沒有相同的名稱就代表沒有重複
11040
			$result["exist"]="false";
11041
 
11042
			}#if end
11043
 
11044
		#執行到這邊代表執行正常
11045
		$result["status"]="true";
11046
 
11047
		#回傳結果
11048
		return $result;	
11049
 
177 liveuser 11050
		}#function checkDataBaseExists end
3 liveuser 11051
 
11052
	/*
11053
	#函式說明:
11054
	#尋找特定資料庫裏特定資料表裏面特定欄位有無可用整數編號,可以指定數字的起點與終點,此函式會回傳可用的編號。
11055
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
11056
	#$result["error"],錯誤訊息陣列 
11057
	#$result["function"],當前執行的函數.
11058
	#$result["founded"],爲搜尋可以用的數字是否成功,"true"表示成功,"false"表示失敗.
11059
	#$result["usableNumber"],爲可用的整數。
11060
	#$result["sql"],執行的sql語法.
11061
	#必填參數:
11062
	#$conf["dbAddress"],字串,爲mysql-Server的位置.
11063
	$conf["dbAddress"]=$dbAddress;
11064
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號
11065
	$conf["dbAccount"]=$dbAccount;
11066
	#$conf["selectedDataBaseName"],字串,爲要檢查的資料庫名稱
11067
	$conf["selectedDataBaseName"]=$dbName;
11068
	#$conf["checkDataTableName"],字串,爲要檢查的資料表名稱
11069
	$conf["checkDataTableName"]="";
11070
	#$conf["conditionTargetName"]字串,用來判斷的資料表數值名稱
11071
	$conf["conditionTargetName"]="";
11072
	#$conf["startPoint"],字串,要執行的迴圈起點(資料的起始檢查點),須為整數.
11073
	$conf["startPoint"]="";
11074
	#$conf["endPoint"],字串,要執行的迴圈終點(資料的結束檢查點),須為整數.
11075
	$conf["endPoint"]="";
11076
	#可省略參數:
11077
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼.
11078
	#$conf["dbPassword"]=$dbPassword;
11079
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,可省略,若省略則代表使用預設的3306 port.
11080
	#$conf["dbPort"]="";
11081
	#$conf["otherConditionTargetName"]=array();#查詢欄位項目可用數值的其它條件欄位名稱,爲陣列值。須搭配 $conf["otherConditionTargetValue"] 一起使用
11082
	#$conf["otherConditionTargetName"]=array();
11083
	#$conf["otherConditionTargetValue"]=array();#查詢欄位項目可用數值的其它條件欄位數值,爲陣列值。須搭配 $conf["otherConditionTargetName"] 一起使用
11084
	#$conf["otherConditionTargetValue"]=array();
11085
	#參考資料:
11086
	#無.
11087
	#備註:
11088
	#無.
11089
	*/
11090
	public static function findUsableNumber($conf){
11091
 
11092
		#初始化要回傳的內容
11093
		$result=array();
11094
 
11095
		#取得當前執行的函數名稱
11096
		$result["function"]=__FUNCTION__;
11097
 
11098
		#如果 $conf 不為陣列
11099
		if(gettype($conf)!="array"){
11100
 
11101
			#設置執行失敗
11102
			$result["status"]="false";
11103
 
11104
			#設置執行錯誤訊息
11105
			$result["error"][]="\$conf變數須為陣列形態";
11106
 
11107
			#如果傳入的參數為 null
11108
			if($conf==null){
11109
 
11110
				#設置執行錯誤訊息
11111
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
11112
 
11113
				}#if end
11114
 
11115
			#回傳結果
11116
			return $result;
11117
 
11118
			}#if end
11119
 
11120
		#可用號碼的預設值,用int型態儲存.
11121
		(int)$userableNumber=0;
11122
 
11123
		#函式說明:
11124
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
11125
		#回傳結果:
11126
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
11127
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
11128
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
11129
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
11130
		#必填參數:
11131
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
11132
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("dbAddress","dbAccount","selectedDataBaseName","checkDataTableName","conditionTargetName","startPoint","endPoint");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
11133
		#可省略參數:
11134
		$conf["variableCheck"]["isexistMuti"]["variableType"]=array("string","string","string","string","string","string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
11135
		#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
11136
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
11137
		unset($conf["variableCheck"]["isexistMuti"]);
11138
 
11139
		#如果 $checkResult["status"] 等於 "false"
11140
		if($checkResult["status"]=="false"){
11141
 
11142
			#設置錯誤識別
11143
			$result["status"]="false";
11144
 
11145
			#設置錯誤訊息
11146
			$result["error"]=$checkResult;
11147
 
11148
			#回傳結果
11149
			return $result;
11150
 
11151
			}#if end
11152
 
11153
		#如果 $checkResult["passed"] 等於 "false"
11154
		if($checkResult["passed"]=="false"){
11155
 
11156
			#設置錯誤識別
11157
			$result["status"]="false";
11158
 
11159
			#設置錯誤訊息
11160
			$result["error"]=$checkResult;
11161
 
11162
			#回傳結果
11163
			return $result;
11164
 
11165
			}#if end
11166
 
11167
		#從$startPoint開始到$endPoint結束,供執行 $endPoint-$startPoint 次。
11168
		for($i=$conf["startPoint"];$i<=$conf["endPoint"];$i++){
11169
 
11170
			#更新可用號碼
11171
			$userableNumber=$i;
11172
 
11173
			#查詢目標號碼是否已存在
11174
			#函式說明:
11175
			#一次取得資料庫、表的資料
11176
			#回傳結果:
11177
			#$result["status"],執行結果"true"為成功;"false"為執行失敗。
11178
			#$result["error"],錯誤訊息陣列。
11179
			#$result["dataContent"],爲資料的內容。
11180
			#$result["dataContent"][$conf["WhereColumnName"][$i]][$dataSetNum]
11181
				#$dataSetNum 爲第$dataSetNum+1筆資料
11182
				#$conf["WhereColumnName"][$i] 爲第 $i+1 個欄位的名稱
11183
			#$result["dataCount"],爲取得的資料筆數。
11184
			#$result["sql"],執行的sql字串.
11185
			#必填參數:
11186
			$conf["db"]["fastGetDbData"]["dbAddress"]=$conf["dbAddress"];#爲dbServer的位置。
11187
			$conf["db"]["fastGetDbData"]["dbAccount"]=$conf["dbAccount"];#爲登入dbServer的帳號。
11188
			$conf["db"]["fastGetDbData"]["dbName"]=$conf["selectedDataBaseName"];#爲要存取的資料庫名稱
11189
			$conf["db"]["fastGetDbData"]["tableName"]=$conf["checkDataTableName"];#爲要存取的資料表名稱
11190
			$conf["db"]["fastGetDbData"]["columnYouWant"]=array($conf["conditionTargetName"]);#你想要的欄位!
11191
			#可省略參數:
11192
 
11193
			#如果 $conf["dbPassword"] 有設置
11194
			if(isset($conf["dbPassword"])){
11195
 
11196
				$conf["db"]["fastGetDbData"]["dbPassword"]=$conf["dbPassword"];#爲要存取dbServer的密碼
11197
 
11198
				}#if end
11199
 
11200
			#如果 $conf["dbPort"] 有設置
11201
			if(isset($conf["dbPort"])){
11202
 
11203
				$conf["db"]["fastGetDbData"]["dbPort"]=$conf["dbPort"];#爲要存取dbServer的port
11204
 
11205
				}#if end
11206
 
11207
			#要檢查可用數字的欄位為塞選的欄位
11208
			$conf["db"]["fastGetDbData"]["WhereColumnName"][]=$conf["conditionTargetName"];
11209
 
11210
			#如果 $conf["otherConditionTargetName"] 有設置
11211
			if(isset($conf["otherConditionTargetName"])){
11212
 
11213
				#針對 $conf["otherConditionTargetName"] 的每個元素 
11214
				foreach($conf["otherConditionTargetName"] as $columnName){
11215
 
11216
					$conf["db"]["fastGetDbData"]["WhereColumnName"][]=$columnName;#用於判斷語句的欄位項目陣列.
11217
 
11218
					}#foreach end
11219
 
11220
				}#if end
11221
 
11222
			#要檢查可用數字的欄位數值為塞選的欄位對應數值
11223
			$conf["db"]["fastGetDbData"]["WhereColumnValue"][]=$userableNumber;
11224
 
11225
			#如果 $conf["otherConditionTargetValue"] 有設置
11226
			if(isset($conf["otherConditionTargetValue"])){
11227
 
11228
				#針對每個 $conf["otherConditionTargetValue"] 元素
11229
				foreach($conf["otherConditionTargetValue"] as $columnValue){
11230
 
11231
					$conf["db"]["fastGetDbData"]["WhereColumnValue"][]=$columnValue;#用於判斷語句的欄位數值陣列,若與LIKE搭配,則可以在關鍵自字串的左右名加上「%」符號,這樣就可以搜尋具有該字串的內容.
11232
 
11233
					}#foreach end
11234
 
11235
				}#if end
11236
 
11237
			#$conf["db"]["fastGetDbData"]["WhereColumnCombine"]=array("");#用於判斷語句當中需要()起來的判斷式,須爲陣列值,"s"代表「(」,"e"代表「)」 ,若無則須設爲""。
11238
			#$conf["db"]["fastGetDbData"]["WhereColumnOperator"]=array("");#用於判斷語句的比較符號陣列,可以用的符號有「"="、">"、"<"、"LIKE"、"NOT LIKE"」,預設都爲「=」。
11239
			#$conf["db"]["fastGetDbData"]["WhereColumnAndOr"]=array("");#用於判斷語句條件之間成立的條件是AND還是OR,須爲陣列值。其數量應爲要判斷的欄位數量減一。
11240
			#$conf["db"]["fastGetDbData"]["orderItem"]="";#爲排序的項目依據,若要用隨機抽樣,可以用"rand()",可省略。
11241
			#$conf["db"]["fastGetDbData"]["ascORdesc"]="";#爲要低增還是遞減排序,asc爲遞增;desc爲遞減。
11242
			#$conf["db"]["fastGetDbData"]["numberStart"]="0";#為從第幾筆開始讀取,預設為0,代筆第一筆。
11243
			#$conf["db"]["fastGetDbData"]["numLimit"]="30";#為要取幾筆資料,可以省略,省略則表示不限制數目。
11244
			#$conf["db"]["fastGetDbData"]["groupBy"]=array("");#爲要以哪幾個欄爲作爲分羣的依據(欄位相同的數值僅會取出一筆)。
11245
			$db["fastGetDbData"]=db::fastGetDbData($conf["db"]["fastGetDbData"]);
11246
			unset($conf["db"]["fastGetDbData"]);
11247
 
11248
			#如果取得資料失敗
11249
			if($db["fastGetDbData"]["status"]=="false"){
11250
 
11251
				#設置錯誤識別
11252
				$result["status"]="false";
11253
 
11254
				#設置錯誤訊息
11255
				$result["error"]=$db["fastGetDbData"];
11256
 
11257
				#回傳結果
11258
				return $result;
11259
 
11260
				}#if end
11261
 
11262
			#如果該條件下沒有符合的資料
11263
			if($db["fastGetDbData"]["dataCount"]==0){
11264
 
11265
				#取得可用的編號
11266
				$result["usableNumber"]=$i;
11267
 
11268
				#設置有找到符合的數字
11269
				$result["founded"]="true";
11270
 
11271
				#跳出迴圈
11272
				break;
11273
 
11274
				}#if end
11275
 
11276
			#反之該條件下有符合的資料
11277
			else{
11278
 
11279
				#設置沒有找到符合的數字
11280
				$result["founded"]="false";
11281
 
11282
				}#else end
11283
 
11284
			}#for end
11285
 
11286
		#執行到這邊代表執行正常
11287
		$result["status"]="true";
11288
 
11289
		#回傳結果
11290
		return $result;
11291
 
11292
		}#function findUsableNumber end
11293
 
11294
	/*
11295
	#函式說明:
11296
	#取得特定的資料表資料
11297
	#回傳的參數:
11298
	#$result["status"],執行結果"true"為成功;"false"為執行失敗。
11299
	#$result["error"],錯誤訊息陣列。
11300
	#$result["function"],當前執行的函數名稱
11301
	#$result["sql"],執行的sql語法
11302
	#$result["sqlQueryResult"]#爲資料連線處理完畢之後的結果,需要 sendQueryDataToVariabele 涵式來解析。
11303
	#$result["dataCount"]#符合條件的資料筆數
11304
	#必填參數:
11305
	#$conf["dbAddress"],字串,爲mysql-Server的位置。
11306
	$conf["dbAddress"]=$dbAddress;
11307
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號。
11308
	$conf["dbAccount"]=$dbAccount;
11309
	#$conf["selectedDataBaseName"],字串,要選取的資料庫名稱。
11310
	$conf["selectedDataBaseName"]=$dbName;
11311
	#$conf["selectedDataTableName"],字串,爲欲選擇的資料表名稱。
11312
	$conf["selectedDataTableName"]="";
11313
	#可省略參數:	
11314
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼.
11315
	#$conf["dbPassword"]=$dbPassword;
11316
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,可省略,若省略則代表使用預設的3306 port.
11317
	#$conf["dbPort"]="";
11318
	#$conf["WhereColumnCombine"],字串陣列,用於判斷語句當中需要()起來的判斷式,須爲陣列值,"s"代表「(」,"e"代表「)」 ,若無則須設爲""。
11319
	#$conf["WhereColumnCombine"]=array("");
11320
	#$conf["WhereColumnName"],字串陣列,用於判斷語句的欄位項目陣列。
11321
	#$conf["WhereColumnName"]=array("");
11322
	#$conf["WhereColumnOperator"],字串陣列,用於判斷語句的比較符號陣列,可以用的符號有「"="、">"、"<"、"LIKE"、"NOT LIKE"」,預設都爲「=」。
11323
	#$conf["WhereColumnOperator"]=array("");
11324
	#$conf["WhereColumnValue"],字串陣列,用於判斷語句的欄位數值陣列,若與LIKE搭配,則可以在關鍵自字串的左右名加上「%」符號,這樣就可以搜尋具有該字串的內容。
11325
	#$conf["WhereColumnValue"]=array("");
11326
	#$conf["WhereColumnAndOr"],字串陣列,用於判斷語句條件之間成立的條件是AND還是OR,須爲陣列值。其數量應爲要判斷的欄位數量減一。
11327
	#$conf["WhereColumnAndOr"]=array("");
11328
	#$conf["whereIn"],二維字串陣列,為每個in語句的內容,特定欄位數值等於陣列元素之一。array(array("colName",array("a","b","c")));代表欄位colName的值為a,b,c三者之一.
11329
	#$conf["whereIn"]=array(array("colName",array("a","b","c")));
11330
	#$conf["whereNotIn"],二維字串陣列,為每個not in語句的內容,array(array("colName",array("a","b","c")));代表欄位colName的值不為a,b,c三者之一.
11331
	#$conf["whereNotIn"]=array(array("colName",array("a","b","c")));
11332
	#$conf["orderItem"],字串,爲排序的項目依據,若要用隨機抽樣,可以用"rand()",可省略。
11333
	#$conf["orderItem"]="";
11334
	#$conf["ascORdesc"],字串,爲要低增還是遞減排序,asc爲遞增;desc爲遞減。
11335
	#$conf["ascORdesc"]="";
11336
	#$conf["numberStart"],字串,為從第幾筆開始讀取,預設為0,代筆第一筆。
11337
	#$conf["numberStart"]="0";
11338
	#$conf["number"],字串,為要取幾筆資料,可以省略,省略則表示不限制數目。
11339
	#$conf["number"]="30"
11340
	#$conf["groupBy"],字串陣列,爲要以哪幾個欄爲作爲分羣的依據(欄位相同的數值僅會取出一筆)。
11341
	#$conf["groupBy"]=array("");
11342
	#參考資料:
11343
	#http://stackoverflow.com/questions/5021243/mysql-query-multiple-group-by
11344
	#備註:
11345
	#無.
11346
	*/
11347
	public static function dataTableSelect(&$conf){
11348
 
11349
		#初始化要回傳的變數
11350
		$result=array();
11351
 
11352
		#取得當前執行的函數名稱
11353
		$result["function"]=__FUNCTION__;
11354
 
11355
		#如果 $conf 不為陣列
11356
		if(gettype($conf)!="array"){
11357
 
11358
			#設置執行失敗
11359
			$result["status"]="false";
11360
 
11361
			#設置執行錯誤訊息
11362
			$result["error"][]="\$conf變數須為陣列形態";
11363
 
11364
			#如果傳入的參數為 null
11365
			if($conf==null){
11366
 
11367
				#設置執行錯誤訊息
11368
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
11369
 
11370
				}#if end
11371
 
11372
			#回傳結果
11373
			return $result;
11374
 
11375
			}#if end
11376
 
11377
		#檢查參數
11378
		#函式說明:
11379
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
11380
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
11381
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
11382
		#$result["function"],當前執行的函式名稱.
11383
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
11384
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
11385
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
11386
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
11387
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
11388
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
11389
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
11390
		#必填參數:
11391
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
11392
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
11393
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
11394
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("dbAddress","dbAccount","selectedDataBaseName","selectedDataTableName");
11395
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
11396
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string","string");
11397
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
11398
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
11399
		#可省略參數:
11400
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
11401
		#$conf["canBeEmptyString"]="false";
11402
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
11403
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("dbPassword","dbPort","WhereColumnCombine","WhereColumnName","WhereColumnOperator","WhereColumnValue","WhereColumnAndOr","orderItem","ascORdesc","numberStart","number","groupBy","whereIn","whereNotIn");
11404
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
11405
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","array","array","array","array","array","string","string","string","string","array","array","array");
11406
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
11407
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null,null,null,null,null,null,null,null,"0",null,null,null,null);
11408
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
11409
		$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("WhereColumnName","WhereColumnValue");
11410
		$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("WhereColumnValue","WhereColumnOperator");
11411
		#參考資料:
11412
		#array_keys=>http://php.net/manual/en/function.array-keys.php
11413
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
11414
		unset($conf["variableCheck::checkArguments"]);
177 liveuser 11415
 
3 liveuser 11416
		#如果檢查失敗
11417
		if($checkResult["status"]==="false"){
11418
 
11419
			#設置執行失敗的訊息
11420
			$result["status"]="false";
11421
 
11422
			#設置錯誤訊息
11423
			$result["error"]=$checkResult;
11424
 
11425
			#回傳結果
11426
			return $result;
11427
 
11428
			}#if end
11429
 
11430
		#如果檢查不通過
11431
		if($checkResult["passed"]==="false"){
11432
 
11433
			#設置執行失敗的訊息
11434
			$result["status"]="false";
11435
 
11436
			#設置錯誤訊息
11437
			$result["error"]=$checkResult;
11438
 
11439
			#回傳結果
11440
			return $result;
11441
 
11442
			}#if end
11443
 
11444
		#連線到資料庫
11445
		#函式說明:
11446
		#連線到資料庫,結果會回傳一個陣列
11447
		#$result["status"],若連線成功則爲"true",連線失敗則爲"false".
11448
		#$result["connectInformation"],爲回傳的mysql連線資訊.
177 liveuser 11449
		#$result["error"],錯誤訊息.
11450
		#$result["function"],當前執行的函數名稱.
3 liveuser 11451
		#必填參數:
11452
		$conf["db"]["dbConnect"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
11453
		$conf["db"]["dbConnect"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
11454
		#$conf["dbName"],字串,爲要連的資料庫名稱
11455
		$conf["db"]["dbConnect"]["dbName"]=$conf["selectedDataBaseName"];
11456
		#可省略參數:
11457
 
11458
		#如果 $conf["dbPassword"] 有設定
11459
		if(isset($conf["dbPassword"])){
11460
 
11461
			$conf["db"]["dbConnect"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
11462
 
11463
			}#if end
11464
 
11465
		#如果 $conf["dbPort"] 有設定
11466
		if(isset($conf["dbPort"])){
11467
 
11468
			$conf["db"]["dbConnect"]["dbPort"]=$conf["dbPort"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
11469
 
11470
			}#if end
11471
 
11472
		$con=db::dbConnect($conf["db"]["dbConnect"]);
11473
		unset($conf["db"]);
11474
 
11475
		#如果連線到資料庫失敗
11476
		if($con["status"]==="false"){
11477
 
11478
			#設置執行失敗
11479
			$result["status"]="false";
11480
 
11481
			#設置執行錯誤訊息
11482
			$result["error"]=$con;
11483
 
11484
			#回傳結果
11485
			return $result;
11486
 
11487
			}#if end
11488
 
11489
		#var_dump($con);	
11490
 
11491
		#取得mysqli物件
11492
		$mysqli=$con["connectInformation"];
11493
 
11494
		#如果 $conf["WhereColumnAndOr"] 沒有設定,但是有指定判斷條件的欄位
11495
		if(!isset($conf["WhereColumnAndOr"])  && isset($conf["WhereColumnName"])){
11496
 
11497
			#則$conf["WhereColumnAndOr"]爲有 count($conf["WhereColumnName"])-1 個 "AND" 的字串陣列
11498
			for($i=0;$i<(count($conf["WhereColumnName"])-1);$i++){
11499
 
11500
				$conf["WhereColumnAndOr"][$i]="AND";
11501
 
11502
				}#for end
11503
 
11504
			}#if end
11505
 
11506
		#如果 $conf["WhereColumnCombine"] 沒有設定,但是有指定判斷條件的欄位
11507
		if(!isset($conf["WhereColumnCombine"])  && isset($conf["WhereColumnName"])){
11508
 
11509
			#則 $conf["WhereColumnCombine"] 爲有 count($conf["WhereColumnName"]) 個 "" 的字串陣列
11510
			for($i=0;$i<count($conf["WhereColumnName"]);$i++){
11511
 
11512
				$conf["WhereColumnCombine"][$i]="";
11513
 
11514
				}#for end
11515
 
11516
			}#if end
11517
 
11518
		#如果 $conf["WhereColumnOperator"] 沒有設定,但是有設定判斷條件的欄位
11519
		if(!isset($conf["WhereColumnOperator"]) && isset($conf["WhereColumnName"])){
11520
 
11521
			#則 $conf["WhereColumnOperator"] 爲有 count($conf["WhereColumnName"]) 個 "" 的字串陣列
11522
			for($i=0;$i<count($conf["WhereColumnName"]);$i++){
11523
 
11524
				$conf["WhereColumnOperator"][$i]="=";
11525
 
11526
				}#for end
11527
 
11528
			}#if end
11529
 
11530
		#如果 $conf"ascORdesc"] 沒有設定,則不指定遞增或遞減排序
11531
		if(!isset($conf["ascORdesc"])){
11532
 
11533
			#排序變數爲空字串
11534
			$conf["ascORdesc"]="";
11535
 
11536
			}#if end
11537
 
11538
		#如果 $conf["number"] 沒設定,則不限定要取幾筆資料
11539
		if(!isset($conf["number"])){
11540
 
11541
			#限定筆數爲空字串
11542
			$queryStringLimit = "";
11543
 
11544
			}#if end 
11545
 
11546
		#如果 $conf["number"] 不爲空,則限定要取出幾筆
11547
		else{
11548
 
11549
			#如果 $conf["numberStart"] 有設定
11550
			if(isset($conf["numberStart"])){
11551
 
11552
				$queryStringLimit  = " LIMIT ".$conf["numberStart"]." , ".$conf["number"]." ";
11553
 
11554
				}#if end
11555
 
11556
			#反之 $conf["numberStart"] 沒有設定
11557
			else{
11558
 
11559
				$queryStringLimit  = " LIMIT 0 , ".$conf["number"]." ";
11560
 
11561
				}#else end
11562
 
11563
			}#else end
11564
 
11565
		#如果存在 $conf["orderItem"] 
11566
		if(isset($conf["orderItem"])){
11567
 
11568
			#如果排序的依據是 rand() 或 RAND()
11569
			if($conf["orderItem"] == "rand()" || $conf["orderItem"] == "RAND()"){
11570
 
11571
				# 依 $order 為排序依據,進行 隨機 排序
11572
				$queryStringOrder  = " ORDER BY ".$conf["orderItem"]." ".$conf["ascORdesc"]." "; 			
11573
 
11574
				}#if end
11575
 
11576
			#反之 $order 為排序依據
11577
			else{
11578
 
11579
				#爲 acs 或 desc, 依 $order 為排序依據,進行 asc OR desc 排序
11580
				$queryStringOrder  = " ORDER BY ".$conf["orderItem"]." ".$conf["ascORdesc"]." "; 
11581
 
11582
				}#else end
11583
 
11584
			}#if end
11585
 
11586
		#反之 不存在
11587
		else{
11588
 
11589
			#預設為不指定
11590
			$queryStringOrder="";
11591
 
11592
			}#else end
11593
 
11594
		#如果有設定 $conf["WhereColumnName"] 參數
11595
		if(isset($conf["WhereColumnName"])){
11596
 
11597
			#條件判斷的起始語句
11598
			$conf["whereCondition"]="WHERE ";
11599
 
11600
			#有幾個判斷用的欄位就執行幾次
11601
			for($i=0;$i<count($conf["WhereColumnName"]);$i++){
11602
 
11603
				#如果是左掛號
11604
				if($conf["WhereColumnCombine"][$i]=="("){
11605
 
11606
					$conf["whereCondition"]=$conf["whereCondition"]." ".$conf["WhereColumnCombine"][$i]." ";
11607
 
11608
					}#if end
11609
 
11610
				#如果欄位數值不是字串,也不是NULL
11611
				if(gettype($conf["WhereColumnValue"][$i])!=="string" && $conf["WhereColumnValue"][$i]!==NULL){
11612
 
11613
					#設置執行失敗
11614
					$result["status"]="false";
11615
 
11616
					#設置執行錯誤
11617
					$result["error"][]="WhereColumnValue 參數須為陣列字串";
11618
 
11619
					#回傳結果
11620
					return $result;
11621
 
11622
					}#if end
11623
 
11624
				#結合各個條件語句
11625
				$conf["whereCondition"]=$conf["whereCondition"]." `".$conf["WhereColumnName"][$i]."` ";
11626
				$conf["whereCondition"]=$conf["whereCondition"]." ".$conf["WhereColumnOperator"][$i]." ";
11627
				$conf["whereCondition"]=$conf["whereCondition"]." '".mysqli_real_escape_string($mysqli,$conf["WhereColumnValue"][$i])."' ";
11628
 
11629
				#如果右掛號
11630
				if($conf["WhereColumnCombine"][$i]==")"){
11631
 
11632
					$conf["whereCondition"]=$conf["whereCondition"]." ".$conf["WhereColumnCombine"][$i]." ";
11633
 
11634
					}#if end
11635
 
11636
				#如果不是最後一筆項目,就放置AND or OR
11637
				if($i<count($conf["WhereColumnName"])-1){
11638
 
11639
					$conf["whereCondition"]=$conf["whereCondition"]." ".$conf["WhereColumnAndOr"][$i]." ";
11640
 
11641
					}#if end	
11642
 
11643
				}#for end					
11644
 
11645
			}#if end
11646
 
11647
		#反之,套件變數設爲空字串
11648
		else{
11649
 
11650
			$conf["whereCondition"]="";
11651
 
11652
			}#else end
11653
 
11654
		#初始化 where in 語句
11655
		$whereIn=" ";
11656
 
11657
		#如果 $conf["whereIn"] 存在
11658
		if(isset($conf["whereIn"])){
11659
 
11660
			#如果 $conf["whereCondition"] 等於 空
11661
			if($conf["whereCondition"]!==""){
11662
 
11663
				#先加上串接的 AND
11664
				$whereIn=$whereIn."AND ";
11665
 
11666
				}#if end
11667
 
11668
			#反之為第一個where條件
11669
			else{
11670
 
11671
				#設置where開頭
11672
				$whereIn=$whereIn."where ";
11673
 
11674
				}#else end
11675
 
11676
			#針對每個要用 in 條件判斷的語句
11677
			for($i=0;$i<count($conf["whereIn"]);$i++){
11678
 
11679
				#取得要判斷的欄位
11680
				$col=$conf["whereIn"][$i][0];
11681
 
11682
				#加上 in 的開頭語句
11683
				$whereIn=$whereIn."`".$col."` in(";
11684
 
11685
				#針對每個 in 的值
11686
				for($j=0;$j<count($conf["whereIn"][$i][1]);$j++){
11687
 
11688
					#串接條件
11689
					$whereIn=$whereIn."'".mysqli_real_escape_string($mysqli,$conf["whereIn"][$i][1][$j])."'";
11690
 
11691
					#如果不是最後一個條件
11692
					if($j!==count($conf["whereIn"][$i][1])-1){
11693
 
11694
						#後面還有條件
11695
						$whereIn=$whereIn.",";
11696
 
11697
						}#if end
11698
 
11699
					#反之是最後一個條件
11700
					else{
11701
 
11702
						#後面沒有條件
11703
						$whereIn=$whereIn.")";
11704
 
11705
						}#else end
11706
 
11707
					}#for end
11708
 
11709
				}#for end
11710
 
11711
			#如果沒有in的條件
11712
			if($whereIn===" AND `".$col."` in(" OR $whereIn===" AND " OR $whereIn===" " OR $whereIn===" where "){
11713
 
11714
				#設為 ""
11715
				$whereIn="";
11716
 
11717
				}#if end
11718
 
11719
			}#if end
11720
 
11721
		#串接 where in 語句
11722
		$conf["whereCondition"]=$conf["whereCondition"].$whereIn;
11723
 
11724
		#初始化 where not in 語句
11725
		$whereNotIn=" ";	
11726
 
11727
		#如果 $conf["whereNotIn"] 存在
11728
		if(isset($conf["whereNotIn"])){
11729
 
11730
			#如果 $conf["whereCondition"] 等於 空
11731
			if(str_replace(" ","",$conf["whereCondition"])!==""){
11732
 
11733
				#先加上串接的 AND
11734
				$whereNotIn=$whereNotIn."AND ";
11735
 
11736
				}#if end
11737
 
11738
			#反之為第一個where條件
11739
			else{
11740
 
11741
				#設置where開頭
11742
				$whereNotIn=$whereNotIn."where ";
11743
 
11744
				}#else end
11745
 
11746
			#針對每個要用 in 條件判斷的語句
11747
			for($i=0;$i<count($conf["whereNotIn"]);$i++){
11748
 
11749
				#取得要判斷的欄位
11750
				$col=$conf["whereNotIn"][$i][0];
11751
 
11752
				#加上 in 的開頭語句
11753
				$whereNotIn=$whereNotIn."`".$col."` not in(";
11754
 
11755
				#針對每個 in 的值
11756
				for($j=0;$j<count($conf["whereNotIn"][$i][1]);$j++){
11757
 
11758
					#串接條件
11759
					$whereNotIn=$whereNotIn."'".mysqli_real_escape_string($mysqli,$conf["whereNotIn"][$i][1][$j])."'";
11760
 
11761
					#如果不是最後一個條件
11762
					if($j!==count($conf["whereNotIn"][$i][1])-1){
11763
 
11764
						#後面還有條件
11765
						$whereNotIn=$whereNotIn.",";
11766
 
11767
						}#if end
11768
 
11769
					#反之是最後一個條件
11770
					else{
11771
 
11772
						#後面沒有條件
11773
						$whereNotIn=$whereNotIn.")";
11774
 
11775
						}#else end
11776
 
11777
					}#for end
11778
 
11779
				}#for end
11780
 
11781
			#如果沒有in的條件
11782
			if($whereNotIn===" AND `".$col."` not in(" OR $whereNotIn===" AND " OR $whereNotIn===" " OR $whereNotIn===" where "){
11783
 
11784
				#設為 ""
11785
				$whereNotIn="";
11786
 
11787
				}#if end
11788
 
11789
			}#if end
11790
 
11791
		#串接 where not in 語句
11792
		$conf["whereCondition"]=$conf["whereCondition"].$whereNotIn;
11793
 
11794
		#如果 $conf["groupBy"] 有指定
11795
		if(isset($conf["groupBy"])){
11796
 
11797
			#初始化分類語句的字串
11798
			$groupByQueryStr="GROUP BY ";
11799
 
11800
			#設定要以哪些欄位爲分組的依據
11801
			for($i=0;$i<count($conf["groupBy"]);$i++){
11802
 
11803
				#如果不是最後一筆
11804
				if($i!=count($conf["groupBy"])-1){
11805
 
11806
					#語法裡面含有 , 代表還有其他欄位
11807
					$groupByQueryStr=$groupByQueryStr." `".$conf["groupBy"][$i]."` , ";
11808
 
11809
					}#if end
11810
 
11811
				#反之是最後一筆資料
11812
				else{
11813
 
11814
					#語法結尾沒有 , 代表沒有其他欄位
11815
					$groupByQueryStr=$groupByQueryStr." `".$conf["groupBy"][$i]."` ";
11816
 
11817
					}#else end
11818
 
11819
				}#for end
11820
 
11821
			#取得分組的語法
11822
			$conf["groupBy"]=$groupByQueryStr;
11823
 
11824
			}#if end
11825
 
11826
		#如果 $conf["groupBy"] 沒有設定
11827
		else{
11828
 
11829
			#則將其設爲空值
11830
			$conf["groupBy"]="";
11831
 
11832
			}#else end
11833
 
11834
		#要執行的sql語法
11835
		$result["sql"]=$queryStringFinal="SELECT * FROM `".$conf["selectedDataBaseName"]."`.`".$conf["selectedDataTableName"]."` ".$conf["whereCondition"]." ".$conf["groupBy"]." ".$queryStringOrder.$queryStringLimit;
11836
 
11837
		#執行 SQL 語法
11838
		#函式說明:
11839
		#執行mysql指令
11840
		#回傳結果::
11841
		#$result["status"],"true"為執行成功;"false"為執行失敗。
11842
		#$result["error"],錯誤訊息的陣列
11843
		#$result["function"],當前執行的涵式
11844
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
11845
		#$result["queryString"],mysql查詢的語言
11846
		#查詢號的解果,需要解析。
11847
		#必填參數:
11848
		$conf["db::execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
11849
		$conf["db::execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
11850
		$conf["db::execMysqlQuery"]["dbSql"]=$queryStringFinal;#要執行sql語法
11851
		#可省略參數:
11852
 
11853
		#如果 $conf["dbPassword"] 有設定
11854
		if(isset($conf["dbPassword"])){
11855
 
11856
			$conf["db::execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
11857
 
11858
			}#if end
11859
 
11860
		#如果 $conf["dbPort"] 有設定
11861
		if(isset($conf["dbPort"])){
11862
 
11863
			$conf["db::execMysqlQuery"]["dbPort"]=$conf["dbPort"];#爲連線到mysql-Server時要使用的port,可省略,若省略則代表預設的3306.
11864
 
11865
			}#if end
11866
		#$conf["dbLink"],物件,mysqli物件,由mysqli_connect()回傳的物件內容,若為數值則改用賬號密碼等資訊進行連線,反之則沿用連線物件.
11867
		$conf["db::execMysqlQuery"]["dbLink"]=$mysqli;			
11868
		$execMysqlQuery=db::execMysqlQuery($conf["db::execMysqlQuery"]);
11869
		unset($conf["db::execMysqlQuery"]);
11870
 
11871
		#如果執行錯誤
11872
		if($execMysqlQuery["status"]=="false"){
11873
 
11874
			#設置執行錯誤的識別
11875
			$result["status"]="false";
11876
 
11877
			#設置錯誤訊息
11878
			$result["error"]=$execMysqlQuery;
11879
 
11880
			#回傳錯誤訊息
11881
			return $result;
11882
 
11883
			}#if end
11884
 
11885
		#取得查詢後的結果
11886
		$result["sqlQueryResult"]=$execMysqlQuery["queryResource"];
11887
 
11888
		#取得符合條件的資料筆數
11889
		$result["dataCount"]=mysqli_num_rows($execMysqlQuery["queryResource"]);
11890
 
11891
		#執行到這邊代表執行成功
11892
		$result["status"]="true";
11893
 
11894
		#回傳查詢的結果;	
11895
		return $result;	
11896
 
11897
		}#end dataTableSelect
11898
 
11899
	/*
11900
	#函式說明:
11901
	#解析 dataTableSelect($conf) 後的結果,亦即將執行sql語法後所得到的結果解析放進變數裏面
11902
	#回傳結果:
11903
	#$result["status"],執行結果"true"為成功;"false"為失敗
11904
	#$result["error"],錯誤訊息
11905
	#$result["function"],儲存當前函數名稱
11906
	#$result["dataColumnName"],為資料欄位的名稱陣列.
177 liveuser 11907
	#$result["dataColumnName"][$i]代表第一個欄位名稱.
11908
	#$result["dataContent"],爲資料的內容陣列,第1維度的key為$conf["tableValueName"][$i],亦即第 $i+1 個欄位的名稱,若該欄位不存在,則其value為空字串;第2維度的key為第$i+1筆資料的索引.
11909
	#$result["dataCount"],爲取得的資料筆數.
3 liveuser 11910
	#必填參數:
177 liveuser 11911
	#$conf["sqlQueryResult"],object,爲執行sql語法所獲得的查詢結果。
3 liveuser 11912
	$conf["sqlQueryResult"]="";
177 liveuser 11913
	#$conf["tableValueName"],字串陣列,爲該資料表列項目的每一項名稱,須爲陣列值,若為「array("*")」則代表所有欄位.
3 liveuser 11914
	$conf["tableValueName"]=array();
11915
	#可省略參數:
177 liveuser 11916
	#$conf["dbAddress"],字串,爲mysql-Server的位置,目前沒有用途.
11917
	#$conf["dbAddress"]=$dbAddress;
11918
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號,目前沒有用途.
11919
	#$conf["dbAccount"]=$dbAccount;
11920
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼,目前沒有用途.
3 liveuser 11921
	#$conf["dbPassword"]=$dbPassword;
177 liveuser 11922
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,可省略,若省略則代表使用預設的3306 port,目前沒有用途.
3 liveuser 11923
	#$conf["dbPort"]="";
11924
	#$conf["valueName"],字串陣列,爲該資料表列項目的每一項所要對應的變數名稱,預設為欄位的名稱($conf["tableValueName"]).
11925
	#$conf["valueName"]=$conf["tableValueName"];
11926
	#參考資料:
11927
	#http://www.w3school.com.cn/php/func_mysql_fetch_array.asp => 解析取得的資料表欄位時,能夠選擇回傳含有欄位名稱與數字代表的key.
11928
	#備註:
11929
	#無.
11930
	*/
11931
	public static function sendQueryDataToVariabele(&$conf){
11932
 
11933
		#初始化要回傳的內容
11934
		$result=array();
11935
 
11936
		#取得當前執行的函數名稱
11937
		$result["function"]=__FUNCTION__;
11938
 
11939
		#如果 $conf 不為陣列
11940
		if(gettype($conf)!="array"){
11941
 
11942
			#設置執行失敗
11943
			$result["status"]="false";
11944
 
11945
			#設置執行錯誤訊息
11946
			$result["error"][]="\$conf變數須為陣列形態";
11947
 
11948
			#如果傳入的參數為 null
11949
			if($conf==null){
11950
 
11951
				#設置執行錯誤訊息
11952
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
11953
 
11954
				}#if end
11955
 
11956
			#回傳結果
11957
			return $result;
11958
 
11959
			}#if end
11960
 
11961
		#檢查參數
11962
		#函式說明:
11963
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
11964
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
11965
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
11966
		#$result["function"],當前執行的函式名稱.
11967
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
11968
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
11969
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
11970
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
11971
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
11972
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
11973
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
11974
		#必填參數:
11975
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
11976
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
11977
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
177 liveuser 11978
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("sqlQueryResult","tableValueName");
3 liveuser 11979
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
177 liveuser 11980
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("object","array");
3 liveuser 11981
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
11982
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
11983
		#可省略參數:
11984
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
11985
		#$conf["canBeEmptyString"]="false";
11986
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
177 liveuser 11987
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("dbPassword","dbPort","valueName","dbAddress","dbAccount");
3 liveuser 11988
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
177 liveuser 11989
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","array","string","string");
3 liveuser 11990
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
177 liveuser 11991
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null,"\$conf[\"tableValueName\"]",null,null);
3 liveuser 11992
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
11993
		$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("valueName","tableValueName");
11994
		#參考資料:
11995
		#array_keys=>http://php.net/manual/en/function.array-keys.php
11996
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
11997
		unset($conf["variableCheck::checkArguments"]);
177 liveuser 11998
 
3 liveuser 11999
		#如果檢查失敗
12000
		if($checkResult["status"]=="false"){
12001
 
12002
			#設置執行失敗的訊息
12003
			$result["status"]="false";
12004
 
12005
			#設置錯誤訊息
12006
			$result["error"]=$checkResult;
12007
 
12008
			#回傳結果
12009
			return $result;
12010
 
12011
			}#if end
12012
 
12013
		#如果檢查不通過
12014
		if($checkResult["passed"]=="false"){
12015
 
12016
			#設置執行失敗的訊息
12017
			$result["status"]="false";
12018
 
12019
			#設置錯誤訊息
12020
			$result["error"]=$checkResult;
12021
 
12022
			#回傳結果
12023
			return $result;
12024
 
12025
			}#if end
12026
 
12027
		#給予初始值表示從0筆開始統計
12028
		$dataSetNum=0;
12029
 
12030
		#取得資料表的欄位數量
12031
		$columnCounts=count($conf["tableValueName"]);
12032
 
12033
		#初始化識別是否要匯出全部欄位的變數
12034
		$exportAll="false";
12035
 
12036
		#初始化儲存取得的欄位名稱陣列
12037
		$result["dataColumnName"]=array();
12038
 
12039
		#如果剛好只有一個元素
12040
		if($columnCounts==1){
12041
 
12042
			#如果第一個元素為 "*"
12043
			if($conf["tableValueName"][0]=="*"){
12044
 
12045
				#則代表要全部欄位均匯出.
12046
				$exportAll="true";
12047
 
12048
				#初始化計數的變數
12049
				$dataSetNum=0;
12050
 
12051
				#將讀取到的資料一次只讀取一列
12052
				while($row = mysqli_fetch_array($conf["sqlQueryResult"])){
12053
 
12054
					#筆數加1
12055
					$dataSetNum++;
12056
 
12057
					#針對每個欄位
12058
					foreach($row as $columnName => $columnValue){
12059
 
12060
						#取得欄位的內容並用欄位名稱作為key
12061
						$result["dataContent"][$columnName][]=$columnValue;
12062
 
12063
						#如果 $dataSetNum 等於 1
12064
						#亦即第一筆資料
12065
						if($dataSetNum==1 && gettype($columnName)!="integer"){
12066
 
12067
							#取得每個欄位名稱
12068
							$result["dataColumnName"][]=$columnName;
12069
 
12070
							}#if end
12071
 
12072
						}#foreach end
12073
 
12074
					}#while end
12075
 
12076
				#將資料筆數放進 $result["dataCount"] 裏面
12077
				$result["dataCount"]=$dataSetNum;
12078
 
12079
				}#if end
12080
 
12081
			}#if end
12082
 
12083
		#如果 $exportAll 等於 "fasle" 則代表要根據需求匯出指定的欄位.
12084
		if($exportAll=="false"){
12085
 
12086
			#如果 $conf["valueName"] 沒有設置
12087
			if(!isset($conf["valueName"])){
12088
 
12089
				#預設為 $conf["tableValueName"]
12090
				$conf["valueName"]=$conf["tableValueName"];
12091
 
12092
				}#if end
12093
 
12094
			#取得每個欄位名稱
12095
			$result["dataColumnName"]=$conf["tableValueName"];
12096
 
12097
			#將讀取到的資料一次只讀取一列
12098
			while($row = mysqli_fetch_array($conf["sqlQueryResult"])){
12099
 
12100
				#$i筆項列資料,則運行$i次。
177 liveuser 12101
				for($i=0;$i<$columnCounts;$i++){
3 liveuser 12102
 
12103
					#如果欄位不存在
12104
					if(!isset($row[$conf["tableValueName"][$i]])){
12105
 
12106
						#將解析的資料內容用空字串替代放進$result["dataContent"]變數裏面
12107
						$result["dataContent"][$conf["valueName"][$i]][$dataSetNum] = "";
12108
 
12109
						}#if end
12110
 
12111
					#將解析的資料內容結果放進$result["dataContent"]變數裏面
12112
					$result["dataContent"][$conf["valueName"][$i]][$dataSetNum] = $row[$conf["tableValueName"][$i]];	
12113
 
12114
					}#for end
12115
 
12116
				#資料筆數編號加1
12117
				$dataSetNum++;	
12118
 
12119
				}#while end
12120
 
12121
			#將資料筆數放進 $result["dataCount"] 裏面
12122
			$result["dataCount"]=$dataSetNum;
12123
 
12124
			}#if end
12125
 
12126
		#執行道這邊代表執行成功
12127
		$result["status"]="true";
12128
 
12129
		#將取得的結果回傳
12130
		return $result;
12131
 
12132
		}#function sendQueryDataToVariabele end
12133
 
12134
	/*
12135
	#函式說明:
12136
	#一次取得資料庫、表的資料
12137
	#回傳結果:
12138
	#$result["status"],執行結果"true"為成功;"false"為執行失敗。
12139
	#$result["error"],錯誤訊息陣列。
12140
	#$result["function"],當前執行的漢書名稱.
12141
	#$result["argu"],使用的參數.
12142
	#$result["dataColumnName"],抓取的資料欄位名稱陣列.
12143
		#$result["dataColumnName"][$i]代表第$i+1個欄位名稱
12144
	#$result["dataContent"],爲資料的內容。
12145
	#$result["dataContent"][$conf["WhereColumnName"][$i]][$dataSetNum]
12146
		#$dataSetNum 爲第$dataSetNum+1筆資料
12147
		#$conf["WhereColumnName"][$i] 爲第 $i+1 個欄位的名稱
12148
	#$result["dataCount"],爲取得的資料筆數。
12149
	#$result["sql"],執行的sql字串.
12150
	#必填參數:
12151
	#$conf["dbAddress"],字串,爲dbServer的位置。
12152
	$conf["dbAddress"]=$dbAddress;
12153
	#$conf["dbAccount"],字串,爲登入dbServer的帳號。
12154
	$conf["dbAccount"]=$dbAccount;
12155
	#$conf["dbName"],字串,爲要存取的資料庫名稱
12156
	$conf["dbName"]=$dbName;
12157
	#$conf["tableName"],字串,爲要存取的資料表名稱
12158
	$conf["tableName"]="";
12159
	#$conf["columnYouWant"],字串陣列,你想要的欄位!,若設為「array("*")」則代表全部欄位.
12160
	$conf["columnYouWant"]=array();
12161
	#可省略參數:
12162
	#$conf["dbPassword"],字串,爲要存取dbServer的密碼.
12163
	#$conf["dbPassword"]=$dbPassword;
12164
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,可省略,若省略則代表使用預設的3306 port.
12165
	#$conf["dbPort"]="";
12166
	#$conf["WhereColumnName"],字串陣列,用於判斷語句的欄位項目陣列。
12167
	#$conf["WhereColumnName"]=array("");
12168
	#$conf["WhereColumnValue"],字串陣列,用於判斷語句的欄位數值陣列,若與LIKE搭配,則可以在關鍵自字串的左右名加上「%」符號,這樣就可以搜尋具有該字串的內容。
12169
	#$conf["WhereColumnValue"]=array("");
12170
	#$conf["WhereColumnCombine"],字串陣列,用於判斷語句當中需要()起來的判斷式,須爲陣列值,"s"代表「(」,"e"代表「)」 ,若無則須設爲""。
12171
	#$conf["WhereColumnCombine"]=array("");
12172
	#$conf["WhereColumnOperator"],字串陣列,用於判斷語句的比較符號陣列,可以用的符號有「"="、"!="、">"、"<"、"LIKE"、"NOT LIKE"」,預設都爲「=」。
12173
	#$conf["WhereColumnOperator"]=array("");
12174
	#$conf["WhereColumnAndOr"],字串陣列,用於判斷語句條件之間成立的條件是AND還是OR,須爲陣列值。其數量應爲要判斷的欄位數量減一。
12175
	#$conf["WhereColumnAndOr"]=array("");
12176
	#$conf["whereIn"],二維字串陣列,為每個in語句的內容,特定欄位數值等於陣列元素之一。array(array("colName",array("a","b","c")));代表欄位colName的值為a,b,c三者之一.
12177
	#$conf["whereIn"]=array(array("colName",array("a","b","c")));
12178
	#$conf["whereNotIn"],二維字串陣列,為每個not in語句的內容,array(array("colName",array("a","b","c")));代表欄位colName的值不為a,b,c三者之一.
12179
	#$conf["whereNotIn"]=array(array("colName",array("a","b","c")));
12180
	#$conf["orderItem"],字串,爲排序的項目依據,若要用隨機抽樣,可以用"rand()",可省略。
12181
	#$conf["orderItem"]="";
12182
	#$conf["ascORdesc"],字串,爲要低增還是遞減排序,asc爲遞增;desc爲遞減。
12183
	#$conf["ascORdesc"]="";
12184
	#$conf["numberStart"],字串,為從第幾筆開始讀取,預設為0,代筆第一筆。
12185
	#$conf["numberStart"]="0";
12186
	#$conf["numLimit"],字串,為要取幾筆資料,可以省略,省略則表示不限制數目。
12187
	#$conf["numLimit"]="30";
12188
	#$conf["groupBy"],字串陣列,爲要以哪幾個欄爲作爲分羣的依據(欄位相同的數值僅會取出一筆)。
12189
	#$conf["groupBy"]=array("");
12190
	#參考資料:
12191
	#無.
12192
	#備註:
12193
	#無.
12194
	*/
12195
	public static function fastGetDbData(&$conf){
12196
 
12197
		#初始化要回傳的內容
12198
		$result=array();
12199
 
12200
		#取得當前執行的函數名稱
12201
		$result["function"]=__FUNCTION__;
12202
 
12203
		#如果 $conf 不為陣列
12204
		if(gettype($conf)!="array"){
12205
 
12206
			#設置執行失敗
12207
			$result["status"]="false";
12208
 
12209
			#設置執行錯誤訊息
12210
			$result["error"][]="\$conf變數須為陣列形態";
12211
 
12212
			#如果傳入的參數為 null
12213
			if($conf==null){
12214
 
12215
				#設置執行錯誤訊息
12216
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
12217
 
12218
				}#if end
12219
 
12220
			#回傳結果
12221
			return $result;
12222
 
12223
			}#if end
12224
 
12225
		#取得使用的
12226
		$result["argu"]=$conf;
12227
 
12228
		#檢查參數
12229
		#函式說明:
12230
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
12231
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
12232
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
12233
		#$result["function"],當前執行的函式名稱.
12234
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
12235
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
12236
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
12237
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
12238
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
12239
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
12240
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
12241
		#必填參數:
12242
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
12243
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
12244
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
12245
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("dbAddress","dbAccount","dbName","tableName","columnYouWant");
12246
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
12247
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string","string","array");
12248
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
12249
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
12250
		#可省略參數:
12251
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
12252
		#$conf["canBeEmptyString"]="false";
12253
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
12254
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("dbPassword","dbPort","WhereColumnName","WhereColumnValue","WhereColumnCombine","WhereColumnOperator","WhereColumnAndOr","orderItem","ascORdesc","numberStart","numLimit","groupBy","whereIn","whereNotIn");
12255
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
12256
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","array","array","array","array","array","string","string","string","string","array","array","array");
12257
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
12258
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null,null,null,null,null,null,null,null,"0",null,null,null,null);
12259
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
12260
		$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("WhereColumnName","WhereColumnValue");
12261
		$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("WhereColumnValue","WhereColumnOperator");
12262
		#參考資料:
12263
		#array_keys=>http://php.net/manual/en/function.array-keys.php
12264
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
12265
		unset($conf["variableCheck::checkArguments"]);
177 liveuser 12266
 
3 liveuser 12267
		#如果檢查失敗
12268
		if($checkResult["status"]=="false"){
12269
 
12270
			#設置執行失敗的訊息
12271
			$result["status"]="false";
12272
 
12273
			#設置錯誤訊息
12274
			$result["error"]=$checkResult;
12275
 
12276
			#回傳結果
12277
			return $result;
12278
 
12279
			}#if end
12280
 
12281
		#如果檢查不通過
12282
		if($checkResult["passed"]=="false"){
12283
 
12284
			#設置執行失敗的訊息
12285
			$result["status"]="false";
12286
 
12287
			#設置錯誤訊息
12288
			$result["error"]=$checkResult;
12289
 
12290
			#回傳結果
12291
			return $result;
12292
 
12293
			}#if end
12294
 
12295
		#初始化要檢查的欄位
12296
		$colToCheck=array();
12297
 
12298
		#如果有指定要的欄位
12299
		if($conf["columnYouWant"]!==array("*")){
12300
 
12301
			#針對每個欄位
12302
			foreach($conf["columnYouWant"] as $col){
12303
 
12304
				#取得欄位名稱
12305
				$colToCheck[]=$col;
12306
 
177 liveuser 12307
				}#foreach end
3 liveuser 12308
 
12309
			}#if end
12310
 
12311
		#如果有設置
12312
		if(isset($conf["WhereColumnName"])){
12313
 
12314
			#針對每個欄位
12315
			foreach($conf["WhereColumnName"] as $col){
12316
 
12317
				#取得欄位名稱
12318
				$colToCheck[]=$col;
12319
 
177 liveuser 12320
				}#foreach end
3 liveuser 12321
 
12322
			}#if end
12323
 
12324
		#如果有設置 $conf["whereIn"]
12325
		if(isset($conf["whereIn"])){
177 liveuser 12326
 
3 liveuser 12327
			#針對每個 where in 條件
12328
			for($i=0;$i<count($conf["whereIn"]);$i++){
12329
 
12330
				#取得欄位名稱
12331
				$colToCheck[]=$conf["whereIn"][$i][0];
12332
 
12333
				}#for end
12334
 
12335
			}#if end
12336
 
12337
		#如果要檢查的欄位不是空陣列
12338
		if($colToCheck!==array()){
12339
 
12340
			#檢查需要判斷資料表欄位是否存在
12341
			#函式說明:
12342
			#檢查資料表的欄位是否存在
12343
			#回傳結果::
12344
			#設置執行錯誤的識別
12345
			#$result["function"],當前執行的函數名稱.
12346
			#$result["status"],"true"代表執行成功;"false"代表執行失敗.
12347
			#$result["error"],錯誤訊息.
12348
			#$result["warning"],警告訊息陣列
12349
			#$result["passed"],是否通過檢查,"true"代表通過;"false"代表不通過.
12350
			#其餘的結果代表參數不正確
12351
			#必填參數:
12352
			#$conf["dbAddr"],字串,爲mysql-Server的位置
12353
			$conf["db::checkTableColExists"]["dbAddr"]=$conf["dbAddress"]; 
12354
			#$conf["dbAcct"],字串,爲用於連入mysql-Server時要使用的帳號
12355
			$conf["db::checkTableColExists"]["dbAcct"]=$conf["dbAccount"];
12356
			#$conf["dbName"],字串,爲指定的資料庫名稱
12357
			$conf["db::checkTableColExists"]["dbName"]=$conf["dbName"];
12358
			#$conf["dtName"],字串,為要檢查是否存在的資料表名稱
12359
			$conf["db::checkTableColExists"]["dtName"]=$conf["tableName"];
12360
			#$conf["col"],字串陣列,要檢查的欄位名稱.
12361
			$conf["db::checkTableColExists"]["col"]=array_unique($colToCheck);
12362
			#可省略參數
12363
 
12364
			#如果有設置 $conf["dbPassword"]
12365
			if(isset($conf["dbPassword"])){
12366
 
12367
				#$conf["dbPass"],爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼 
12368
				$conf["db::checkTableColExists"]["dbPass"]=$conf["dbPassword"];
12369
 
12370
				}#if end
12371
 
12372
			#如果有設置 $conf["dbPort"]
12373
			if(isset($conf["dbPort"])){
12374
 
12375
				#$conf["dbPort"],爲連線到mysql-Server時要使用的port,可省略,若省略則代表預設的port 3306 
12376
				$conf["db::checkTableColExists"]["dbPort"]=$conf["dbPort"];
12377
 
12378
				}#if end
12379
 
12380
			$checkTableColExists=db::checkTableColExists($conf["db::checkTableColExists"]);
12381
			unset($conf["db::checkTableColExists"]);
12382
 
12383
			#如果檢查失敗
12384
			if($checkTableColExists["status"]==="false"){
12385
 
12386
				#設置執行失敗
12387
				$result["status"]="false";
12388
 
12389
				#設置執行錯誤訊息
12390
				$result["error"]=$checkTableColExists;
12391
 
12392
				#回傳結果
12393
				return $result;
12394
 
12395
				}#if end
12396
 
12397
			#如果檢查不通過
12398
			if($checkTableColExists["passed"]==="false"){
12399
 
12400
				#設置執行失敗
12401
				$result["status"]="false";
12402
 
12403
				#設置執行錯誤訊息
12404
				$result["error"]=$checkTableColExists;
12405
 
12406
				#回傳結果
12407
				return $result;
12408
 
12409
				}#if end
12410
 
12411
			}#if end
12412
 
12413
		#函式說明:
12414
		#dataTableSelectCustom的改良版
12415
		#回傳的參數:
12416
		#$result["status"],執行結果"true"為成功;"false"為執行失敗。
12417
		#$result["error"],錯誤訊息陣列。
12418
		#$result["sql"],執行的sql語法。
12419
		#$result["sqlQueryResult"]#爲資料連線處理完畢之後的結果,需要 sendQueryDataToVariabele 涵式來解析。
12420
		#$result["connectInformation"]#連結到資料庫的資訊。
12421
		#$result["dataCount"]#符合條件的資料筆數
12422
		#必填參數:
12423
		$conf["db"]["dataTableSelectCustomV2"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置。
12424
		$conf["db"]["dataTableSelectCustomV2"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號。
12425
		$conf["db"]["dataTableSelectCustomV2"]["selectedDataBaseName"]=$conf["dbName"];#要選取的資料庫名稱	。
12426
		$conf["db"]["dataTableSelectCustomV2"]["selectedDataTableName"]=$conf["tableName"];#爲欲選擇的資料表名稱。
12427
		#可省略參數:
12428
 
12429
		#如果存在 $conf["dbPassword"]
12430
		if(isset($conf["dbPassword"])){
12431
 
12432
			#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼。
12433
			$conf["db"]["dataTableSelectCustomV2"]["dbPassword"]=$conf["dbPassword"];
12434
 
12435
			}#if end
12436
 
12437
		#如果存在 $conf["dbPort"]
12438
		if(isset($conf["dbPort"])){
12439
 
12440
			#爲連線到mysql-Server時要使用的port,可省略,若省略則代表使用預設的3306 port
12441
			$conf["db"]["dataTableSelectCustomV2"]["dbPort"]=$conf["dbPort"];
12442
 
12443
			}#if end
12444
 
12445
		#如果存在 $conf["WhereColumnCombine"]
12446
		if(isset($conf["WhereColumnCombine"])){
12447
 
12448
			#用於判斷語句當中需要()起來的判斷式,須爲陣列值,"s"代表「(」,"e"代表「)」 ,若無則須設爲""。
12449
			$conf["db"]["dataTableSelectCustomV2"]["WhereColumnCombine"]=$conf["WhereColumnCombine"];
12450
 
12451
			}#if end
12452
 
12453
		#如果 $conf["WhereColumnName"] 存在
12454
		if(isset($conf["WhereColumnName"])){
12455
 
12456
			$conf["db"]["dataTableSelectCustomV2"]["WhereColumnName"]=$conf["WhereColumnName"];#用於判斷語句的欄位項目陣列。
12457
 
12458
			}#if end	
12459
 
12460
		#如果存在 $conf["WhereColumnOperator"]
12461
		if(isset($conf["WhereColumnOperator"])){
12462
 
12463
			#用於判斷語句的比較符號陣列,可以用的符號有「"="、">"、"<"、"LIKE"、"NOT LIKE"」,預設都爲「=」。
12464
			$conf["db"]["dataTableSelectCustomV2"]["WhereColumnOperator"]=$conf["WhereColumnOperator"];
12465
 
12466
			}#if end
12467
 
12468
		#如果 $conf["WhereColumnValue"] 有設置
12469
		if(isset($conf["WhereColumnValue"])){
12470
 
12471
			$conf["db"]["dataTableSelectCustomV2"]["WhereColumnValue"]=$conf["WhereColumnValue"];#用於判斷語句的欄位數值陣列,若與LIKE搭配,則可以在關鍵自字串的左右名加上「%」符號,這樣就可以搜尋具有該字串的內容。
12472
 
12473
			}#if end
12474
 
12475
		#如果 $conf["WhereColumnAndOr"] 存在
12476
		if(isset($conf["WhereColumnAndOr"])){
12477
 
12478
			#用於判斷語句條件之間成立的條件是AND還是OR,須爲陣列值。其數量應爲要判斷的欄位數量減一。
12479
			$conf["db"]["dataTableSelectCustomV2"]["WhereColumnAndOr"]=$conf["WhereColumnAndOr"];
12480
 
12481
			}#if end
12482
 
12483
		#如果 $conf["orderItem"] 存在
12484
		if(isset($conf["orderItem"])){
12485
 
12486
			#爲排序的項目依據,若要用隨機抽樣,可以用"rand()",可省略。
12487
			$conf["db"]["dataTableSelectCustomV2"]["orderItem"]=$conf["orderItem"];
12488
 
12489
			}#if end
12490
 
12491
		#如果 $conf["ascORdesc"] 存在
12492
		if(isset($conf["ascORdesc"])){
12493
 
12494
			#爲要低增還是遞減排序,asc爲遞增;desc爲遞減。
12495
			$conf["db"]["dataTableSelectCustomV2"]["ascORdesc"]=$conf["ascORdesc"];
12496
 
12497
			}#if end
12498
 
12499
		#如果 $conf["numberStart"] 存在
12500
		if(isset($conf["numberStart"])){
12501
 
12502
			$conf["db"]["dataTableSelectCustomV2"]["numberStart"]=$conf["numberStart"];
12503
 
12504
			}#if end
12505
 
12506
		#如果 $conf["numLimit"] 存在
12507
		if(isset($conf["numLimit"])){
12508
 
12509
			#為要取幾筆資料,可以省略,省略則表示不限制數目。
12510
			$conf["db"]["dataTableSelectCustomV2"]["number"]=$conf["numLimit"];
12511
 
12512
			}#if end
12513
 
12514
		#如果 $conf["groupBy"] 存在
12515
		if(isset($conf["groupBy"])){
12516
 
12517
			#爲要以那個欄爲作爲分羣的依據(該欄位相同的數值僅會取出一筆)。
12518
			$conf["db"]["dataTableSelectCustomV2"]["groupBy"]=$conf["groupBy"];
12519
 
12520
			}#if end
12521
 
12522
		#如果 $conf["whereIn"] 存在
12523
		if(isset($conf["whereIn"])){
12524
 
12525
			#where in 條件		
12526
			$conf["db"]["dataTableSelectCustomV2"]["whereIn"]=$conf["whereIn"];
12527
 
12528
			}#if end
12529
 
12530
		#如果 $conf["whereNotIn"] 存在
12531
		if(isset($conf["whereNotIn"])){
177 liveuser 12532
 
12533
			#where not in 條件
3 liveuser 12534
			$conf["db"]["dataTableSelectCustomV2"]["whereNotIn"]=$conf["whereNotIn"];
12535
 
12536
			}#if end
12537
 
12538
		$dataTableSelectCustomV2=db::dataTableSelect($conf["db"]["dataTableSelectCustomV2"]);
12539
		unset($conf["db"]);
177 liveuser 12540
 
3 liveuser 12541
		#如果sql查詢失敗
12542
		#如果 $dataTableSelectCustomV2["status"] 等於 "false"
12543
		if($dataTableSelectCustomV2["status"]=="false"){
12544
 
12545
			#則設置執行錯誤的識別
12546
			$result["status"]="false";
12547
 
12548
			#設置錯誤訊息
12549
			$result["error"]=$dataTableSelectCustomV2;
12550
 
12551
			#回傳結果
12552
			return $result;
12553
 
12554
			}#if end
12555
 
12556
		#取得執行的sql字串
12557
		$result["sql"]=$dataTableSelectCustomV2["sql"];
12558
 
12559
		#解析 dataTableSelect($conf) 後的結果,亦即將執行sql語法後所得到的結果解析放進變數裏面
12560
		#回傳結果:
12561
		#$result["status"],執行結果"true"為成功;"false"為執行失敗。
12562
		#$result["error"],錯誤訊息陣列。
12563
		#$result["dataColumnName"],為資料欄位的名稱陣列.
12564
		#$result["dataColumnName"][$i]代表第一個欄位名稱.
12565
		#$result["dataContent"],爲資料的內容。
12566
		#$result["dataContent"][$conf["tableValueName"][$i]][$dataSetNum],
12567
			#$dataSetNum 爲第$dataSetNum+1筆資料
12568
			#$conf["tableValueName"][$i] 爲第 $i+1 個欄位的名稱
12569
		#$result["dataCount"],爲取得的資料筆數。
12570
		#必填參數:
12571
		$conf["db"]["sendQueryDataToVariabele"]["sqlQueryResult"]=$dataTableSelectCustomV2["sqlQueryResult"];#爲執行sql語法所獲得的查詢結果。
12572
		$conf["db"]["sendQueryDataToVariabele"]["tableValueName"]=$conf["columnYouWant"];#$conf["tableValueName"]=array();#爲該資料表列項目的每一項名稱,須爲陣列值,若為「array("*")」則代表所有欄位.
12573
		$conf["db"]["sendQueryDataToVariabele"]["valueName"]=$conf["columnYouWant"];#爲該資料表列項目的每一項所要對應的變數名稱,須爲陣列值。
12574
		$conf["db"]["sendQueryDataToVariabele"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
12575
		$conf["db"]["sendQueryDataToVariabele"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
12576
		#可省略參數:
12577
 
12578
		#如果存在 $conf["dbPassword"]
12579
		if(isset($conf["dbPassword"])){
12580
 
12581
			#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼。
12582
			$conf["db"]["sendQueryDataToVariabele"]["dbPassword"]=$conf["dbPassword"];
12583
 
12584
			}#if end
12585
 
12586
		#如果存在 $conf["dbPort"]
12587
		if(isset($conf["dbPort"])){
12588
 
12589
			#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表使用預設 port 3306
12590
			$conf["db"]["sendQueryDataToVariabele"]["dbPort"]=$conf["dbPort"];
12591
 
12592
			}#if end
12593
 
12594
		$sendQueryDataToVariabele=db::sendQueryDataToVariabele($conf["db"]["sendQueryDataToVariabele"]);
12595
		unset($conf["db"]);
12596
 
12597
		#如果 $sendQueryDataToVariabele["status"] 等於 "false"
12598
		if($sendQueryDataToVariabele["status"]=="false"){
12599
 
12600
			#設置執行錯誤的識別
12601
			$result["status"]="false";
12602
 
12603
			#設置錯誤訊息
12604
			$result["error"]=$sendQueryDataToVariabele;
12605
 
12606
			#回傳結果
12607
			return $result;
12608
 
12609
			}#if end
12610
 
12611
		#如果 $sendQueryDataToVariabele["dataContent"] 沒有設置
12612
		if(!isset($sendQueryDataToVariabele["dataContent"])){
12613
 
12614
			#那就代表沒有找到符合的資料
12615
			$sendQueryDataToVariabele["dataContent"]=NULL;
12616
 
12617
			#取得抓取到的資料內容
12618
			$result["dataContent"]=$sendQueryDataToVariabele["dataContent"];
12619
 
12620
			}#if end
12621
 
12622
		#反之代表有資料
12623
		else{
12624
 
12625
			#取得抓取到的資料內容
12626
			$result["dataContent"]=$sendQueryDataToVariabele["dataContent"];
12627
 
12628
			#抓取欄位名稱
12629
			$result["dataColumnName"]=$sendQueryDataToVariabele["dataColumnName"];
12630
 
12631
			}#else end
12632
 
12633
		#如果 $sendQueryDataToVariabele["dataCount"] 沒有設定
12634
		if(!isset($sendQueryDataToVariabele["dataCount"])){
12635
 
12636
			#則代表沒有抓到符合的資料
12637
			(int)$sendQueryDataToVariabele["dataCount"]=0;
12638
 
12639
			#取得資料筆數
12640
			$result["dataCount"]=$sendQueryDataToVariabele["dataCount"];
12641
 
12642
			}#if end
12643
 
12644
		#反之代表有符合的資料
12645
		else{
12646
 
12647
			#取得抓取到的資料筆數
12648
			$result["dataCount"]=$sendQueryDataToVariabele["dataCount"];
12649
 
12650
			}#else end
12651
 
12652
		#執行到這邊表示執行成功
12653
		$result["status"]="true";
12654
 
12655
		#回傳結果
12656
		return $result;
12657
 
12658
		}#function fastGetDbData end
12659
 
12660
	/*
12661
	#函式說明:
12662
	#透過一個父資料表取得多個關聯子資料表的資料,並合併成一張表
12663
	#回傳結果:
12664
	#$result["status"],執行結果"true"為成功;"false"為執行失敗。
12665
	#$result["error"],錯誤訊息陣列。
12666
	#$reuslt["function"],當前執行的函數
12667
	#$result["parentTable"]["dataContent"],爲合併了子資料表欄位的父資料表的內容。
12668
	#$result["parentTable"]["dataContent"][$conf["WhereColumnName"][$i]][$dataSetNum]
12669
		#$dataSetNum 爲第$dataSetNum+1筆資料
12670
		#$conf["WhereColumnName"][$i] 爲第 $i+1 個欄位的名稱
12671
	#$result["parentTable"]["dataCount"],爲取得的資料筆數。
12672
	#必填參數:
12673
	#$conf["dbAddress"],字串陣列,爲每個dbServer的位置。
12674
	$conf["dbAddress"]=array($dbAddress);
12675
	#$conf["dbAccount"],字串陣列,爲登入每個dbServer的帳號。
12676
	$conf["dbAccount"]=array($dbAccount);
12677
	#$conf["dbName"],字串陣列,爲每個要存取的資料庫名稱
12678
	$conf["dbName"]=array($dbName);
12679
	#$conf["tableName"],字串陣列,爲每個要存取的資料表名稱,$conf["tableName"][0]為父資料表.
12680
	$conf["tableName"]=array("");
12681
	#$conf["linkColumnName"]=array(array(""));#二維字串陣列,為可以從父表關連到其他資料表的欄位名稱.
12682
		#$conf["linkColumnName"][$i]=array("parentColumnName","childColumnName"),為父資料表的"parentColumnName"欄位跟第$i+1個關聯資料表的"childColumnName"關聯.
12683
	$conf["linkColumnName"]=array(array(""));
12684
	#$conf["columnYouWant"]=array(array(""));#二維字串陣列,為每個資料表依序想要的欄位.
12685
	$conf["columnYouWant"]=array(array(""));#二維字串陣列,為每個資料表依序想要的欄位.
12686
	#可省略參數:
12687
	#$conf["dbPassword"],字串陣列,爲要存取每個dbServer的密碼
12688
	#$conf["dbPassword"]=array($dbPassword);
12689
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,可省略,若省略則代表使用預設的3306 port.
12690
	#$conf["dbPort"]="";
12691
	#$conf["WhereColumnName"],字串陣列,用於判斷語句的欄位項目陣列。
12692
	#$conf["WhereColumnName"]=array("");
12693
	#$conf["WhereColumnValue"],字串陣列,用於判斷語句的欄位數值陣列,若與LIKE搭配,則可以在關鍵自字串的左右名加上「%」符號,這樣就可以搜尋具有該字串的內容。
12694
	#$conf["WhereColumnValue"]=array("");	
12695
	#$conf["WhereColumnCombine"],字串陣列,用於判斷語句當中需要()起來的判斷式,須爲陣列值,"s"代表「(」,"e"代表「)」 ,若無則須設爲""。
12696
	#$conf["WhereColumnCombine"]=array("");
12697
	#$conf["WhereColumnOperator"],字串陣列,用於判斷語句的比較符號陣列,可以用的符號有「"="、">"、"<"、"LIKE"、"NOT LIKE"」,預設都爲「=」。
12698
	#$conf["WhereColumnOperator"]=array("");
12699
	#$conf["WhereColumnAndOr"],字串陣列,用於判斷語句條件之間成立的條件是AND還是OR,須爲陣列值。其數量應爲要判斷的欄位數量減一。
12700
	#$conf["WhereColumnAndOr"]=array("");
12701
	#$conf["whereIn"],二維字串陣列,為每個in語句的內容,特定欄位數值等於陣列元素之一。array(array("colName",array("a","b","c")));代表欄位colName的值為a,b,c三者之一.
12702
	#$conf["whereIn"]=array(array("colName",array("a","b","c")));
12703
	#$conf["whereNotIn"],二維字串陣列,為每個not in語句的內容,array(array("colName",array("a","b","c")));代表欄位colName的值不為a,b,c三者之一.
12704
	#$conf["whereNotIn"]=array(array("colName",array("a","b","c")));
12705
	#$conf["orderItem"],字串,排序的項目依據,若要用隨機抽樣,可以用"rand()",可省略。
12706
	#$conf["orderItem"]="";
12707
	#$conf["ascORdesc"],字串,要低增還是遞減排序,asc爲遞增;desc爲遞減。
12708
	#$conf["ascORdesc"]="";
12709
	#$conf["numberStart"],字串,從第幾筆開始讀取,預設為"0",代筆第一筆。
12710
	#$conf["numberStart"]="0";
12711
	#$conf["numLimit"],字串,要取幾筆資料,可以省略,省略則表示不限制數目。
12712
	#$conf["numLimit"]="30";
12713
	#$conf["groupBy"],字串陣列,爲要以哪幾個欄爲作爲分羣的依據(欄位相同的數值僅會取出一筆)。
12714
	#$conf["groupBy"]=array();
12715
	#參考資料:
12716
	#無.
12717
	#備註:
12718
	#無.
12719
	*/
12720
	public static function fastGetMultiLinkedDbData(&$conf){
12721
 
12722
		#初始化要回傳的內容
12723
		$result=array();
12724
 
12725
		#取得當前執行的函數名稱
12726
		$result["function"]=__FUNCTION__;
12727
 
12728
		#如果 $conf 不為陣列
12729
		if(gettype($conf)!="array"){
12730
 
12731
			#設置執行失敗
12732
			$result["status"]="false";
12733
 
12734
			#設置執行錯誤訊息
12735
			$result["error"][]="\$conf變數須為陣列形態";
12736
 
12737
			#如果傳入的參數為 null
12738
			if($conf==null){
12739
 
12740
				#設置執行錯誤訊息
12741
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
12742
 
12743
				}#if end
12744
 
12745
			#回傳結果
12746
			return $result;
12747
 
12748
			}#if end
12749
 
12750
		#檢查參數
12751
		#函式說明:
12752
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
12753
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
12754
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
12755
		#$result["function"],當前執行的函式名稱.
12756
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
12757
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
12758
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
12759
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
12760
		#必填參數:
12761
		#$conf["variableCheck.checkArguments"]["varInput"],陣列變數,要檢查的陣列變數.
12762
		$conf["variableCheck.checkArguments"]["varInput"]=&$conf;
12763
		#$conf["variableCheck.checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
12764
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableName"]=array("dbAddress","dbAccount","dbName","tableName","linkColumnName","columnYouWant");
12765
		#$conf["variableCheck.checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
12766
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableType"]=array("array","array","array","array","array","array");
12767
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
12768
		$conf["variableCheck.checkArguments"]["referenceVarKey"]="variableCheck.checkArguments";
12769
		#可省略參數:
12770
		#$conf["variableCheck.checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"false"。
12771
		#$conf["variableCheck.checkArguments"]["canBeEmptyString"]="false";
12772
		#$conf["variableCheck.checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
12773
		$conf["variableCheck.checkArguments"]["skipableVariableName"]=array("dbPassword","WhereColumnName","WhereColumnValue","WhereColumnCombine","WhereColumnOperator","WhereColumnAndOr","orderItem","ascORdesc","numberStart","numLimit","groupBy","whereIn","whereNotIn");
12774
		#$conf["variableCheck.checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
12775
		$conf["variableCheck.checkArguments"]["skipableVariableType"]=array("array","array","array","array","array","array","string","string","string","string","array","array","array");
12776
		#$conf["variableCheck.checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定.
12777
		#$conf["variableCheck.checkArguments"]["skipableVarDefaultValue"]=array("");
12778
		$checkResult=variableCheck::checkArguments($conf["variableCheck.checkArguments"]);
12779
		unset($conf["variableCheck.checkArguments"]);
12780
 
12781
		#如果檢查出錯
12782
		if($checkResult["status"]=="false"){
12783
 
12784
			#設置錯誤識別
12785
			$result["status"]="false";
12786
 
12787
			#設置錯誤訊息
12788
			$result["error"]=$checkResult;
12789
 
12790
			#回傳結果
12791
			return $result;
12792
 
12793
			}#if end
12794
 
12795
		#如果檢查出錯
12796
		if($checkResult["passed"]=="false"){
12797
 
12798
			#設置錯誤識別
12799
			$result["status"]="false";
12800
 
12801
			#設置錯誤訊息
12802
			$result["error"]=$checkResult;
12803
 
12804
			#回傳結果
12805
			return $result;
12806
 
12807
			}#if end
12808
 
12809
		#取得父表的資料
12810
		#函式說明:
12811
		#一次取得資料庫、表的資料
12812
		#回傳結果:
12813
		#$result["status"],執行結果"true"為成功;"false"為執行失敗。
12814
		#$result["error"],錯誤訊息陣列。
12815
		#$result["dataContent"],爲資料的內容。
12816
			#$result["dataContent"][$conf["WhereColumnName"][$i]][$dataSetNum]
12817
			#$dataSetNum 爲第$dataSetNum+1筆資料
12818
			#$conf["WhereColumnName"][$i] 爲第 $i+1 個欄位的名稱
12819
		#$result["dataCount"],爲取得的資料筆數。
12820
		#必填參數:
12821
		$conf["db"]["fastGetDbData"]["dbAddress"]=$conf["dbAddress"][0];#爲dbServer的位置。
12822
		$conf["db"]["fastGetDbData"]["dbAccount"]=$conf["dbAccount"][0];#爲登入dbServer的帳號。
12823
		$conf["db"]["fastGetDbData"]["dbName"]=$conf["dbName"][0];#爲要存取的資料庫名稱
12824
		$conf["db"]["fastGetDbData"]["tableName"]=$conf["tableName"][0];#爲要存取的資料表名稱
12825
		$conf["db"]["fastGetDbData"]["columnYouWant"]=$conf["columnYouWant"][0];#你想要的欄位!
12826
		#可省略參數:
12827
 
12828
		#如果 $conf["dbPassword"][0] 有設置
12829
		if(isset($conf["dbPassword"][0])){
12830
 
12831
			$conf["db"]["fastGetDbData"]["dbPassword"]=$conf["dbPassword"][0];#爲要存取dbServer的密碼
12832
 
12833
			}#if end
12834
 
12835
		#如果 $conf["WhereColumnName"] 有設置
12836
		if(isset($conf["WhereColumnName"])){
12837
 
12838
			$conf["db"]["fastGetDbData"]["WhereColumnName"]=$conf["WhereColumnName"];#用於判斷語句的欄位項目陣列。
12839
 
12840
			}#if end
12841
 
12842
		#如果 $conf["WhereColumnValue"] 有設置
12843
		if(isset($conf["WhereColumnValue"])){
177 liveuser 12844
 
3 liveuser 12845
			$conf["db"]["fastGetDbData"]["WhereColumnValue"]=$conf["WhereColumnValue"];#用於判斷語句的欄位數值陣列,若與LIKE搭配,則可以在關鍵自字串的左右名加上「%」符號,這樣就可以搜尋具有該字串的內容。
177 liveuser 12846
 
3 liveuser 12847
			}#if end
12848
 
12849
		#如果 $conf["WhereColumnCombine"] 有設置
12850
		if(isset($conf["WhereColumnCombine"])){
177 liveuser 12851
 
3 liveuser 12852
			$conf["db"]["fastGetDbData"]["WhereColumnCombine"]=$conf["WhereColumnCombine"];#用於判斷語句當中需要()起來的判斷式,須爲陣列值,"s"代表「(」,"e"代表「)」 ,若無則須設爲""。
177 liveuser 12853
 
3 liveuser 12854
			}#if end
12855
 
12856
		#如果 $conf["WhereColumnOperator"] 有設置
12857
		if(isset($conf["WhereColumnOperator"])){
12858
 
12859
			$conf["db"]["fastGetDbData"]["WhereColumnOperator"]=$conf["WhereColumnOperator"];#用於判斷語句的比較符號陣列,可以用的符號有「"="、">"、"<"、"LIKE"、"NOT LIKE"」,預設都爲「=」。
12860
 
12861
			}#if end
12862
 
12863
		#如果 $conf["WhereColumnAndOr"][$i] 有設置
12864
		if(isset($conf["WhereColumnAndOr"])){
12865
 
12866
			$conf["db"]["fastGetDbData"]["WhereColumnAndOr"]=$conf["WhereColumnAndOr"];#用於判斷語句條件之間成立的條件是AND還是OR,須爲陣列值。其數量應爲要判斷的欄位數量減一。
12867
 
12868
			}#if end
12869
 
12870
		#如果 $conf["orderItem"] 有設置
12871
		if(isset($conf["orderItem"])){
12872
 
12873
			$conf["db"]["fastGetDbData"]["orderItem"]=$conf["orderItem"];#爲排序的項目依據,若要用隨機抽樣,可以用"rand()",可省略。
12874
 
12875
			}#if end
12876
 
12877
		#如果 $conf["ascORdesc"] 有設置
12878
		if(isset($conf["ascORdesc"])){
12879
 
12880
			$conf["db"]["fastGetDbData"]["ascORdesc"]=$conf["ascORdesc"];#爲要低增還是遞減排序,asc爲遞增;desc爲遞減。
12881
 
12882
			}#if end
12883
 
12884
		#如果 $conf["numberStart"] 有設置
12885
		if(isset($conf["numberStart"])){
12886
 
12887
			$conf["db"]["fastGetDbData"]["numberStart"]=$conf["numberStart"];#為從第幾筆開始讀取,預設為0,代筆第一筆。
12888
 
12889
			}#if end
12890
 
12891
		#如果 $conf["numLimit"] 有設置
12892
		if(isset($conf["numLimit"])){
12893
 
12894
			$conf["db"]["fastGetDbData"]["numLimit"]=$conf["numLimit"];#為要取幾筆資料,可以省略,省略則表示不限制數目。
12895
 
12896
			}#if end
12897
 
12898
		#如果 $conf["groupBy"] 有設置
12899
		if(isset($conf["groupBy"])){
177 liveuser 12900
 
3 liveuser 12901
			$conf["db"]["fastGetDbData"]["groupBy"]=$conf["groupBy"];#爲要以哪幾個欄爲作爲分羣的依據(欄位相同的數值僅會取出一筆)。
177 liveuser 12902
 
3 liveuser 12903
			}#if end
177 liveuser 12904
 
3 liveuser 12905
		#如果 $conf["whereIn"] 存在
12906
		if(isset($conf["whereIn"])){
177 liveuser 12907
 
12908
			#where in 條件
3 liveuser 12909
			$conf["db"]["fastGetDbData"]["whereIn"]=$conf["whereIn"];
12910
 
12911
			}#if end
12912
 
12913
		#如果 $conf["whereNotIn"] 存在
12914
		if(isset($conf["whereNotIn"])){
177 liveuser 12915
 
3 liveuser 12916
			#where not in 條件	
12917
			$conf["db"]["fastGetDbData"]["whereNotIn"]=$conf["whereNotIn"];
12918
 
12919
			}#if end
177 liveuser 12920
 
3 liveuser 12921
		#儲存到 $result["mainTable"] 陣列裡面
12922
		$result["parentTable"]=db::fastGetDbData($conf["db"]["fastGetDbData"]);
12923
		unset($conf["db"]["fastGetDbData"]);
12924
 
12925
		#如果 $result["mainTable"]["status"] 為 "false"
12926
		if($result["parentTable"]["status"]=="false"){
12927
 
12928
			#取得錯誤訊息
12929
			$result["error"]=$result["parentTable"]["error"];
12930
 
12931
			#設置執行結果為 "false"
12932
			$result["status"]="false";
12933
 
12934
			#回傳結果
12935
			return $result;
12936
 
12937
			}#if end
12938
 
12939
		#根據 $conf["linkColumnName"] 的數量
12940
		for($i=0;$i<count($conf["linkColumnName"]);$i++){
12941
 
12942
			#取得父資料表的關聯欄位名稱
12943
			$parentTableLinkColumnName=$conf["linkColumnName"][$i][0];
12944
 
12945
			#取得子資料表的關聯欄位名稱
12946
			$childTableLinkColumnName=$conf["linkColumnName"][$i][1];
12947
 
12948
			#根據父資料表的資料筆數
12949
			for($j=0;$j<$result["parentTable"]["dataCount"];$j++){
12950
 
12951
				#如果要連結的欄位不在 select 的欄位裡面
12952
				if(!isset($result["parentTable"]["dataContent"][$parentTableLinkColumnName])){
12953
 
12954
					#設置執行錯誤
12955
					$result["status"]="false";
12956
 
12957
					#設置執行錯誤內容
12958
					$result["error"]="欄位 ".$parentTableLinkColumnName." 必須在參數 columnYouWant 裡面.";
12959
 
12960
					#回傳結果
12961
					return $result;
12962
 
12963
					}#if end
12964
 
12965
				#父資料表第$j筆資料關聯欄位的數值內容
12966
				$parentTableLinkColumnValue=$result["parentTable"]["dataContent"][$parentTableLinkColumnName][$j];
12967
 
12968
				#var_dump($parentTableLinkColumnValue);
12969
 
12970
				#根據第$j筆資料的父關聯欄位數值來尋找子關聯資料表的欄位數值
12971
				#函式說明:
12972
				#一次取得資料庫、表的資料
12973
				#回傳結果:
12974
				#$result["status"],執行結果"true"為成功;"false"為執行失敗。
12975
				#$result["error"],錯誤訊息陣列。
12976
				#$result["dataContent"],爲資料的內容。
12977
				#$result["dataContent"][$conf["WhereColumnName"][$i]][$dataSetNum]
12978
					#$dataSetNum 爲第$dataSetNum+1筆資料
12979
					#$conf["WhereColumnName"][$i] 爲第 $i+1 個欄位的名稱
12980
				#$result["dataCount"],爲取得的資料筆數。
12981
				#必填參數:
12982
				$conf["db"]["fastGetDbData"]["dbAddress"]=$conf["dbAddress"][$i+1];#爲dbServer的位置。
12983
				$conf["db"]["fastGetDbData"]["dbAccount"]=$conf["dbAccount"][$i+1];#爲登入dbServer的帳號。
12984
				$conf["db"]["fastGetDbData"]["dbName"]=$conf["dbName"][$i+1];#爲要存取的資料庫名稱
12985
				$conf["db"]["fastGetDbData"]["tableName"]=$conf["tableName"][$i+1];#爲要存取的資料表名稱
12986
				$conf["db"]["fastGetDbData"]["columnYouWant"]=$conf["columnYouWant"][$i+1];#你想要的欄位!
12987
				#可省略參數:
12988
 
12989
				#如果 $conf["dbPassword"][$i+1] 有設定
12990
				if(isset($conf["dbPassword"][$i+1])){
12991
 
12992
					#則設置其連線密碼
12993
					$conf["db"]["fastGetDbData"]["dbPassword"]=$conf["dbPassword"][$i+1];#爲要存取dbServer的密碼
12994
 
12995
					}#if end
12996
 
12997
				#如果 $conf["dbPort"][$i+1] 有設定
12998
				if(isset($conf["dbPort"][$i+1])){
12999
 
13000
					#則設置其連線的 port
13001
					$conf["db"]["fastGetDbData"]["dbPort"]=$conf["dbPort"][$i+1];#爲要存取dbServer的port
13002
 
13003
					}#if end
13004
 
13005
				$conf["db"]["fastGetDbData"]["WhereColumnName"]=array($childTableLinkColumnName);#用於判斷語句的欄位項目陣列。
13006
				$conf["db"]["fastGetDbData"]["WhereColumnValue"]=array($parentTableLinkColumnValue);#用於判斷語句的欄位數值陣列,若與LIKE搭配,則可以在關鍵自字串的左右名加上「%」符號,這樣就可以搜尋具有該字串的內容。
13007
				#$conf["WhereColumnCombine"]=array("");#用於判斷語句當中需要()起來的判斷式,須爲陣列值,"s"代表「(」,"e"代表「)」 ,若無則須設爲""。
13008
				#$conf["WhereColumnOperator"]=array("");#用於判斷語句的比較符號陣列,可以用的符號有「"="、">"、"<"、"LIKE"、"NOT LIKE"」,預設都爲「=」。
13009
				#$conf["WhereColumnAndOr"]=array("");#用於判斷語句條件之間成立的條件是AND還是OR,須爲陣列值。其數量應爲要判斷的欄位數量減一。
13010
				#$conf["orderItem"]="";#爲排序的項目依據,若要用隨機抽樣,可以用"rand()",可省略。
13011
				#$conf["ascORdesc"]="";#爲要低增還是遞減排序,asc爲遞增;desc爲遞減。
13012
				#$conf["numberStart"]="0";#為從第幾筆開始讀取,預設為0,代筆第一筆。
13013
				#$conf["numLimit"]="30";#為要取幾筆資料,可以省略,省略則表示不限制數目。
13014
				#$conf["groupBy"]=array("");#爲要以哪幾個欄爲作爲分羣的依據(欄位相同的數值僅會取出一筆)。
13015
				$childTable[$j]=db::fastGetDbData($conf["db"]["fastGetDbData"]);
13016
				unset($conf["db"]["fastGetDbData"]);
13017
 
13018
				#如果取得資料失敗
13019
				if($childTable[$j]["status"]=="false"){
13020
 
13021
					#取得錯誤訊息
13022
					$result["error"]=$childTable[$j];
13023
 
13024
					#設置執行結果為 "false"
13025
					$result["status"]="false";
13026
 
13027
					#回傳結果
13028
					return $result;
13029
 
13030
					}#if end
13031
 
13032
				#如果 $childTable[$j]["dataContent"] 有設置,則代表有符合的資料
13033
				if(isset($childTable[$j]["dataContent"])){
13034
 
13035
					#針對每個取得的新欄位
13036
					foreach($childTable[$j]["dataContent"] as $newColumnNameArray=>$newColumnNameValue){
13037
 
13038
						#新增第$j筆的欄位名稱與數值
13039
						$result["parentTable"]["dataContent"][$conf["tableName"][$i+1].".".$newColumnNameArray][$j]=$newColumnNameValue[0];
177 liveuser 13040
 
3 liveuser 13041
						}#foreach end
13042
 
13043
					}#if end
13044
 
13045
				#反之代表 $childTable[$j]["dataContent"] 沒有設置,沒有符合的資料
13046
				else{
13047
 
13048
					#根據每個要取得的欄位名稱
13049
					foreach($conf["columnYouWant"][$i+1] as $newColumnName){
13050
 
13051
						#新增第$j筆的欄位名稱與數值
13052
						$result["parentTable"]["dataContent"][$conf["tableName"][$i+1].".".$newColumnName][$j]="";
13053
 
13054
						}#foreach end
13055
 
13056
					}#else end
177 liveuser 13057
 
3 liveuser 13058
				}#for end
13059
 
13060
			}#for end
13061
 
13062
		#執行到這邊代表執行成功
13063
		#設置執行結果為 "true"
13064
		$result["status"]="true";
13065
 
13066
		#回傳結果
13067
		return $result;
13068
 
13069
		}#function fastGetMutiLinkedDbData end
13070
 
13071
	/*
13072
	#函式說明:
13073
	#透過php來join多張資料表資料,提供各個欄位的包含資料庫、資料表、的資訊,會產生sql inner join的效果,資料會越來越多.
13074
	#回傳結果:
13075
	#$result["status"],執行結果"true"為成功;"false"為執行失敗。
13076
	#$result["error"],錯誤訊息陣列。
13077
	#$reuslt["function"],當前執行的函數
13078
	#$result["content"],爲合併了子資料表欄位的父資料表的內容。
13079
	#$result["content"][$conf["WhereColumnName"][$i]][$dataSetNum]
13080
		#$dataSetNum 爲第$dataSetNum+1筆資料
13081
		#$conf["WhereColumnName"][$i] 爲第 $i+1 個欄位的名稱
13082
	#$result["parentTable"]["dataCount"],爲取得的資料筆數。
13083
	#必填參數:
13084
	#$conf["dbInfo"]["資料庫名稱"],字串陣列,爲要存取的"資料庫名稱"的連線資訊.
13085
	#$conf["dbIfno"]["資料庫名稱"]["dbAddr"],字串,dbServer的位置.
13086
	#$conf["dbInfo"]["資料庫名稱"]["dbAddr"]="";
13087
	#$conf["dbIfno"]["資料庫名稱"]["dbAcct"],字串,dbServer的連線帳號.
207 liveuser 13088
	#$conf["dbInfo"]["資料庫名稱"]["dbAcct"]="";
3 liveuser 13089
	#$conf["mainTable"],字串,為 主資料庫.資料表 的名稱,例如 "dbA.dtA".
13090
	$conf["mainTable"]="";
207 liveuser 13091
	#可省略參數:
3 liveuser 13092
	#$conf["linkColumnName"],二字串陣列,為資料表間相連結的欄位名稱,格式為 array("mergedDb.mergedDt.mergedCol","linkDb.linkDt.linkCol") 就代表當前組好的欄位 mergedDb.mergedDt.mergedCol 跟資料庫 linkDB 表 linkDt 欄位 linkCol 進行資料的配對。
207 liveuser 13093
	#$conf["linkColumnName"]=array(array(""));
3 liveuser 13094
	#$conf["dbInfo"]["資料庫名稱"]["dbPass"],字串,dbServer的連線密碼.
13095
	#$conf["dbInfo"]["資料庫名稱"]["dbPass"]="";
13096
	#$conf["dbInfo"]["資料庫名稱"]["dbPort"],字串,db連線用的port.
13097
	#$conf["dbInfo"]["資料庫名稱"]["dbPort"]="";
13098
	#$conf["columnYouWant"],字串陣列,為想要的資料表欄位,格式為 "dbName.dtName.colName".
13099
	#$conf["columnYouWant"]=array();
13100
	#$conf["mainDtWhereColName"],字串陣列,用於主表判斷語句的欄位項目陣列.
13101
	#$conf["mainDtWhereColName"]=array("");
13102
	#$conf["mainDtWhereColVal"]=,字串陣列,用於主表判斷語句的欄位項目數值陣列,若與LIKE搭配,則可以在關鍵自字串的左右名加上「%」符號,這樣就可以搜尋具有該字串的內容.
13103
	#$conf["mainDtWhereColVal"]=array("");
13104
	#$conf["mainDtWhereColCombine"],字串陣列,用於主表判斷語句當中需要()起來的判斷式,須爲陣列值,"s"代表「(」,"e"代表「)」 ,若無則須設爲""。
13105
	#$conf["mainDtWhereColCombine"]=array("");
13106
	#$conf["mainWhereColumnOperator"],字串陣列,用於判斷語句的比較符號陣列,可以用的符號有「"="、">"、"<"、"LIKE"、"NOT LIKE"」,預設都爲「=」。
13107
	#$conf["mainWhereColumnOperator"]=array("");
13108
	#$conf["mainWhereColumnAndOr"],字串陣列,用於判斷語句條件之間成立的條件是AND還是OR,須爲陣列值。其數量應爲要判斷的欄位數量減一。
13109
	#$conf["mainWhereColumnAndOr"]=array("");
13110
	#$conf["mainWhereIn"],字串陣列,為每個in語句的內容,特定欄位數值等於陣列元素之一。array(array("colName",array("a","b","c")));代表欄位colName的值為a,b,c三者之一.
13111
	#$conf["mainWhereIn"]=array(array("colName",array("a","b","c")));
13112
	#$conf["mainWhereNotIn"],字串陣列,為每個not in語句的內容,array(array("colName",array("a","b","c")));代表欄位colName的值不為a,b,c三者之一.
13113
	#$conf["mainWhereNotIn"]=array(array("colName",array("a","b","c")));
13114
	#$conf["mainNumberStart"],字串,從第幾筆開始讀取,預設為"0",代筆第一筆。
13115
	#$conf["mainNumberStart"]="0";
13116
	#$conf["mainNumLimit"],字串,要取幾筆資料,可以省略,省略則表示不限制數目.
13117
	#$conf["mainNumLimit"]="30";
13118
	#$conf["mainGroupBy"],字串陣列,爲要以哪幾個欄爲作爲分羣的依據(欄位相同的數值僅會取出一筆)。
13119
	#$conf["mainGroupBy"]=array();
13120
	#$conf["mainOrderItem"],字串,組好的資料的排序項目依據
13121
	#$conf["mainOrderItem"]="";
13122
	#$conf["mainAscORdesc"],字串,組好的資料要低增還是遞減排序,asc爲遞增;desc爲遞減,預設不做處理.
207 liveuser 13123
	#$conf["mainAscORdesc"]="";
3 liveuser 13124
	#參考資料:
13125
	#無.
13126
	#備註:
13127
	#無.
13128
	*/
13129
	public static function joinByPHP(&$conf=array()){
13130
 
13131
		#初始化要回傳的內容
13132
		$result=array();
13133
 
13134
		#取得當前執行的函數名稱
13135
		$result["function"]=__FUNCTION__;
13136
 
13137
		#如果 $conf 不為陣列
13138
		if(gettype($conf)!="array"){
13139
 
13140
			#設置執行失敗
13141
			$result["status"]="false";
13142
 
13143
			#設置執行錯誤訊息
13144
			$result["error"][]="\$conf變數須為陣列形態";
13145
 
13146
			#如果傳入的參數為 null
13147
			if($conf==null){
13148
 
13149
				#設置執行錯誤訊息
13150
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
13151
 
13152
				}#if end
13153
 
13154
			#回傳結果
13155
			return $result;
13156
 
13157
			}#if end
13158
 
13159
		#檢查參數
13160
		#函式說明:
13161
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
13162
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13163
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
13164
		#$result["function"],當前執行的函式名稱.
13165
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
13166
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
13167
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
13168
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
13169
		#必填參數:
13170
		#$conf["variableCheck.checkArguments"]["varInput"],陣列變數,要檢查的陣列變數.
13171
		$conf["variableCheck.checkArguments"]["varInput"]=&$conf;
13172
		#$conf["variableCheck.checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
13173
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableName"]=array("dbInfo","mainTable","linkColumnName");
13174
		#$conf["variableCheck.checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
13175
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableType"]=array("array","string","array");
13176
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
13177
		$conf["variableCheck.checkArguments"]["referenceVarKey"]="variableCheck.checkArguments";
13178
		#可省略參數:
13179
		#$conf["variableCheck.checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"false"。
13180
		#$conf["variableCheck.checkArguments"]["canBeEmptyString"]="false";
13181
		#$conf["variableCheck.checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
207 liveuser 13182
		$conf["variableCheck.checkArguments"]["skipableVariableName"]=array("linkColumnName","columnYouWant","mainDtWhereColName","mainDtWhereColVal","mainDtWhereColCombine","mainWhereColumnOperator","mainWhereColumnAndOr","mainWhereIn","mainWhereNotIn","mainNumberStart","mainNumLimit","mainGroupBy","mainOrderItem","mainAscORdesc");
3 liveuser 13183
		#$conf["variableCheck.checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
207 liveuser 13184
		$conf["variableCheck.checkArguments"]["skipableVariableType"]=array("array","array","array","array","array","array","array","array","array","string","string","array","string","string");
3 liveuser 13185
		#$conf["variableCheck.checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定.
207 liveuser 13186
		$conf["variableCheck.checkArguments"]["skipableVarDefaultValue"]=array(array(),null,null,null,null,null,null,null,null,null,null,null,null,null);
3 liveuser 13187
		$checkResult=variableCheck::checkArguments($conf["variableCheck.checkArguments"]);
13188
		unset($conf["variableCheck.checkArguments"]);
13189
 
13190
		#如果檢查出錯
13191
		if($checkResult["status"]=="false"){
13192
 
13193
			#設置錯誤識別
13194
			$result["status"]="false";
13195
 
13196
			#設置錯誤訊息
13197
			$result["error"]=$checkResult;
13198
 
13199
			#回傳結果
13200
			return $result;
13201
 
13202
			}#if end
13203
 
13204
		#如果檢查出錯
13205
		if($checkResult["passed"]=="false"){
13206
 
13207
			#設置錯誤識別
13208
			$result["status"]="false";
13209
 
13210
			#設置錯誤訊息
13211
			$result["error"]=$checkResult;
13212
 
13213
			#回傳結果
13214
			return $result;
13215
 
13216
			}#if end
13217
 
13218
		#取得 $conf["mainTable"] 的資料
13219
 
13220
		#檢查主表是否為 db.dt 的
13221
		$foundDot=strpos($conf["mainTable"],'.');
13222
 
13223
		#如果不是
13224
		if(!$foundDot){
13225
 
13226
			#設置錯誤識別
13227
			$result["status"]="false";
13228
 
13229
			#設置錯誤訊息
13230
			$result["error"][]="參數 \$conf[\"mainTable\"] 必須為 資料庫名稱.資料表名稱";
13231
 
13232
			#回傳結果
13233
			return $result;
13234
 
13235
			}#if end
13236
 
13237
		#反之
13238
		else{
13239
 
13240
			#用 . 去切割字串
13241
			$dbdtsplitedstr=explode('.',$conf["mainTable"]);
13242
 
13243
			#如果切割出來不等於兩段
13244
			if(count($dbdtsplitedstr)!==2){
13245
 
13246
				#設置錯誤識別
13247
				$result["status"]="false";
13248
 
13249
				#設置錯誤訊息
13250
				$result["error"][]="參數 \$conf[\"mainTable\"] 必須為 資料庫名稱.資料表名稱";
13251
 
13252
				#回傳結果
13253
				return $result;
13254
 
13255
				}#if end
13256
 
13257
			#取得 mainTable 的 db name
13258
			$mainDb=&$dbdtsplitedstr[0];
13259
 
13260
			#取得 mainTable 的名稱
13261
			$mainDt=&$dbdtsplitedstr[1];
13262
 
13263
			}#else end
13264
 
13265
		#若主資料表連線參數不存在
13266
		if(!isset($conf["dbInfo"][$mainDb])){
13267
 
13268
			#設置錯誤識別
13269
			$result["status"]="false";
13270
 
13271
			#設置錯誤訊息
13272
			$result["error"][]="參數 \$conf[\"dbInfo\"][$mainDb] 必須提供";
13273
 
13274
			#回傳結果
13275
			return $result;
13276
 
13277
			}#if end
13278
 
13279
		#檢查主表的參數
13280
		#函式說明:
13281
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
13282
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13283
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
13284
		#$result["function"],當前執行的函式名稱.
13285
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
13286
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
13287
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
13288
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
13289
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
13290
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
13291
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
13292
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
13293
		#必填參數:
13294
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
13295
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf["dbInfo"][$mainDb];	
13296
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
13297
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
13298
		#可以省略的參數:
13299
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
13300
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("dbAddr","dbAcct");
13301
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
13302
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
13303
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
13304
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
13305
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
13306
		#$conf["canNotBeEmpty"]=array();
13307
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
13308
		#$conf["canBeEmpty"]=array();
13309
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
13310
		$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("dbPass","dbPort");
13311
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
13312
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("dbPass","dbPort");
13313
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
13314
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
13315
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
13316
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null);
13317
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
13318
		#$conf["disallowAllSkipableVarIsEmpty"]="";
13319
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
13320
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
13321
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
13322
		#$conf["arrayCountEqualCheck"][]=array();
13323
		#參考資料:
13324
		#array_keys=>http://php.net/manual/en/function.array-keys.php
13325
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
13326
		unset($conf["variableCheck::checkArguments"]);
13327
 
13328
		#如果執行失敗
13329
		if($checkArguments["status"]==="false"){
13330
 
13331
			#設置錯誤識別
13332
			$result["status"]="false";
13333
 
13334
			#設置錯誤訊息
13335
			$result["error"]=$checkArguments;
13336
 
13337
			#回傳結果
13338
			return $result;
13339
 
13340
			}#if end
13341
 
13342
		#如果檢查不通過
13343
		if($checkArguments["passed"]==="false"){
13344
 
13345
			#設置錯誤識別
13346
			$result["status"]="false";
13347
 
13348
			#設置錯誤訊息
13349
			$result["error"]=$checkArguments;
13350
 
13351
			#回傳結果
13352
			return $result;
13353
 
13354
			}#if end
13355
 
13356
		#函式說明:
13357
		#一次取得資料庫、表的資料
13358
		#回傳結果:
13359
		#$result["status"],執行結果"true"為成功;"false"為執行失敗。
13360
		#$result["error"],錯誤訊息陣列。
13361
		#$result["function"],當前執行的漢書名稱.
13362
		#$result["dataColumnName"],抓取的資料欄位名稱陣列.
13363
			#$result["dataColumnName"][$i]代表第$i+1個欄位名稱
13364
		#$result["dataContent"],爲資料的內容。
13365
		#$result["dataContent"][$conf["WhereColumnName"][$i]][$dataSetNum]
13366
			#$dataSetNum 爲第$dataSetNum+1筆資料
13367
			#$conf["WhereColumnName"][$i] 爲第 $i+1 個欄位的名稱
13368
		#$result["dataCount"],爲取得的資料筆數。
13369
		#$result["sql"],執行的sql字串.
13370
		#必填參數:
13371
		$conf["db::fastGetDbData"]["dbAddress"]=$conf["dbInfo"][$mainDb]["dbAddr"];#爲dbServer的位置。
13372
		$conf["db::fastGetDbData"]["dbAccount"]=$conf["dbInfo"][$mainDb]["dbAcct"];#爲登入dbServer的帳號。
13373
		$conf["db::fastGetDbData"]["dbName"]=$mainDb;#爲要存取的資料庫名稱
13374
		$conf["db::fastGetDbData"]["tableName"]=$mainDt;#爲要存取的資料表名稱
13375
		$conf["db::fastGetDbData"]["columnYouWant"]=array("*");#你想要的欄位!,若設為「array("*")」則代表全部欄位.
13376
		#可省略參數:
13377
 
13378
		#如果有給予連線密碼
13379
		if(isset($conf["dbInfo"][$mainDb]["dbPass"])){
13380
 
13381
			$conf["db::fastGetDbData"]["dbPassword"]=$conf["dbInfo"][$mainDb]["dbPass"];#爲要存取dbServer的密碼
13382
 
13383
			}#if end
13384
 
13385
		#如果有給予連線port
13386
		if(isset($conf["dbInfo"][$mainDb]["dbPort"])){
13387
 
13388
			$conf["db::fastGetDbData"]["dbPort"]=$conf["dbInfo"][$mainDb]["dbPort"];#爲要存取dbServer的port
13389
 
13390
			}#if end
13391
 
13392
		#如果有設置 $conf["mainDtWhereColName"]
13393
		if(isset($conf["mainDtWhereColName"])){
13394
 
13395
			#設置參數
13396
			$conf["db::fastGetDbData"]["WhereColumnName"]=$conf["mainDtWhereColName"];
13397
 
13398
			}#if end
13399
 
13400
		#如果有設置 $conf["mainDtWhereColVal"]
13401
		if(isset($conf["mainDtWhereColVal"])){
13402
 
13403
			#設置參數
13404
			$conf["db::fastGetDbData"]["WhereColumnValue"]=$conf["mainDtWhereColVal"];#用於判斷語句的欄位數值陣列,若與LIKE搭配,則可以在關鍵自字串的左右名加上「%」符號,這樣就可以搜尋具有該字串的內容。
13405
 
13406
			}#if end
13407
 
13408
		#如果有設置 $conf["mainDtWhereColCombine"]
13409
		if(isset($conf["mainDtWhereColCombine"])){
13410
 
13411
			#設置參數
13412
			$conf["db::fastGetDbData"]["WhereColumnCombine"]=$conf["mainDtWhereColCombine"];#用於判斷語句當中需要()起來的判斷式,須爲陣列值,"s"代表「(」,"e"代表「)」 ,若無則須設爲""。
13413
 
13414
			}#if end
13415
 
13416
		#如果有設置 $conf["mainWhereColumnOperator"]
13417
		if(isset($conf["mainWhereColumnOperator"])){
13418
 
13419
			#設置參數
13420
			$conf["db::fastGetDbData"]["WhereColumnOperator"]=$conf["mainWhereColumnOperator"];#用於判斷語句的比較符號陣列,可以用的符號有「"="、"!="、">"、"<"、"LIKE"、"NOT LIKE"」,預設都爲「=」。
13421
 
13422
			}#if end
13423
 
13424
		#如果有設置 $conf["mainWhereColumnAndOr"]
13425
		if(isset($conf["mainWhereColumnAndOr"])){
13426
 
13427
			#設置參數
13428
			$conf["db::fastGetDbData"]["WhereColumnAndOr"]=$conf["mainWhereColumnAndOr"];#用於判斷語句條件之間成立的條件是AND還是OR,須爲陣列值。其數量應爲要判斷的欄位數量減一。
13429
 
13430
			}#if end
13431
 
13432
		#如果有設置 $conf["mainWhereIn"]
13433
		if(isset($conf["mainWhereIn"])){
13434
 
13435
			#$conf["whereIn"],二維字串陣列,為每個in語句的內容,特定欄位數值等於陣列元素之一。array(array("colName",array("a","b","c")));代表欄位colName的值為a,b,c三者之一.
13436
			$conf["db::fastGetDbData"]["whereIn"]=$conf["mainWhereIn"];
13437
 
13438
			}#if end
13439
 
13440
		#如果有設置 $conf["mainWhereNotIn"]
13441
		if(isset($conf["mainWhereNotIn"])){
13442
 
13443
			#設置參數
13444
			#$conf["whereNotIn"],二維字串陣列,為每個not in語句的內容,array(array("colName",array("a","b","c")));代表欄位colName的值不為a,b,c三者之一.
13445
			$conf["db::fastGetDbData"]["whereNotIn"]=$conf["mainWhereNotIn"];
13446
 
13447
			}#if end
13448
 
13449
		#如果有設置 $conf["mainNumberStart"]
13450
		if(isset($conf["mainNumberStart"])){
13451
 
13452
			#設置參數
13453
			$conf["db::fastGetDbData"]["numberStart"]=$conf["mainNumberStart"];#為從第幾筆開始讀取,預設為0,代筆第一筆。
13454
 
13455
			}#if end
13456
 
13457
		#如果有設置 $conf["mainNumLimit"]
13458
		if(isset($conf["mainNumLimit"])){
13459
 
13460
			#設置參數
13461
			$conf["db::fastGetDbData"]["numLimit"]=$conf["mainNumLimit"];#為要取幾筆資料,可以省略,省略則表示不限制數目。
13462
 
13463
			}#if end
13464
 
13465
		#如果有設置 $conf["mainGroupBy"]
13466
		if(isset($conf["mainGroupBy"])){
13467
 
13468
			#設置參數
13469
			$conf["db::fastGetDbData"]["groupBy"]=$conf["mainGroupBy"];#爲要以哪幾個欄爲作爲分羣的依據(欄位相同的數值僅會取出一筆)。
13470
 
13471
			}#if end
13472
 
13473
		#如果有設置 $conf["mainOrderItem"]
13474
		if(isset($conf["mainOrderItem"])){
13475
 
13476
			#設置參數
13477
			$conf["db::fastGetDbData"]["orderItem"]=$conf["mainOrderItem"];#爲排序的項目依據,若要用隨機抽樣,可以用"rand()",可省略。
207 liveuser 13478
 
3 liveuser 13479
			}#if end
13480
 
13481
		#如果有設置 $conf["mainAscORdesc"]
13482
		if(isset($conf["mainAscORdesc"])){
13483
 
13484
			#設置參數
13485
			#$conf["mainAscORdesc"],字串,組好的資料要低增還是遞減排序,asc爲遞增;desc爲遞減,預設不做處理.
13486
			$conf["db::fastGetDbData"]["mainAscORdesc"]=$conf["mainAscORdesc"];
13487
 
13488
			}#if end
13489
 
13490
		$fastGetDbData=db::fastGetDbData($conf["db::fastGetDbData"]);
13491
		unset($conf["db::fastGetDbData"]);
13492
 
13493
		#如果執行失敗
13494
		if($fastGetDbData["status"]==="false"){
13495
 
13496
			#設置錯誤識別
13497
			$result["status"]="false";
13498
 
13499
			#設置錯誤訊息
13500
			$result["error"]=$fastGetDbData;
13501
 
13502
			#回傳結果
13503
			return $result;
13504
 
13505
			}#if end
13506
 
13507
		#var_dump($fastGetDbData);
13508
 
13509
		#初始化儲存合併好的資料
13510
		$merged=array();
13511
 
13512
		#如果該存在的變數不存在
13513
		if(!isset($fastGetDbData["dataColumnName"])){
13514
 
13515
			#設置錯誤識別
13516
			$result["status"]="false";
13517
 
13518
			#設置錯誤訊息
13519
			$result["error"]=$fastGetDbData;
13520
 
13521
			#回傳結果
13522
			return $result;
13523
 
13524
			}#if end
13525
 
13526
		#針對每個欄位
13527
		foreach($fastGetDbData["dataColumnName"] as $colName){
13528
 
13529
			#將當前資料的欄位用 dbName.dtName.dataColName 儲存
13530
			$merged[$mainDb.".".$mainDt.".".$colName]=$fastGetDbData["dataContent"][$colName];
13531
 
13532
			}#foreach end
13533
 
13534
		#移除變數節省記憶體
13535
		unset($fastGetDbData);
13536
 
13537
		#取得陣列元素數目
13538
		$mergedCount=count($merged);
13539
 
13540
		#移除以數字為欄位索引的變數
13541
		for($i=0;$i<$mergedCount/2;$i++){
13542
 
13543
			#移除索引
13544
			unset($merged[$i]);
13545
 
13546
			}#for end
13547
 
13548
		#var_dump($merged);exit;
207 liveuser 13549
 
3 liveuser 13550
		#針對每個 $conf["linkColumnName"] 
13551
		foreach($conf["linkColumnName"] as $linkCondition){
13552
 
13553
			#如果不是陣列
13554
			if(gettype($linkCondition)!=="array"){
13555
 
13556
				#設置錯誤識別
13557
				$result["status"]="false";
13558
 
13559
				#設置錯誤訊息
13560
				$result["error"][]="參數 linkColumnName 的陣列元素應該為陣列.";
13561
 
13562
				#回傳結果
13563
				return $result;
13564
 
13565
				}#if end
13566
 
13567
			#如果數量不為2
13568
			if(count($linkCondition)!==2){
13569
 
13570
				#設置錯誤識別
13571
				$result["status"]="false";
13572
 
13573
				#設置錯誤訊息
13574
				$result["error"][]="參數 linkColumnName 的陣列元素應為有兩個元素的陣列.";
13575
 
13576
				#回傳結果
13577
				return $result;
13578
 
13579
				}#if end
13580
 
13581
			#取得原始欄位的名稱
13582
			$oriCol=&$linkCondition[0];	
13583
 
13584
			#如果用來比對的原欄位不存在
13585
			if(!isset($merged[$oriCol])){
13586
 
13587
				#設置錯誤識別
13588
				$result["status"]="false";
13589
 
13590
				#設置錯誤訊息
13591
				$result["error"][]="用來比對的原始資料沒有欄位 「".$oriCol."」 存在.";
13592
 
13593
				#回傳結果
13594
				return $result;
13595
 
13596
				}#if end
13597
 
13598
			#取得要增加的欄位名稱
13599
			$newCol=&$linkCondition[1];	
13600
 
13601
			#檢查增加的欄位名稱是否有 "."
13602
			$foundDot=strpos($newCol,'.');
13603
 
13604
			#如果不是
13605
			if(!$foundDot){
13606
 
13607
				#設置錯誤識別
13608
				$result["status"]="false";
13609
 
13610
				#設置錯誤訊息
13611
				$result["error"][]="參數 linkColumnName 的欄位格式 ".$newCol." 必須為 資料庫名稱.資料表名稱.資料欄位名稱";
13612
 
13613
				#回傳結果
13614
				return $result;
13615
 
13616
				}#if end
13617
 
13618
			#反之
13619
			else{
13620
 
13621
				#用 . 去切割字串
13622
				$dbdtsplitedstr=explode('.',$newCol);
13623
 
13624
				#如果切割出來不等於兩段
13625
				if(count($dbdtsplitedstr)!==3){
13626
 
13627
					#設置錯誤識別
13628
					$result["status"]="false";
13629
 
13630
					#設置錯誤訊息
13631
					$result["error"][]="參數 linkColumnName 的欄位格式 ".$newCol." 必須為 資料庫名稱.資料表名稱.資料欄位名稱";
13632
 
13633
					#回傳結果
13634
					return $result;
13635
 
13636
					}#if end
13637
 
13638
				#取得 linkTable 的 db name
13639
				$linkDb=&$dbdtsplitedstr[0];
13640
 
13641
				#取得 linkTable 的名稱
13642
				$linkDt=&$dbdtsplitedstr[1];
13643
 
13644
				#取得 linkCol 的名稱
13645
				$linkCol=&$dbdtsplitedstr[2];
13646
 
13647
				}#else end
13648
 
13649
			#檢查次表的參數
13650
			#函式說明:
13651
			#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
13652
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13653
			#$reuslt["error"],執行不正常結束的錯訊息陣列.
13654
			#$result["function"],當前執行的函式名稱.
13655
			#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
13656
			#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
13657
			#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
13658
			#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
13659
			#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
13660
			#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
13661
			#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
13662
			#$result["notNeedVar"],字串陣列,多餘的參數名稱.
13663
			#必填參數:
13664
			#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
13665
			$conf["variableCheck::checkArguments"]["varInput"]=&$conf["dbInfo"][$linkDb];	
13666
			#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
13667
			$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
13668
			#可以省略的參數:
13669
			#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
13670
			$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("dbAddr","dbAcct");
13671
			#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
13672
			$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
13673
			#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
13674
			$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
13675
			#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
13676
			#$conf["canNotBeEmpty"]=array();
13677
			#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
13678
			#$conf["canBeEmpty"]=array();
13679
			#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
13680
			$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("dbPass");
13681
			#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
13682
			$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("dbPass");
13683
			#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
13684
			$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
13685
			#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
13686
			$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null);
13687
			#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
13688
			#$conf["disallowAllSkipableVarIsEmpty"]="";
13689
			#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
13690
			#$conf["disallowAllSkipableVarIsEmptyArray"]="";
13691
			#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
13692
			#$conf["arrayCountEqualCheck"][]=array();
13693
			#參考資料:
13694
			#array_keys=>http://php.net/manual/en/function.array-keys.php
13695
			$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
13696
			unset($conf["variableCheck::checkArguments"]);
13697
 
13698
			#var_dump($checkArguments);
13699
			#exit;
13700
 
13701
			#如果執行失敗
13702
			if($checkArguments["status"]==="false"){
13703
 
13704
				#設置錯誤識別
13705
				$result["status"]="false";
13706
 
13707
				#設置錯誤訊息
13708
				$result["error"]=$checkArguments;
13709
 
13710
				#回傳結果
13711
				return $result;
13712
 
13713
				}#if end
13714
 
13715
			#如果檢查不通過
13716
			if($checkArguments["passed"]==="false"){
13717
 
13718
				#設置錯誤識別
13719
				$result["status"]="false";
13720
 
13721
				#設置錯誤訊息
13722
				$result["error"]=$checkArguments;
13723
 
13724
				#回傳結果
13725
				return $result;
13726
 
13727
				}#if end
13728
 
13729
			#初始化新合併過後的資料
13730
			$newMerged=&$merged;
13731
 
13732
			#初始化儲存既有的欄位名稱
13733
			$mergedColName=array_keys($merged);
13734
 
13735
			#取得既有的欄位的數量
207 liveuser 13736
			$mergedColCount=count($mergedColName);
13737
 
3 liveuser 13738
			#主表有幾筆資料就執行幾次
13739
			foreach($merged[$oriCol] as $index=>$mainColVal){
13740
 
13741
				#函式說明:
13742
				#一次取得資料庫、表的資料
13743
				#回傳結果:
13744
				#$result["status"],執行結果"true"為成功;"false"為執行失敗。
13745
				#$result["error"],錯誤訊息陣列。
13746
				#$result["function"],當前執行的漢書名稱.
13747
				#$result["dataColumnName"],抓取的資料欄位名稱陣列.
13748
					#$result["dataColumnName"][$i]代表第$i+1個欄位名稱
13749
				#$result["dataContent"],爲資料的內容。
13750
				#$result["dataContent"][$conf["WhereColumnName"][$i]][$dataSetNum]
13751
					#$dataSetNum 爲第$dataSetNum+1筆資料
13752
					#$conf["WhereColumnName"][$i] 爲第 $i+1 個欄位的名稱
13753
				#$result["dataCount"],爲取得的資料筆數。
13754
				#$result["sql"],執行的sql字串.
13755
				#必填參數:
13756
				$conf["db::fastGetDbData"]["dbAddress"]=$conf["dbInfo"][$linkDb]["dbAddr"];#爲dbServer的位置。
13757
				$conf["db::fastGetDbData"]["dbAccount"]=$conf["dbInfo"][$linkDb]["dbAcct"];#爲登入dbServer的帳號。
13758
				$conf["db::fastGetDbData"]["dbName"]=$linkDb;#爲要存取的資料庫名稱
13759
				$conf["db::fastGetDbData"]["tableName"]=$linkDt;#爲要存取的資料表名稱
13760
				$conf["db::fastGetDbData"]["columnYouWant"]=array("*");#你想要的欄位!,若設為「array("*")」則代表全部欄位.
13761
				#可省略參數:
13762
 
13763
				#如果有設置次表的密碼
13764
				if(isset($conf["dbInfo"][$linkDb]["dbPass"])){
13765
 
13766
					$conf["db::fastGetDbData"]["dbPassword"]=$conf["dbInfo"][$linkDb]["dbPass"];#爲要存取dbServer的密碼
13767
 
207 liveuser 13768
					}#if end
3 liveuser 13769
 
13770
				$conf["db::fastGetDbData"]["WhereColumnName"]=array($linkCol);#用於判斷語句的欄位項目陣列。
13771
				$conf["db::fastGetDbData"]["WhereColumnValue"]=array($mainColVal);#用於判斷語句的欄位數值陣列,若與LIKE搭配,則可以在關鍵自字串的左右名加上「%」符號,這樣就可以搜尋具有該字串的內容。
13772
				#$conf["WhereColumnCombine"]=array("");#用於判斷語句當中需要()起來的判斷式,須爲陣列值,"s"代表「(」,"e"代表「)」 ,若無則須設爲""。
13773
				#$conf["WhereColumnOperator"]=array("");#用於判斷語句的比較符號陣列,可以用的符號有「"="、"!="、">"、"<"、"LIKE"、"NOT LIKE"」,預設都爲「=」。
13774
				#$conf["WhereColumnAndOr"]=array("");#用於判斷語句條件之間成立的條件是AND還是OR,須爲陣列值。其數量應爲要判斷的欄位數量減一。
13775
				#$conf["whereIn"],二維字串陣列,為每個in語句的內容,特定欄位數值等於陣列元素之一。array(array("colName",array("a","b","c")));代表欄位colName的值為a,b,c三者之一.
13776
				#$conf["whereIn"]=array(array("colName",array("a","b","c")));
13777
				#$conf["whereNotIn"],二維字串陣列,為每個not in語句的內容,array(array("colName",array("a","b","c")));代表欄位colName的值不為a,b,c三者之一.
13778
				#$conf["whereNotIn"]=array(array("colName",array("a","b","c")));
13779
				#$conf["orderItem"]="";#爲排序的項目依據,若要用隨機抽樣,可以用"rand()",可省略。
13780
				#$conf["ascORdesc"]="";#爲要低增還是遞減排序,asc爲遞增;desc爲遞減。
13781
				#$conf["numberStart"]="0";#為從第幾筆開始讀取,預設為0,代筆第一筆。
13782
				#$conf["db::fastGetDbData"]["numLimit"]="1";#為要取幾筆資料,可以省略,省略則表示不限制數目。
13783
				#$conf["groupBy"]=array("");#爲要以哪幾個欄爲作爲分羣的依據(欄位相同的數值僅會取出一筆)。
13784
				$fastGetDbData=db::fastGetDbData($conf["db::fastGetDbData"]);
13785
				unset($conf["db::fastGetDbData"]);
13786
 
13787
				#如果query失敗
13788
				if($fastGetDbData["status"]==="false"){
13789
 
13790
					#設置執行失敗
13791
					$result["status"]="false";
13792
 
13793
					#設置錯誤訊息
13794
					$result["error"]=$fastGetDbData;
13795
 
13796
					#回傳結果;
13797
					return $result;
13798
 
13799
					}#if end
13800
 
13801
				#如果如果沒有符合的資料
13802
				if($fastGetDbData["dataCount"]===0){
13803
 
13804
					#如果有欄位名稱存在
13805
					if(isset($fastGetDbData["dataColumnName"])){
13806
 
13807
						#次表有幾個欄位就執行幾次
13808
						foreach($fastGetDbData["dataColumnName"] as $linkedColName){
13809
 
13810
							#給予NULL
13811
							$newMerged[$linkDb.".".$linkDt.".".$linkedColName][$index]=NULL;
13812
 
207 liveuser 13813
							}#foreach end
3 liveuser 13814
 
13815
						}#if end
13816
 
13817
					}#if end
13818
 
13819
				#反之有資料
13820
				else{
13821
 
13822
					#次表有幾個欄位就執行幾次
13823
					foreach($fastGetDbData["dataColumnName"] as $linkedColName){
13824
 
13825
						#設置新的欄位資料
13826
						$newMerged[$linkDb.".".$linkDt.".".$linkedColName][$index]=$fastGetDbData["dataContent"][$linkedColName][0];
13827
 
13828
						}#foreach end
13829
 
13830
					#有幾筆資料就執行幾次
13831
					for($i=1;$i<$fastGetDbData["dataCount"];$i++){
13832
 
13833
						#取得資新料的索引
13834
						$newMergedDataIndex=count($newMerged[$mergedColName[0]]);
13835
 
13836
						#有幾個欄位就執行幾次
13837
						for($j=0;$j<$mergedColCount;$j++){
13838
 
13839
							#複製既有的欄位資料
13840
							$newMerged[$mergedColName[$j]][$newMergedDataIndex]=$newMerged[$mergedColName[$j]][$index];
13841
 
207 liveuser 13842
							}#for end
3 liveuser 13843
 
13844
						#次表有幾個欄位就執行幾次
13845
						foreach($fastGetDbData["dataColumnName"] as $linkedColName){	
13846
 
13847
							#加上新的欄位資料
13848
							$newMerged[$linkDb.".".$linkDt.".".$linkedColName][$newMergedDataIndex]=$fastGetDbData["dataContent"][$linkedColName][$i];
207 liveuser 13849
 
3 liveuser 13850
							}#foreach end
13851
 
207 liveuser 13852
						}#for end
3 liveuser 13853
 
13854
					}#else end
13855
 
13856
				}#foreach end
207 liveuser 13857
 
3 liveuser 13858
			}#foreach end
13859
 
13860
		#如果有設置要的欄位
13861
		if(isset($conf["columnYouWant"])){
13862
 
13863
			#初始化儲存僅需要的欄位
13864
			$filteredCol=array();
13865
 
13866
			#依照每個需要的欄位
13867
			foreach($conf["columnYouWant"] as $colYouWant){
13868
 
13869
				#如果要的欄位不存在
13870
				if(!isset($newMerged[$colYouWant])){
13871
 
13872
					#設置執行不正常;  
13873
					$result["status"]="false";
13874
 
13875
					#設置錯誤訊息
13876
					$result["error"][]="欄位 ".$colYouWant." 不存在於查詢後的結果!";
13877
 
13878
					#回傳結果
13879
					return $result;
13880
 
13881
					}#if end
13882
 
13883
				#取得欄位內容
13884
				$filteredCol[$colYouWant]=&$newMerged[$colYouWant];
13885
 
13886
				}#foreach end
13887
 
13888
			#置換成篩選過後的欄位資訊
13889
			$newMerged=$filteredCol;
13890
 
13891
			}#if end
13892
 
13893
		#設置執行正常
13894
		$result["status"]="true";
13895
 
13896
		#設置join完的資料;
13897
		$result["content"]=$merged;
13898
 
13899
		#回傳結果
13900
		return $result;
13901
 
13902
		}#function joinByPHP end
13903
 
13904
	/*
13905
	#函式說明:
13906
	#取得該資料表總共有幾筆資料
13907
	#回傳變數:
13908
	#$result["status"],爲執行是否正常,若爲"true"則成功,若爲"false"則表示失敗了
13909
	#$result["function"],當前執行的函數名稱
13910
	#$result["error"],錯誤訊息
13911
	#$result["dataCount"],資料表裏面的資料筆數。
13912
	#必填參數:
13913
	#$conf["dbAddress"],字串,爲mysql-Server的位置.
13914
	$conf["dbAddress"]=$dbAddress;
13915
	#$conf["dbAccount"]字串,爲用於連入mysql-Server時要使用的帳號.
13916
	$conf["dbAccount"]=$dbAccount;
13917
	#$conf["selectedDataBaseName"],字串,要選取的資料庫名稱	
13918
	$conf["selectedDataBaseName"]=$dbName;
13919
	#$conf["selectedDataTableName"],字串,為要計算的對象資料表
13920
	$conf["selectedDataTableName"]="";#為要計算的對象資料表
13921
	#可省略參數:
13922
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼.
13923
	#$conf["dbPassword"]=$dbPassword;
13924
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,可省略,若省略則代表用預設的 port 3306.
13925
	#$conf["dbPort"]=$dbPort;
13926
	#參考資料:
13927
	#無.
13928
	#備註:
13929
	#無.
13930
	*/	
13931
	public static function getDataCountsInTable($conf){
13932
 
13933
		#初始化要回傳的內容
13934
		$result=array();
13935
 
13936
		#取得當前執行的函數名稱
13937
		$result["function"]=__FUNCTION__;
13938
 
13939
		#如果 $conf 不為陣列
13940
		if(gettype($conf)!="array"){
13941
 
13942
			#設置執行失敗
13943
			$result["status"]="false";
13944
 
13945
			#設置執行錯誤訊息
13946
			$result["error"][]="\$conf變數須為陣列形態";
13947
 
13948
			#如果傳入的參數為 null
13949
			if($conf==null){
13950
 
13951
				#設置執行錯誤訊息
13952
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
13953
 
13954
				}#if end
13955
 
13956
			#回傳結果
13957
			return $result;
13958
 
13959
			}#if end
13960
 
13961
		#檢查參數
13962
		#函式說明:
13963
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
13964
		#回傳結果:
13965
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13966
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
13967
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
13968
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
13969
		#必填參數:
13970
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
13971
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("dbAddress","dbPassword","selectedDataBaseName","selectedDataTableName");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
13972
		#可省略參數:
13973
		#$conf["variableCheck"]["isexistMuti"]["variableType"]=array();#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
13974
		#$conf["variableCheck"]["isexistMuti"]"canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
13975
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
13976
		unset($conf["variableCheck"]["isexistMuti"]);
13977
 
13978
		#如果 $checkResult["status"] 等於 "false"
13979
		if($checkResult["status"]=="false"){
13980
 
13981
			#設置錯識別
13982
			$result["status"]="false";
13983
 
13984
			#設置錯誤訊息
13985
			$result["error"]=$checkResult;
13986
 
13987
			#回傳結果
13988
			return $result;
13989
 
13990
			}#if end
13991
 
13992
		#如果 $checkResult["passed"] 等於 "false"
13993
		if($checkResult["passed"]=="false"){
13994
 
13995
			#設置錯識別
13996
			$result["passed"]="false";
13997
 
13998
			#設置錯誤訊息
13999
			$result["error"]=$checkResult;
14000
 
14001
			#回傳結果
14002
			return $result;
14003
 
14004
			}#if end
14005
 
14006
		#函式說明:
14007
		#執行mysql指令
14008
		#回傳結果::
14009
		#$result["status"],"true"為執行成功;"false"為執行失敗。
14010
		#$result["error"],錯誤訊息的陣列
14011
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
14012
		#$result["queryString"],mysql查詢的語言
14013
		#查詢號的解果,需要解析。
14014
		#必填參數:
14015
		$conf["db"]["execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
14016
		$conf["db"]["execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
14017
		$conf["db"]["execMysqlQuery"]["dbSql"]="select count(*) from ".$conf["selectedDataBaseName"].".".$conf["selectedDataTableName"]." ;";#要執行sql語法
14018
		#可省略參數:
14019
 
14020
		#如果 $conf["dbPassword"] 有設定
14021
		if(isset($conf["dbPassword"])){
14022
 
14023
			$conf["db"]["execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
14024
 
14025
			}#if end
14026
 
14027
		#如果 $conf["dbPort"] 有設定
14028
		if(isset($conf["dbPort"])){
14029
 
14030
			$conf["db"]["execMysqlQuery"]["dbPort"]=$conf["dbPort"];#爲連線到mysql-Server時要使用的port,可省略,若省略則代表預設的 port.
14031
 
14032
			}#if end
14033
 
14034
		#執行查尋	
14035
		$countResult=db::execMysqlQuery($conf["db"]["execMysqlQuery"]);
14036
		unset($conf["db"]["execMysqlQuery"]);
14037
 
14038
		#如果執行失敗
14039
		if($countResult["status"]=="false"){
14040
 
14041
			#設置錯誤識別
14042
			$result["status"]="false";
14043
 
14044
			#設置錯誤訊息
14045
			$result["error"]=$countResult;
14046
 
14047
			#回傳結果
14048
			return $result;
14049
 
14050
			}#if end
14051
 
14052
		#解析 dataTableSelect($conf) 後的結果,亦即將執行sql語法後所得到的結果解析放進變數裏面
14053
		#回傳結果:
14054
		#$result["status"],執行結果"true"為成功;"false"為失敗
14055
		#$result["error"],錯誤訊息
14056
		#$result["dataColumnName"],為資料欄位的名稱陣列.
14057
			#$result["dataColumnName"][$i]代表第一個欄位名稱.
14058
		#$result["dataContent"],爲資料的內容。
14059
		#$result["dataContent"][$conf["tableValueName"][$i]][$dataSetNum],
14060
			#$dataSetNum 爲第$dataSetNum+1筆資料
14061
			#$conf["tableValueName"][$i] 爲第 $i+1 個欄位的名稱
14062
		#$result["dataCount"],爲取得的資料筆數。
14063
		#必填參數:
14064
		$conf["db"]["sendQueryDataToVariabele"]["sqlQueryResult"]=$countResult["queryResource"];#爲執行sql語法所獲得的查詢結果。
14065
		$conf["db"]["sendQueryDataToVariabele"]["tableValueName"]=array("count(*)");#爲該資料表列項目的每一項名稱,須爲陣列值,若為「array("*")」則代表所有欄位.
14066
		$conf["db"]["sendQueryDataToVariabele"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
14067
		$conf["db"]["sendQueryDataToVariabele"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
14068
		#可省略參數:
14069
 
14070
		#如果 $conf["dbPassword"] 有設置
14071
		if(isset($conf["dbPassword"])){
14072
 
14073
			$conf["db"]["sendQueryDataToVariabele"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
14074
 
14075
			}#if end
14076
 
14077
		#如果 $conf["dbPort"] 有設置
14078
		if(isset($conf["dbPort"])){
14079
 
14080
			$conf["db"]["sendQueryDataToVariabele"]["dbPort"]=$conf["dbPort"];#爲連線到mysql-Server時要使用的port,可省略,若省略則代表預設的port 3306
14081
 
14082
			}#if end
14083
 
14084
		$conf["db"]["sendQueryDataToVariabele"]["valueName"]=array("count");#陣列,爲該資料表列項目的每一項所要對應的變數名稱,預設為欄位的名稱($conf["tableValueName"]).
14085
		#參考資料:
14086
		#http://www.w3school.com.cn/php/func_mysql_fetch_array.asp => 解析取得的資料表欄位時,能夠選擇回傳含有欄位名稱與數字代表的key.
14087
		$getCountResult=db::sendQueryDataToVariabele($conf["db"]["sendQueryDataToVariabele"]);
14088
		unset($conf["db"]["sendQueryDataToVariabele"]);
14089
 
14090
		#如果 $getCountResult["status"] 等於 "false"
14091
		if($getCountResult["status"]=="false"){
14092
 
14093
			#設置錯誤識別
14094
			$result["status"]="false";
14095
 
14096
			#設置錯誤訊息
14097
			$result["error"]=$getCountResult;
14098
 
14099
			#回傳結果
14100
			return $result;
14101
 
14102
			}#if end
14103
 
14104
		#取得資料筆數
14105
		$result["dataCount"]=$getCountResult["dataContent"]["count"][0];
14106
 
14107
		#執行到這邊代表執行正常
14108
		$result["status"]="true";
14109
 
14110
		#回傳查詢的結果;	
14111
		return $result;	
14112
 
14113
		}#function getDataCountsInTable end
14114
 
14115
	/*
14116
	#函式說明:
14117
	#插入資料到指定的資料表裡面,插入資料完畢可以選擇是否要進行轉址。
14118
	#回傳結果:	
14119
	#$result["status"],爲查詢是否成功,若爲"true"則成功,若爲"false"則表示失敗了.
14120
	#$result["error"],錯誤訊息.
14121
	#$result["sql"],執行的sql語法.
14122
	#$result["lastInsertId"],新增的資料id.
14123
	#$result["function"],當前執行的涵式
14124
	#必填參數:
14125
	#$conf["dbAddress"],字串,爲mysql-Server的位置
14126
	$conf["dbAddress"]=$dbAddress;
14127
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號
14128
	$conf["dbAccount"]=$dbAccount;
14129
	#$conf["selectedDataBaseName"],字串,要選取的資料庫名稱
14130
	$conf["selectedDataBaseName"]=$dbName;
14131
	#$conf["tableName"],字串,爲要插入資料的資料表名稱
14132
	$conf["tableName"]="";
14133
	#$conf["columnName"],字串陣列,爲資料表的項目名稱.例如:$conf["columnName"]=array("columnName1","columnName2","columnName3",...);
14134
	$conf["columnName"]=array();
14135
	#$conf["insertValue"],字串陣列,爲要插入度數值.#例如:$conf["insertValue"]=array("insertValue1","insertValue2","insertValue3",...);
14136
	$conf["insertValue"]=array();
14137
	#可省略參數:
14138
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
14139
	#$conf["dbPassword"]=$dbPassword;
14140
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,可省略,若省略則代表用預設的 3306 port.
14141
	#$conf["dbPort"]=$dbPort;
14142
	#參考資料:
14143
	#http://www.javaworld.com.tw/jute/post/view?bid=21&id=173738&sty=1
14144
	#備註:
14145
	#無.
14146
	*/	
14147
	public static function insertData($conf){
14148
 
14149
		#初始化要回傳的內容
14150
		$result=array();
14151
 
14152
		#取得當前執行的函數名稱
14153
		$result["function"]=__FUNCTION__;
14154
 
14155
		#如果 $conf 不為陣列
14156
		if(gettype($conf)!="array"){
14157
 
14158
			#設置執行失敗
14159
			$result["status"]="false";
14160
 
14161
			#設置執行錯誤訊息
14162
			$result["error"][]="\$conf變數須為陣列形態";
14163
 
14164
			#如果傳入的參數為 null
14165
			if($conf==null){
14166
 
14167
				#設置執行錯誤訊息
14168
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
14169
 
14170
				}#if end
14171
 
14172
			#回傳結果
14173
			return $result;
14174
 
14175
			}#if end
14176
 
14177
		#函式說明:
14178
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
14179
		#回傳結果:
14180
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
14181
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
14182
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
14183
		#必填參數:
14184
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
14185
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("dbAddress","dbAccount","selectedDataBaseName","tableName","columnName","insertValue");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
14186
		#可省略參數:
14187
		$conf["variableCheck"]["isexistMuti"]["variableType"]=array("string","string","string","string","array","array");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
14188
		#$conf["variableCheck"]["isexistMuti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
14189
		#備註:
14190
		#功能與checkExistAndType函式相同
14191
		$variableCheck=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
14192
		unset($conf["variableCheck"]["isexistMuti"]);
14193
 
14194
		#如果 $variableCheck["status"] 等於 "false"
14195
		if($variableCheck["status"]=="false"){
14196
 
14197
			#設置執行錯誤的識別
14198
			$result["status"]="false";
14199
 
14200
			#設置執行錯誤的訊息
14201
			$result["error"]=$variableCheck;
14202
 
14203
			#回傳結果
14204
			return $result;
14205
 
14206
			}#if end
14207
 
14208
		#如果 $variableCheck["passed"] 等於 "false"
14209
		if($variableCheck["passed"]=="false"){
14210
 
14211
			#設置執行錯誤的識別
14212
			$result["status"]="false";
14213
 
14214
			#設置執行錯誤的訊息
14215
			$result["error"]=$variableCheck;
14216
 
14217
			#回傳結果
14218
			return $result;
14219
 
14220
			}#if end
14221
 
14222
		#連線到資料庫
14223
		#函式說明:
14224
		#連線到資料庫,結果會回傳一個陣列
14225
		#$result["status"],若連線成功則爲"true",連線失敗則爲"false".
14226
		#$result["connectInformation"],爲回傳的mysql連線資訊.
14227
		#$result["error"],錯誤訊息	.
14228
		#$result["function"],當前執行的函數名稱.	
14229
		#必填參數:
14230
		$conf["db"]["dbConnect"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
14231
		$conf["db"]["dbConnect"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
14232
		#$conf["dbName"],字串,爲要連的資料庫名稱
14233
		$conf["db"]["dbConnect"]["dbName"]=$conf["selectedDataBaseName"];
14234
		#可省略參數:
14235
 
14236
		#如果 $conf["dbPassword"] 有設定
14237
		if(isset($conf["dbPassword"])){
14238
 
14239
			$conf["db"]["dbConnect"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
14240
 
14241
			}#if end
14242
 
14243
		#如果 $conf["dbPort"] 有設定
14244
		if(isset($conf["dbPort"])){
14245
 
14246
			$conf["db"]["dbConnect"]["dbPort"]=$conf["dbPort"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
14247
 
14248
			}#if end
14249
 
14250
		$con=db::dbConnect($conf["db"]["dbConnect"]);
14251
		unset($conf["db"]);
14252
 
14253
		#如果連線到資料庫失敗
14254
		if($con["status"]==="false"){
14255
 
14256
			#設置執行失敗
14257
			$result["status"]="false";
14258
 
14259
			#設置執行錯誤訊息
14260
			$result["error"]=$con;
14261
 
14262
			#回傳結果
14263
			return $result;
14264
 
14265
			}#if end
14266
 
183 liveuser 14267
		#var_dump($con);
3 liveuser 14268
 
14269
		#取得mysqli物件
14270
		$mysqli=$con["connectInformation"];
14271
 
14272
		#輸入資料到 資料表 board 的語法
14273
		$str1="insert into `".$conf["selectedDataBaseName"]."`.`".$conf["tableName"]."`(";
14274
 
14275
		#取得一筆資料有幾個項目
14276
		$count=count($conf["columnName"]);
14277
 
14278
		#跑 $count-1 次,插入第一筆到最倒數第二筆
14279
		for($i=0;$i<=($count-2);$i++){
14280
 
183 liveuser 14281
			#放入欲插入的項目名稱
3 liveuser 14282
			$str1=$str1."`".$conf["columnName"][$i]."`".",";
14283
 
14284
			}#for end
14285
 
14286
		#插入最後一筆項目名稱
14287
		$lastItem = ($count-1);
14288
		$str1=$str1."`".$conf["columnName"][$lastItem]."`)";  
14289
 
14290
		#要插入的數值語法開始
14291
		$str2=" values (";
14292
 
14293
		#跑 $count-1 次
14294
		for($i=0;$i<=($count-2);$i++){
14295
 
14296
			#插入第一筆到最倒數第二筆的資料內容	
14297
			$str2=$str2."'".mysqli_real_escape_string($mysqli,$conf["insertValue"][$i])."',";
14298
 
14299
			}#for end
14300
 
14301
		#插入最後一筆的資料內容
14302
		$lastItem = ($count-1);
14303
		$str2=$str2."'".mysqli_real_escape_string($mysqli,$conf["insertValue"][$lastItem])."');";  
14304
 
14305
		#合併要執行的sql語法
14306
		$sqlString=$str1.$str2;
14307
 
14308
		#執行sql語法
14309
		#函式說明:
14310
		#執行mysql指令
14311
		#回傳結果::
14312
		#$result["status"],"true"為執行成功;"false"為執行失敗。
14313
		#$result["error"],錯誤訊息的陣列
14314
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
14315
		#$result["queryConn"],用於資料庫操作的變數.
14316
		#$result["queryString"],mysql查詢的語言
14317
		#查詢號的解果,需要解析。
14318
		#必填參數:
14319
		$conf["db::execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
14320
		$conf["db::execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
14321
		$conf["db::execMysqlQuery"]["dbSql"]=$sqlString;#要執行sql語法
14322
		#可省略參數: 
14323
 
14324
		#如果 $conf["dbPassword"] 有設置
14325
		if(isset($conf["dbPassword"])){
14326
 
14327
			$conf["db::execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
14328
 
14329
			}#if end
14330
 
14331
		#如果 $conf["dbPort"] 有設置
14332
		if(isset($conf["dbPort"])){
14333
 
14334
			$conf["db::execMysqlQuery"]["dbPort"]=$conf["dbPort"];#爲連線到mysql-Server時要使用的port,可省略,若省略則代表預設的3306 port.
14335
 
14336
			}#if end
14337
 
14338
		#$conf["dbLink"],物件,mysqli物件,由mysqli_connect()回傳的物件內容,若為數值則改用賬號密碼等資訊進行連線,反之則沿用連線物件.
14339
		$conf["db::execMysqlQuery"]["dbLink"]=$mysqli;
14340
		#$conf["autoClose],字串,"true"代表要自動斷線,預設為"true"會自動斷線
14341
		$conf["db::execMysqlQuery"]["autoClose"]="false";
14342
		$mysqlQueryResult=db::execMysqlQuery($conf["db::execMysqlQuery"]);
14343
		unset($conf["db::execMysqlQuery"]);
14344
 
14345
		#若執行 query 語法失敗
14346
		if($mysqlQueryResult["status"]=="false"){
14347
 
14348
			#設置執行錯誤識別
14349
			$result["status"]="false";
14350
 
14351
			#設置錯誤訊息
14352
			$result["error"]=$mysqlQueryResult;				
14353
 
14354
			#回傳結果
14355
			return $result;
14356
 
14357
			}#else end
14358
 
14359
		#取得新增的該筆記錄id
14360
		$result["lastInsertId"]=mysqli_insert_id($mysqlQueryResult["queryConn"]);
14361
 
14362
		#取得執行的sql字串
14363
		$result["sql"]=$mysqlQueryResult["queryString"];
14364
 
14365
		#執行到這邊代表執行成功
14366
		$result["status"]="true";
14367
 
14368
		#回傳結果
14369
		return $result;
14370
 
14371
		}#function insertData end
14372
 
14373
	/*
14374
	#函式說明:	
14375
	#更新資料表裏面的資料
14376
	#回傳結果:	
14377
	#$result["status"],爲查詢是否成功,若爲0則成功,若爲1則表示失敗了
14378
	#$result["error"],錯誤訊息
14379
	#$result["function"],當前執行的函數名稱
14380
	#$result["sql"],執行的sql語法.
14381
	#$result["argu"],使用的參數.
14382
	#必填參數:
14383
	#$conf["fileArgu"],字串,變數__FILE__的內容.
14384
	$conf["fileArgu"]=__FILE__;
14385
	#$conf["dbAddress"],字串,爲mysql-Server的位置
14386
	$conf["dbAddress"]=$dbAddress;
14387
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號
14388
	$conf["dbAccount"]=$dbAccount;
14389
	#$conf["selectedDataBaseName"],字串,要選取的資料庫名稱
14390
	$conf["selectedDataBaseName"]=$dbName;
14391
	#$conf["tableName"],字串,要修改的資料表名稱
14392
	$conf["tableName"]="";
14393
	#$conf["whereColumn"],字串陣列,爲用來判斷要更新的哪筆資料的欄位名稱,須爲陣列值
14394
	$conf["whereColumn"]=array("");
14395
	#$conf["whereValue"],字串陣列,為用來判斷是要更新哪筆資料的欄位對應數值,須爲陣列值
14396
	$conf["whereValue"]=array("");
14397
	#$conf["tableColumnName"],字串陣列,資料表項目的名稱陣列
14398
	$conf["tableColumnName"]=array("");
14399
	#$conf["updateDataValue"],字串陣列,要更改成對應資料表項目的內容,須為陣列值
14400
	$conf["updateDataValue"]=array("");
14401
	#可省略參數:
14402
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼.
14403
	#$conf["dbPassword"]=$dbPassword;
14404
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,可省略,若省略則代表使用預設的port 3306.
14405
	#$conf["dbPort"]=$dbPort;
14406
	#參考資料:
14407
	#無.
14408
	#備註:
183 liveuser 14409
	#建議修改 whereValue 參數為多維陣列,每個元素為有兩個元素的陣列,其元素的key為operator者代表運算子,其value可以為"=","<>",">","<",預設為"=";key為value者代表運算元,亦即用來比較的數字、字串等.
3 liveuser 14410
	*/
14411
	public static function updateDataTableContent($conf){
14412
 
14413
		#初始化要回傳的內容
14414
		$result=array();
14415
 
14416
		#取得當前執行的函數名稱
14417
		$result["function"]=__FUNCTION__;
14418
 
14419
		#如果 $conf 不為陣列
14420
		if(gettype($conf)!=="array"){
14421
 
14422
			#設置執行失敗
14423
			$result["status"]="false";
14424
 
14425
			#設置執行錯誤訊息
14426
			$result["error"][]="\$conf變數須為陣列形態";
14427
 
14428
			#如果傳入的參數為 null
14429
			if($conf==null){
14430
 
14431
				#設置執行錯誤訊息
14432
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
14433
 
14434
				}#if end
14435
 
14436
			#回傳結果
14437
			return $result;
14438
 
14439
			}#if end
14440
 
14441
		#儲存使用的參數
14442
		$result["argu"]=$conf;
14443
 
14444
		#函式說明:
14445
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
14446
		#回傳結果:
14447
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14448
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
14449
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
14450
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
14451
		#必填參數:
14452
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
14453
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("fileArgu","dbAddress","dbAccount","selectedDataBaseName","tableName","whereColumn","whereValue","tableColumnName","updateDataValue");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
14454
		#可省略參數:
14455
		$conf["variableCheck"]["isexistMuti"]["variableType"]=array("string","string","string","string","string","array","array","array","array");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
14456
		#$conf["variableCheck"]["isexistMuti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
14457
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
14458
		unset($conf["variableCheck"]["isexistMuti"]);
14459
 
14460
		#如果檢查參數作業出錯
14461
		if($checkResult["status"]==="false"){
14462
 
14463
			#設置執行錯誤識別
14464
			$result["status"]="false";
14465
 
14466
			#設置錯誤訊息
14467
			$result["error"]=$checkResult;
14468
 
14469
			#回傳結果
14470
			return $result;
14471
 
14472
			}#if end
14473
 
14474
		#如果檢查沒通過
14475
		if($checkResult["passed"]==="false"){
14476
 
14477
			#設置執行錯誤識別
14478
			$result["status"]="false";
14479
 
14480
			#設置錯誤訊息
14481
			$result["error"]=$checkResult;
14482
 
14483
			#回傳結果
14484
			return $result;
14485
 
14486
			}#if end
14487
 
14488
		#將陣列變數 $conf["whereColumn"] 與 $conf["whereValue"] 對應的變數中不存在的 $conf["whereValue"][$i] 元素去掉,並同時調整 $conf["whereColumn"] 使兩者變數的元素數量均相同。
14489
		#函式說明:
14490
		#比對兩個陣列變數,如果其中一個陣列變數的元素不存在,則將之消去,然後進行替補。另一個陣列變數則也要做同步的動作。
14491
		#回傳結果::
14492
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常。
14493
		#$result["error"],錯誤訊息。
14494
		#$result["content"],組合成新值的一維陣列。
14495
		#$result["function"],當前執行的函數名稱。
14496
		#必填參數:
14497
		$conf_compareAndModify2Arrays["arraysA"]=$conf["tableColumnName"];#用來跟陣列變數B比較的陣列變數A
14498
		$conf_compareAndModify2Arrays["arraysB"]=$conf["updateDataValue"];#用來跟陣列變數A比較的陣列變數B
14499
		$compareAndModifyTwoArrays=arrays::compareAndModifyTwoArrays($conf_compareAndModify2Arrays);
14500
		unset($conf_compareAndModify2Arrays);
14501
 
14502
		#如果 arrays::compareAndModifyTwoArrays 執行失敗
14503
		if($compareAndModifyTwoArrays["status"]==="false"){
14504
 
14505
			#設置執行錯誤識別
14506
			$result["status"]="false";
14507
 
14508
			#設置錯誤訊息
14509
			$result["error"]=$compareAndModifyTwoArrays;
14510
 
14511
			#回傳結果
14512
			return $result;
14513
 
14514
			}#if end
14515
 
14516
		#將整理好的 $result["compareAndModify2Arrays"]["A"] 放到 $conf["whereColumn"] ; $result["compareAndModify2Arrays"]["B"] 放到 $conf["whereValue"]
14517
		$conf["tableColumnName"]=$compareAndModifyTwoArrays["newArraysA"];
14518
		$conf["updateDataValue"]=$compareAndModifyTwoArrays["newArraysB"];
14519
 
14520
		#更新 $conf["selectedDatabaseName"].$tableName 資料表
14521
		$selectUpdateTableSql="UPDATE `".$conf["selectedDataBaseName"]."`.`".$conf["tableName"]."` "; 
14522
 
14523
		#更新資料表資料語法的一部分
14524
		$chooseColumnSql="SET ";
14525
 
14526
		#取得一筆資料有幾個項目
14527
		$counts=count($conf["tableColumnName"]);
14528
 
14529
		#儲存宣告shell變數的指令陣列
14530
		$shellVarDefined=array();
14531
 
14532
		#儲存要宣告的變數
14533
		$varDefined=array();
14534
 
14535
		#有$count欄項目,
14536
		for($i=0;$i<$counts;$i++){
14537
 
14538
			#如果是最後一項要更新的資料
14539
			if($i==($counts-1)){
14540
 
14541
				#如果內容不為字串
14542
				if(gettype($conf["updateDataValue"][$i])!=="string"){
14543
 
14544
					#設置執行錯誤識別
14545
					$result["status"]="false";
14546
 
14547
					#設置錯誤訊息
14548
					$result["error"][]="欲使用的變數不為字串";
14549
 
14550
					#設置錯誤訊息
14551
					$result["error"][]=$conf["updateDataValue"][$i];
14552
 
14553
					#回傳結果
14554
					return $result;
14555
 
14556
					}#if end
14557
 
14558
				#定義 shell script 變數
14559
				$shellVarDefined[]=array("cmd"=>"x".$i."=","param"=>array($conf["updateDataValue"][$i]));
14560
 
183 liveuser 14561
				#定義sql變數
14562
				$varDefined[]="select @x".$i." := '\${x".$i."}';";
3 liveuser 14563
 
183 liveuser 14564
				#將要更新的內容字串串接,結尾無逗號
3 liveuser 14565
				$chooseColumnSql = $chooseColumnSql."`".$conf["tableColumnName"][$i]."`= @x".$i." ";
14566
 
14567
				}#判斷式結束
14568
 
14569
			#如果不是最後一項要更新的資料
14570
			if($i!=($counts-1)){
14571
 
14572
				#定義 shell script 變數
14573
				$shellVarDefined[]=array("cmd"=>"x".$i."=","param"=>array($conf["updateDataValue"][$i]));
14574
 
183 liveuser 14575
				#定義sql變數
14576
				$varDefined[]="select @x".$i." := '\${x".$i."}';";
3 liveuser 14577
 
14578
				#將要更新的內容字串串接,結尾有逗號
14579
				$chooseColumnSql = $chooseColumnSql."`".$conf["tableColumnName"][$i]."`= @x".$i." ,";
14580
 
14581
				}#判斷式結束
14582
 
14583
			}#回圈結束
14584
 
14585
		#取得條件有幾項
183 liveuser 14586
		$conditionArrayCounts=count($conf["whereColumn"]);
3 liveuser 14587
 
14588
		#構成條件式
14589
		for($i=0;$i<$conditionArrayCounts;$i++){
14590
 
14591
			#如果是第一筆
183 liveuser 14592
			if($i===0){
3 liveuser 14593
 
14594
				#尋找的條件式
14595
				$condition="WHERE `".$conf["whereColumn"][$i]."` = '".$conf["whereValue"][$i]."'";
14596
 
14597
				#測試有無抓到第一個條件
14598
				#var_dump($condition);
14599
 
14600
				}#判斷式結束
14601
 
14602
			#如果不是第一筆
183 liveuser 14603
			if($i!==0){
3 liveuser 14604
 
14605
				#其它條件
14606
				$condition=$condition." AND `".$conf["whereColumn"][$i]."` = '".$conf["whereValue"][$i]."'";
14607
 
14608
				#測試有無抓到其它條件
14609
				#var_dump($condition);
14610
 
14611
				}#判斷式結束
14612
 
14613
			}#迴圈結束
14614
 
14615
		#初始化定義變數的sql
14616
		$varDefineStr="";
14617
 
14618
		#針對每個要使用的數值
14619
		foreach($varDefined as $index=>$var){
14620
 
14621
			#累加定義變數的sql
14622
			$varDefineStr=$varDefineStr.$var;
183 liveuser 14623
 
3 liveuser 14624
			}#foreach end
14625
 
14626
		#合併所有的語法成一句完整的語法 
14627
		$sqlString = $varDefineStr.$selectUpdateTableSql.$chooseColumnSql.$condition;
14628
 
183 liveuser 14629
		#debug
14630
		#var_dump(__LINE__,$sqlString);
14631
 
3 liveuser 14632
		#設置取得執行的sql語法
14633
		$result["sql"]=$sqlString;
14634
 
14635
		#函式說明:
14636
		#用shell執行mysql指令.
14637
		#回傳結果::
14638
		#$result["status"],"true"為執行成功;"false"為執行失敗。
14639
		#$result["error"],錯誤訊息的陣列
14640
		#$result["function"],當前執行的涵式
14641
		#$result["queryString"],mysql查詢的語言.
14642
		#必填參數:
14643
		#$conf["fileArgu"],字串,變數__FILE__的內容.
14644
		$conf["db::shell"]["fileArgu"]=$conf["fileArgu"];
14645
		#$conf["dbSql"],字串,要執行sql語法
14646
		$conf["db::shell"]["dbSql"]=$sqlString;
14647
		#$conf["dbAddress"],字串,爲mysql-Server的位置。
14648
		$conf["db::shell"]["dbAddress"]=$conf["dbAddress"];
14649
		#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號。
14650
		$conf["db::shell"]["dbAccount"]=$conf["dbAccount"]; 
14651
		#可省略參數:
14652
		$conf["db::shell"]["pre"]=$shellVarDefined;
14653
 
14654
		#如果有設定密碼
14655
		if(isset($conf["dbPassword"])){
14656
 
14657
			#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼。
14658
			$conf["db::shell"]["dbPassword"]=$conf["dbPassword"];
14659
 
14660
			}#if end
14661
 
14662
		#$conf["dbName"],字串,爲要連的資料庫名稱
14663
		$conf["db::shell"]["dbName"]=$conf["selectedDataBaseName"];
14664
 
14665
		#如果有設定port
14666
		if(isset($conf["dbPort"])){
14667
 
14668
			#$conf["dbPort"],字串,為連線到mysql-Server時對應的port,可省略,預設為3306.
14669
			$conf["db::shell"]["dbPort"]=$conf["dbPort"];
14670
 
14671
			}#if end
14672
 
14673
		$shell=db::shell($conf["db::shell"]);
14674
		unset($conf["db::shell"]);
183 liveuser 14675
 
3 liveuser 14676
		#如果執行sql失敗
14677
		if($shell["status"]==="false"){
183 liveuser 14678
 
3 liveuser 14679
			#設置執行不正常
183 liveuser 14680
			$result["status"]="false";
3 liveuser 14681
 
14682
			#設置錯誤訊息
14683
			$result["error"]=$shell;
14684
 
14685
			#回傳結果
14686
			return $result;
14687
 
14688
			}#if end
14689
 
14690
		#設置執行正常
14691
		$result["status"]="true";
14692
 
14693
		#回傳結果
14694
		return $result;
14695
 
14696
		}#function updateDataTableContent end
14697
 
14698
	/*
14699
	#函式說明:
14700
	#將滿足條件的資料從資料表中刪除
14701
	#回傳結果:	
14702
	#$result["status"],爲查詢是否成功,若爲0則成功,若爲1則表示失敗了
14703
	#$result["function"],當前執行的函數名稱.
14704
	#$result["error"],錯誤訊息
14705
	#$result["sql"],執行的語法
14706
	#必填參數:
14707
	#$conf["dbAddress"],字串,爲mysql-Server的位置
14708
	$conf["dbAddress"]=$dbAddress;
14709
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號
14710
	$conf["dbAccount"]=$dbAccount;
14711
	#$conf["selectedDataBaseName"],字串,要選取的資料庫名稱
14712
	$conf["selectedDataBaseName"]=$dbName;
14713
	#$conf["selectedDataTableName"],字串,要選取的資料表的名稱
14714
	$conf["selectedDataTableName"]="";
14715
	#$conf["whereColumn"],字串陣列,爲用來判斷要刪除的哪筆資料的欄位名稱,須爲陣列值
14716
	$conf["whereColumn"]=array("");
14717
	#$conf["whereValue"]=,字串陣列,為用來判斷是要刪除哪筆資料的欄位對應數值,須爲陣列值
14718
	$conf["whereValue"]=array("");	
14719
	#可省略參數:
14720
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
14721
	#$conf["dbPassword"]=$dbPassword;
14722
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,可省略,若省略則代表使用預設的port 3306.
14723
	#$conf["dbPort"]=$dbPort;
14724
	#$conf["WhereColumnOperator"],字串陣列,用於判斷語句的比較符號陣列,可以用的符號有「"="、">"、"<"、"LIKE"、"NOT LIKE"」,預設都爲「=」。
14725
	#$conf["WhereColumnOperator"]=array("");
14726
	#$conf["WhereColumnAndOr"]=array("");#用於判斷語句條件之間成立的條件是AND還是OR,須爲陣列值,預設皆爲AND。其數量應爲要判斷的欄位數量減一。
14727
	#$conf["WhereColumnAndOr"]=array("");
14728
	#參考資料:
14729
	#無.
14730
	#備註:
14731
	#無.
14732
	*/	
14733
	public static function deleteDataFromTable(&$conf){
14734
 
14735
		#初始化要回傳的內容
14736
		$result=array();
14737
 
14738
		#取得當前執行的函數名稱
14739
		$result["function"]=__FUNCTION__;
14740
 
14741
		#如果 $conf 不為陣列
14742
		if(gettype($conf)!="array"){
14743
 
14744
			#設置執行失敗
14745
			$result["status"]="false";
14746
 
14747
			#設置執行錯誤訊息
14748
			$result["error"][]="\$conf變數須為陣列形態";
14749
 
14750
			#如果傳入的參數為 null
14751
			if($conf==null){
14752
 
14753
				#設置執行錯誤訊息
14754
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
14755
 
14756
				}#if end
14757
 
14758
			#回傳結果
14759
			return $result;
14760
 
14761
			}#if end
14762
 
14763
		#檢查參數
14764
		#函式說明:
14765
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
14766
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14767
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
14768
		#$result["function"],當前執行的函式名稱.
14769
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
14770
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
14771
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
14772
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
14773
		#必填參數:
14774
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
14775
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
14776
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
14777
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("dbAddress","dbAccount","selectedDataBaseName","selectedDataTableName","whereColumn","whereValue");
14778
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
14779
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string","string","array","array");
14780
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
14781
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
14782
		#可省略參數:
14783
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
14784
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
14785
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
14786
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("dbPassword","dbPort","WhereColumnOperator","WhereColumnAndOr");
14787
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
14788
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","array","array");
14789
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
14790
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null,null,null);
14791
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
14792
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("WhereColumnOperator","WhereColumnAndOr");
14793
		#var_dump($conf["variableCheck::checkArguments"]);
14794
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
14795
		unset($conf["variableCheck::checkArguments"]);
14796
 
14797
		#如果檢查作業出出錯
14798
		if($checkResult["status"]=="false"){
14799
 
14800
			#設置錯誤識別
14801
			$result["status"]="false";
14802
 
14803
			#設置錯誤訊息
14804
			$result["error"]=$checkResult;
14805
 
14806
			#回傳結果
14807
			return $result;
14808
 
14809
			}#if end
14810
 
14811
		#如果檢查作業出出錯
14812
		if($checkResult["passed"]=="false"){
14813
 
14814
			#設置錯誤識別
14815
			$result["status"]="false";
14816
 
14817
			#設置錯誤訊息
14818
			$result["error"]=$checkResult;
14819
 
14820
			#回傳結果
14821
			return $result;
14822
 
14823
			}#if end
14824
 
14825
		#刪除資料的語法開始,指定了表格的名稱
14826
		$sql="DELETE FROM `".$conf["selectedDataBaseName"]."`.`".$conf["selectedDataTableName"]."` ";
14827
 
14828
		#取得有幾個條件
14829
		$counts=count($conf["whereColumn"]);
14830
 
14831
		#連線到資料庫
14832
		#函式說明:
14833
		#連線到資料庫,結果會回傳一個陣列
14834
		#$result["status"],若連線成功則爲"true",連線失敗則爲"false".
14835
		#$result["connectInformation"],爲回傳的mysql連線資訊.
14836
		#$result["error"],錯誤訊息	.
14837
		#$result["function"],當前執行的函數名稱.	
14838
		#必填參數:
14839
		$conf["db"]["dbConnect"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
14840
		$conf["db"]["dbConnect"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
14841
		#$conf["dbName"],字串,爲要連的資料庫名稱
14842
		$conf["db"]["dbConnect"]["dbName"]=$conf["selectedDataBaseName"];
14843
		#可省略參數:
14844
 
14845
		#如果 $conf["dbPassword"] 有設定
14846
		if(isset($conf["dbPassword"])){
14847
 
14848
			$conf["db"]["dbConnect"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
14849
 
14850
			}#if end
14851
 
14852
		#如果 $conf["dbPort"] 有設定
14853
		if(isset($conf["dbPort"])){
14854
 
14855
			$conf["db"]["dbConnect"]["dbPort"]=$conf["dbPort"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
14856
 
14857
			}#if end
14858
 
14859
		$con=db::dbConnect($conf["db"]["dbConnect"]);
14860
		unset($conf["db"]);
14861
 
14862
		#如果連線到資料庫失敗
14863
		if($con["status"]==="false"){
14864
 
14865
			#設置執行失敗
14866
			$result["status"]="false";
14867
 
14868
			#設置執行錯誤訊息
14869
			$result["error"]=$con;
14870
 
14871
			#回傳結果
14872
			return $result;
14873
 
14874
			}#if end
14875
 
14876
		#var_dump($con);	
14877
 
14878
		#取得mysqli物件
14879
		$mysqli=$con["connectInformation"];
14880
 
14881
		#條件語句
14882
		for($i=0;$i<$counts;$i++){
14883
 
14884
			#如果 $conf["WhereColumnOperator"] 不存在
14885
			if(!isset($conf["WhereColumnOperator"])){
14886
 
14887
				#如果 $conf["WhereColumnOperator"][$i] 不存在
14888
				if(!isset($conf["WhereColumnOperator"][$i])){
14889
 
14890
					#設置為 "="
14891
					$conf["WhereColumnOperator"][$i]="=";
14892
 
14893
					}#if end
14894
 
14895
				}#if end
14896
 
14897
			#反之若 $conf["WhereColumnOperator"][$i] 不存在
14898
			else if(!isset($conf["WhereColumnOperator"][$i])){
14899
 
14900
				#設置為 "="
14901
				$conf["WhereColumnOperator"][$i]="=";
14902
 
14903
				}#if end
14904
 
14905
			#以下變數應該要為字串
14906
			$checkedVar["whereColumn"]=$conf["whereColumn"][$i];
14907
			$checkedVar["WhereColumnOperator"]=$conf["WhereColumnOperator"][$i];
14908
			$checkedVar["whereValue"]=$conf["whereValue"][$i];
14909
 
14910
			#函式說明:
14911
			#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
14912
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14913
			#$reuslt["error"],執行不正常結束的錯訊息陣列.
14914
			#$result["function"],當前執行的函式名稱.
14915
			#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
14916
			#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
14917
			#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
14918
			#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
14919
			#必填參數:
14920
			#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
14921
			$conf["variableCheck::checkArguments"]["varInput"]=&$checkedVar;
14922
			#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
14923
			$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("whereColumn","WhereColumnOperator","whereValue");
14924
			#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
14925
			$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string");
14926
			#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
14927
			$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
14928
			#可省略參數:
14929
			#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
14930
			#$conf["canBeEmptyString"]="false";
14931
			#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
14932
			#$conf["skipableVariableName"]=array();
14933
			#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
14934
			#$conf["skipableVariableType"]=array();
14935
			#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
14936
			#$conf["skipableVarDefaultValue"]=array("");
14937
			#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
14938
			#$conf["arrayCountEqualCheck"][]=array();
14939
			$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
14940
			unset($conf["variableCheck::checkArguments"]);
14941
 
14942
			#如果檢查失敗
14943
			if($checkResult["status"]=="false"){
14944
 
14945
				#設置執行錯誤
14946
				$result["status"]="false";
14947
 
14948
				#設置執行錯誤訊息
14949
				$result["error"]=$checkResult;
14950
 
14951
				#回傳結果
14952
				return $result;
14953
 
14954
				}#if end
14955
 
14956
			#如果檢查失敗
14957
			if($checkResult["passed"]=="false"){
14958
 
14959
				#設置執行錯誤
14960
				$result["status"]="false";
14961
 
14962
				#設置執行錯誤訊息
14963
				$result["error"]=$checkResult;
14964
 
14965
				#回傳結果
14966
				return $result;
14967
 
14968
				}#if end
14969
 
14970
			#如果是第一筆
14971
			if($i==0){
14972
 
14973
				#如果 $conf["WhereColumnOperator"] 存在
14974
				if(isset($conf["WhereColumnOperator"])){
14975
 
14976
					#設定第一個條件
14977
					$sql = $sql." WHERE `".$conf["whereColumn"][$i]. "` ".$conf["WhereColumnOperator"][$i]." '". mysqli_real_escape_string($mysqli,$conf["whereValue"][$i])."'";
14978
 
14979
					}#if end
14980
 
14981
				#反之 $conf["WhereColumnOperator"] 不存在
14982
				else{
14983
 
14984
					#設定第一個條件
14985
					$sql = $sql." WHERE `".$conf["whereColumn"][$i]. "` = '". mysqli_real_escape_string($mysqli,$conf["whereValue"][$i])."'"; 
14986
 
14987
					}#else end
14988
 
14989
				}#判斷式
14990
 
14991
			#如果不是第一個條件
14992
			if($i!=0){
14993
 
14994
				#如果 $conf["WhereColumnAndOr"] 不存在 
14995
				if(!isset($conf["WhereColumnAndOr"])){
14996
 
14997
					#將 $conf["WhereColumnAndOr"] 裏面的元素置換爲 AND
14998
					#函式說明:
14999
					#建立一個陣列,可以指派陣列的內容,然後回傳
15000
					#回傳結果::
15001
					#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15002
					#$result["function"],當前執行的函數名稱.
15003
					#$result["error"],錯誤訊息陣列.
15004
					#$result["content"],爲陣列變數內容
15005
					#必填參數:
15006
					$conf_arrays_create["arrayContent"]=array("AND");#陣列元素的內容,須爲陣列值。
15007
					#可省略參數:
15008
					$conf_arrays_create["arrayCounts"]=$counts-1;#爲陣列的元素有幾個,若沒設定,則數量爲$conf["arrayContent"]裏的元素數量
15009
					$conf_arrays_create["theSameAs"]="true";#若設爲"true",則所有元素內容都跟第一個元素內容相同
15010
					$create=arrays::create($conf_arrays_create);
15011
					unset($conf_arrays_create);
15012
 
15013
					#如果建立陣列失敗
15014
					if($create["status"]=="false"){
15015
 
15016
						#設置執行錯誤
15017
						$result["status"]="false";
15018
 
15019
						#設置執行錯誤訊息
15020
						$result["error"]=$create;
15021
 
15022
						#回傳結果
15023
						return $result;
15024
 
15025
						}#if end
15026
 
15027
					#取得 $conf["WhereColumnAndOr"] 參數內容
15028
					$conf["WhereColumnAndOr"]=$create["content"];
15029
 
15030
					}#if end
15031
 
15032
				#如果 $conf["WhereColumnOperator"] 存在
15033
				if(isset($conf["WhereColumnOperator"])){
15034
 
15035
					#設定其它條件
15036
					$sql=$sql." ".$conf["WhereColumnAndOr"][$i-1]." `".$conf["whereColumn"][$i]. "` ".$conf["WhereColumnOperator"][$i]." '".mysqli_real_escape_string($mysqli,$conf["whereValue"][$i])."'";			
15037
 
15038
					}#if end			
15039
 
15040
				#反之 $conf["WhereColumnOperator"] 不存在
15041
				else{
15042
 
15043
					#設定其它條件
15044
					$sql=$sql." ".$conf["WhereColumnAndOr"][$i-1]." `".$conf["whereColumn"][$i]. "` = '".mysqli_real_escape_string($mysqli,$conf["whereValue"][$i])."'";			
15045
 
15046
					}#else end
15047
 
15048
				}#判斷式
15049
 
15050
			}#迴圈結束
15051
 
15052
		#sql語法結束
15053
		$sqlString=$sql.";";			
15054
 
15055
		#執行sql語法
15056
		#函式說明:
15057
		#執行mysql指令
15058
		#回傳結果::
15059
		#$result["status"],"true"為執行成功;"false"為執行失敗。
15060
		#$result["error"],錯誤訊息的陣列
15061
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
15062
		#$result["queryString"],mysql查詢的語言
15063
		#查詢號的解果,需要解析。
15064
		#必填參數:
15065
		$conf["db"]["execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
15066
		$conf["db"]["execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
15067
		$conf["db"]["execMysqlQuery"]["dbSql"]=$sqlString;#要執行sql語法
15068
		#可省略參數: 
15069
 
15070
		#如果 $conf["dbPassword"] 有設置
15071
		if(isset($conf["dbPassword"])){
15072
 
15073
			$conf["db"]["execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
15074
 
15075
			}#if end
15076
 
15077
		#如果 $conf["dbPort"] 有設置
15078
		if(isset($conf["dbPort"])){
15079
 
15080
			$conf["db"]["execMysqlQuery"]["dbPort"]=$conf["dbPort"];#爲連線到mysql-Server時要使用的port,可省略,若省略則代表預設的 3306 port.
15081
 
15082
			}#if end
15083
 
15084
		#$conf["dbLink"],物件,mysqli物件,由mysqli_connect()回傳的物件內容,若為數值則改用賬號密碼等資訊進行連線,反之則沿用連線物件.
15085
		$conf["db"]["execMysqlQuery"]["dbLink"]=$mysqli;
15086
 
15087
		$db["execMysqlQuery"]=db::execMysqlQuery($conf["db"]["execMysqlQuery"]);
15088
		unset($conf["db"]["execMysqlQuery"]);
15089
 
15090
		#如果sql執行有誤
15091
		if($db["execMysqlQuery"]["status"]=="false"){
15092
 
15093
			#設置錯誤識別
15094
			$result["status"]="false";
15095
 
15096
			#設置錯誤訊息
15097
			$result["error"]=$db["execMysqlQuery"];
15098
 
15099
			#回傳結果
15100
			return $result;
15101
 
15102
			}#if end
15103
 
15104
		#取得執行的sql語法
15105
		$result["sql"]=$db["execMysqlQuery"]["queryString"];
15106
 
15107
		#執行到這邊表執行成功
15108
		$result["status"]="true";
15109
 
15110
		#回傳結果
15111
		return $result;
15112
 
15113
		}#函式結束
15114
 
15115
	/*
15116
	#函式說明:
15117
	#取得目標資料庫底下所有資料表的索引鍵,可作為foreign key的可用欄位,欄位必須為index key或primary key.
15118
	#回傳結果::
15119
	#$result["status"],執行是否成功"true"為執行成功,"false"為執行失敗。
15120
	#$result["error"],執行的錯誤訊息.
15121
	#$result["function"],當前執行函式名稱.
15122
	#$result["content"][$i]["tableName"],欄位所屬的資料表名稱.
15123
	#$result["content"][$i]["columnKey"],是"primary key"還是"index key".
15124
	#$result["content"][$i]["columnName"],欄位名稱.
15125
	#$result["content"][$i]["typeAndLength"],欄位儲存形態與長度限制.
15126
	#$result["content"][$i]["tableDotColumnName"],欄位的「鍵所屬資料表名稱.鍵欄位名稱」.
15127
	#$result["content"][$i]["tableDotColumnVarType"],「資料索引鍵所屬資料表名稱.索引鍵欄位名稱 儲存變數型別與長度」.
15128
	#$result["indexKey"]["tableName"],index key欄位所屬的資料表陣列
15129
	#$result["indexKey"]["columnName"],index key的欄位名稱陣列
15130
	#$result["indexKey"]["typeAndLength"],index key的欄位儲存型態與長度限制陣列
15131
	#$result["indexKey"]["tableDotColumnName"],index key的 「資料索引鍵所屬資料表名稱.索引鍵欄位名稱」 陣列
15132
	#$result["indexKey"]["tableDotColumnVarType"],index key的 「資料索引鍵所屬資料表名稱.索引鍵欄位名稱 儲存變數型別與長度」 陣列
15133
	#$result["primaryKey"][$tableCount]["dtName"],主鍵所屬的資料表名稱,若沒有主鍵則為null.
15134
	#$result["primaryKey"][$tableCount]["columnName"],資料表的主鍵欄位名稱,若沒有主鍵則為null.
15135
	#$result["primaryKey"][$tableCount]["columnVarType"],資料表的主鍵欄位的儲存形態,若沒有主鍵則為null..
15136
	#$result["primaryKey"][$tableCount]["columnVarLengthLimit"],資料表的主鍵欄位的儲存長度限制,若沒有主鍵則為null.
15137
	#$result["primaryKey"][$tableCount]["columnVarTypeAndLengthLimit"],儲存當前資料表的主鍵欄位的儲存形態與長度限制,若沒有主鍵則為null.
15138
	#必填參數:
15139
	#$conf["dbAddress"],字串,爲mysql-Server的位置
15140
	$conf["dbAddress"]=$dbAddress;
15141
	#$conf["dbAccount"],字串,爲用於連入mysql-Server時要使用的帳號
15142
	$conf["dbAccount"]=$dbAccount;
15143
	#$conf["selectedDataBaseName"],字串,爲目標資料表所屬的資料庫
15144
	$conf["selectedDataBaseName"]="";#
15145
	#可省略參數:
15146
	#$conf["dbPassword"],字串,爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
15147
	#$conf["dbPassword"]=$dbPassword;#
15148
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,可省略,若省略則代表使用預設的port 3306.
15149
	#$conf["dbPort"]=$dbPort;
15150
	#參考資料:
15151
	#無.
15152
	#備註:
15153
	#目前只能取得一個資料庫的所有索引鍵.
15154
	*/
15155
	public static function getAllIndexKeyInAllDataBase(&$conf){
15156
 
15157
		#初始化要回傳的內容
15158
		$result=array();
15159
 
15160
		#取得當前執行的函數名稱
15161
		$result["function"]=__FUNCTION__;
15162
 
15163
		#如果 $conf 不為陣列
15164
		if(gettype($conf)!="array"){
15165
 
15166
			#設置執行失敗
15167
			$result["status"]="false";
15168
 
15169
			#設置執行錯誤訊息
15170
			$result["error"][]="\$conf變數須為陣列形態";
15171
 
15172
			#如果傳入的參數為 null
15173
			if($conf==null){
15174
 
15175
				#設置執行錯誤訊息
15176
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
15177
 
15178
				}#if end
15179
 
15180
			#回傳結果
15181
			return $result;
15182
 
15183
			}#if end
15184
 
15185
		#檢查參數
15186
		#函式說明:
15187
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
15188
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15189
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
15190
		#$result["function"],當前執行的函式名稱.
15191
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
15192
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
15193
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
15194
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
15195
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
15196
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
15197
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
15198
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
15199
		#必填參數:
15200
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
15201
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
15202
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
15203
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("dbAddress","dbAccount","selectedDataBaseName");
15204
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
15205
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string");
15206
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
15207
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
15208
		#可省略參數:
15209
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
15210
		#$conf["canBeEmptyString"]="false";
15211
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或集合.
15212
		$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("dbPassword","dbPort");
15213
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
15214
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("dbPassword","dbPort");
15215
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
15216
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
15217
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
15218
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null);
15219
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
15220
		#$conf["arrayCountEqualCheck"][]=array();
15221
		#參考資料:
15222
		#array_keys=>http://php.net/manual/en/function.array-keys.php
15223
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
15224
		unset($conf["variableCheck::checkArguments"]);
15225
 
15226
		#如果檢查有誤
15227
		if($checkResult["status"]=="false"){
15228
 
15229
			#設置執行錯誤的識別
15230
			$result["status"]="false";
15231
 
15232
			#設置錯誤訊息
15233
			$result["error"]=$checkResult;
15234
 
15235
			#回傳結果
15236
			return $result;
15237
 
15238
			}#if end
15239
 
15240
		#如果檢查不通過
15241
		if($checkResult["passed"]=="false"){
15242
 
15243
			#設置執行錯誤的識別
15244
			$result["status"]="false";
15245
 
15246
			#設置錯誤訊息
15247
			$result["error"]=$checkResult;
15248
 
15249
			#回傳結果
15250
			return $result;
15251
 
15252
			}#if end
15253
 
15254
		#取得資料表列表
15255
		#查詢特定資料庫裡的資料表列表,會回傳查詢的結果
15256
		#$result["connectStatus"],若成功則爲0,失敗則爲1。
15257
		#$result["connectInformation"],爲回傳的mysql連線資訊。
15258
		#$result["tableName"] 爲查詢的資料庫名稱陣列,
15259
			#第一筆資料庫名稱爲$result["tableName"][0],
15260
			#第二筆資料庫名稱爲$result["tableName"][1],
15261
			#其餘以此類推。
15262
		#$result["dataCounts"] 爲資料庫的總筆數
15263
		#必填參數:
15264
		$conf["db"]["getDataTableList"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
15265
		$conf["db"]["getDataTableList"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
15266
		$conf["db"]["getDataTableList"]["selectedDataBaseName"]=$conf["selectedDataBaseName"];#爲指定的資料庫名稱
15267
		#可省略參數:
15268
 
15269
		#如果有設定 $conf["dbPassword"]
15270
		if(isset($conf["dbPassword"])){
15271
 
15272
			#則套用設定
15273
			$conf["db"]["getDataTableList"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
15274
 
15275
			}#if end
15276
 
15277
		#如果有設定 $conf["dbPort"]
15278
		if(isset($conf["dbPort"])){
15279
 
15280
			#則套用設定
15281
			$conf["db"]["getDataTableList"]["dbPort"]=$conf["dbPort"];#爲連線到mysql-Server時要使用的port,預設為3306.
15282
 
15283
			}#if end
15284
 
15285
		#原始語法:
15286
		#show tables FROM databaseName,代表檢視databaseName裡面的資料表清單。
15287
		$tableList=db::getDataTableList($conf["db"]["getDataTableList"]);
15288
		unset($conf["db"]);
15289
 
15290
		#debug
15291
		#var_dump($tableList);
15292
 
15293
		#如果 資料表清單 取得失敗
15294
		if($tableList["status"]=="false"){
15295
 
15296
			#設置執行錯誤的識別
15297
			$result["status"]="fasle";
15298
 
15299
			#設置錯誤訊息
15300
			$result["error"]="取得資料表清單失敗";
15301
 
15302
			#回傳結果
15303
			return $result;
15304
 
15305
			}#if end
15306
 
15307
		#初始化資料表的計數變數
15308
		$tableCount=0;
15309
 
15310
		#初始化儲存 index key
15311
		$result["indexKey"]=array();
15312
 
15313
		#初始化儲存index key所屬的表格 
15314
		$result["indexKey"]["tableName"]=array();
15315
 
15316
		#根據每個資料表
15317
		foreach($tableList["tableName"] as $tableName){
15318
 
15319
			#取得該資料表的欄位資訊
15320
			#函式說明:
15321
			#取得資料表所有欄位的詳細資訊
15322
			#回傳的內容:
15323
			#$result["status"],執行結果,"true"代表執行成功;"false"代表執行失敗
15324
			#$result["error"],錯誤訊息陣列
15325
			#$result["sql"],執行的sql語法
15326
			#$result["oriInput"],原始的資料表欄位資訊
15327
			#$result["everyLine"],逐行的欄位資訊
15328
			#$result["tableName"],當前查詢的資料表名稱
15329
			#$result["engine"],資料表使用的儲存引擎
15330
			#$result["charset"],資料表預設的編碼
15331
			#$result["columnName"][$i],各欄位的名稱陣列,$i爲0開始的數字,也可以使用欄位的名稱。
15332
			#$result["columnVarTypeAndLengthLimit"][$i],各欄位儲存的變數形態與長度限制,$i爲0開始的數字,也可以使用欄位的名稱。
15333
			#$result["columnVarType"][$i],各欄位變數儲存的型態,$i爲1開始的數字,也可以使用欄位的名稱.
15334
			#$result["columnVarLengthLimit"][$i],個欄位變數的長度限制,若不存在其限制,則為"",$i爲1開始的數字,也可以使用欄位的名稱.
15335
			#$result["columnNotNull"][$i],各欄位是否可以不爲null,"true"爲可以不爲null;"false"爲可以爲"null",$i爲0開始的數字,也可以使用欄位的名稱。
15336
			#$result["columnAutoIncrement"][$i],各欄位是否會自動加1,"true"爲會;"false"爲不會,$i爲0開始的數字,也可以使用欄位的名稱。
15337
			#$result["columnDefault"][$i],各欄位的預設內容,若無則爲"沒有指定",$i爲0開始的數字,也可以使用欄位的名稱。
15338
			#$result["columnOnUpdateAction"][$i],當資料有修改時,該欄位的內容要怎麼因應,$i爲0開始的數字,也可以使用欄位的名稱。
15339
			#$result["columnCharacterSet"][$i],各欄位使用的CharacterSet,$i爲0開始的數字,也可以使用欄位的名稱。
15340
			#$result["columnCollate"][$i],各欄位使用的Collate,$i爲0開始的數字,也可以使用欄位的名稱。
15341
			#$result["key"]["exist"],該資料表是否有索引鍵,"true"代表有;"false"代表沒有。
15342
			#$result["key"][$j],該資料表的索引鍵陣列,$j爲0開始的數字,也可以使用欄位的名稱。
15343
			#$result["keyConstraintName"][$j],該資料表用於識別索引鍵的CONSTRAINT名稱陣列,$j爲0開始的數字,也可以使用欄位的名稱。
15344
			#$result["primaryKey"],該資料表的主鍵
15345
			#$result["foreignKey"]["exist"],該資料表是否有foreign key,"true"代表有;"fasle"代表沒有。
15346
			#$result["foreignKey"]["constraintName"][$k],用來識別外鍵的CONSTRAINT名稱陣列,$k爲0開始的數字,也可以使用欄位的名稱。
15347
			#$result["foreignKey"]["columnName"][$k],外鍵的名稱陣列,$k爲0開始的數字,也可以使用欄位的名稱。
15348
			#$result["foreignKey"]["referencesTable"][$k],外鍵參照的欄位,$k爲0開始的數字
15349
			#$result["foreignKey"]["referencesColumn"][$k],外鍵參照的欄位屬於哪個資料表,$k爲0開始的數字
15350
			#$result["foreignKey"]["OnUpdateAction"][$l],當參照的欄位資料更新時,會怎麼同步,$l爲0開始的數字
15351
			#$result["foreignKey"]["OnDeleteAction"][$m],當參照的欄位資料移除時,會怎麼同步,$m爲0開始的數字
15352
			#必填參數:
15353
			$conf["db"]["getTableColumnDetailInfo"]["dbAddress"]=$conf["dbAddress"];#資料庫的網路位置
15354
			$conf["db"]["getTableColumnDetailInfo"]["dbAccount"]=$conf["dbAccount"];#連線到資料庫要用的帳號
15355
			$conf["db"]["getTableColumnDetailInfo"]["selectedDataBase"]=$conf["selectedDataBaseName"];#連線到資料庫要選擇的資料庫
15356
			$conf["db"]["getTableColumnDetailInfo"]["selectedDataTable"]=$tableName;#連線到資料庫要檢視的資料表
15357
			#可省略參數:
15358
 
15359
			#如果有設定 $conf["dbPassword"]
15360
			if(isset($conf["dbPassword"])){
15361
 
15362
				#則套用設定
15363
				$conf["db"]["getTableColumnDetailInfo"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
15364
 
15365
				}#if end
15366
 
15367
			#如果有設定 $conf["dbPort"]
15368
			if(isset($conf["dbPort"])){
15369
 
15370
				#則套用設定
15371
				$conf["db"]["getTableColumnDetailInfo"]["dbPort"]=$conf["dbPort"];#爲連線到mysql-Server時要使用的port,預設為3306.
15372
 
15373
				}#if end
15374
 
15375
			$columnData=db::getTableColumnDetailInfo($conf["db"]["getTableColumnDetailInfo"]);
15376
			unset($conf["db"]["getTableColumnDetailInfo"]);
15377
 
15378
			#如果取得資料表結構詳細資訊失敗
15379
			if($columnData["status"]=="false"){
15380
 
15381
				#設置執行錯誤的識別
15382
				$result["status"]="fasle";
15383
 
15384
				#設置錯誤訊息
15385
				$result["error"]=$columnData;
15386
 
15387
				#回傳結果
15388
				return $result;
15389
 
15390
				}#if end
15391
 
15392
			#儲存當前資料表的主鍵所屬資料表名稱
15393
			$result["primaryKey"][$tableCount]["dtName"]=$tableName;
15394
 
15395
			#如果該資料表沒有主鍵
15396
			if(!isset($columnData["primaryKey"])){
15397
 
15398
				#將數值設為null
15399
 
15400
				#儲存當前資料表的主鍵欄位名稱
15401
				$result["primaryKey"][$tableCount]["columnName"]=null;
15402
 
15403
				#儲存當前資料表的主鍵欄位的儲存形態
15404
				$result["primaryKey"][$tableCount]["columnVarType"]=null;
15405
 
15406
				#儲存當前資料表的主鍵欄位的儲存長度限制
15407
				$result["primaryKey"][$tableCount]["columnVarLengthLimit"]=null;
15408
 
15409
				#儲存當前資料表的主鍵欄位的儲存形態與長度限制
15410
				$result["primaryKey"][$tableCount]["columnVarTypeAndLengthLimit"]=null;
15411
 
15412
				}#if end
15413
 
15414
			#反之有主鍵
15415
			else{
15416
 
15417
				#儲存當前資料表的主鍵欄位名稱
15418
				$result["primaryKey"][$tableCount]["columnName"]=$columnData["primaryKey"];
15419
 
15420
				#儲存當前資料表的主鍵欄位的儲存形態
15421
				$result["primaryKey"][$tableCount]["columnVarType"]=$columnData["columnVarType"][$columnData["primaryKey"]];
15422
 
15423
				#儲存當前資料表的主鍵欄位的儲存長度限制
15424
				$result["primaryKey"][$tableCount]["columnVarLengthLimit"]=$columnData["columnVarLengthLimit"][$columnData["primaryKey"]];
15425
 
15426
				#儲存當前資料表的主鍵欄位的儲存形態與長度限制
15427
				$result["primaryKey"][$tableCount]["columnVarTypeAndLengthLimit"]=$columnData["columnVarTypeAndLengthLimit"][$columnData["primaryKey"]];
15428
 
15429
				}#else end
15430
 
15431
			#資料表計數加1
15432
			$tableCount++;			
15433
 
15434
			#如果有index key
15435
			if($columnData["key"]["exist"]=="true"){
15436
 
15437
				#依據每個index key
15438
				for($i=0;$i<count($columnData["key"]);$i++){
15439
 
15440
					#如果該元素不存在
15441
					if(!isset($columnData["key"][$i])){
15442
 
15443
						#中斷迴圈
15444
						break;
15445
 
15446
						}#if end
15447
 
15448
					#取得其index key欄位
15449
					$tempColumnName=$result["indexKey"]["columnName"][]=$columnData["key"][$i];
15450
 
15451
					#如果 $columnData["columnVarTypeAndLengthLimit"][$i] 有設置
15452
					if(isset($columnData["columnVarTypeAndLengthLimit"][$tempColumnName])){
15453
 
15454
						#取得該欄位的儲存變數型別與長度限制
15455
						$result["indexKey"]["typeAndLength"][]=$columnData["columnVarTypeAndLengthLimit"][$tempColumnName];
15456
 
15457
						}#if end
15458
 
15459
					#反之
15460
					else{
15461
 
15462
						#將 得該欄位的儲存變數型別與長度限制 設為 ""
15463
						$result["indexKey"]["typeAndLength"][]="";
15464
 
15465
						}#else end	
15466
 
15467
					#取得其index key的所屬資料表
15468
					$result["indexKey"]["tableName"][]=$tableName;
15469
 
15470
					}#for end
15471
 
15472
				}#if end
15473
 
15474
			}#foreach end
15475
 
15476
		#根據每個索引鍵欄位與其所屬的資料表來建立 「索引鍵所屬資料表名稱.索引鍵欄位名稱 儲存變數型別與長度」 格式的陣列
15477
		for($i=0;$i<count($result["indexKey"]["tableName"]);$i++){
15478
 
15479
			#設置 索引鍵所屬資料表名稱.索引鍵欄位名稱 格式的陣列
15480
			$result["indexKey"]["tableDotColumnName"][]=$result["indexKey"]["tableName"][$i].".".$result["indexKey"]["columnName"][$i];
15481
 
15482
			#設置 索引鍵所屬資料表名稱.索引鍵欄位名稱 欄位儲存型態與長度限制 格式的陣列
15483
			$result["indexKey"]["tableDotColumnVarType"][]=$result["indexKey"]["tableName"][$i].".".$result["indexKey"]["columnName"][$i]." ".$result["indexKey"]["typeAndLength"][$i];
15484
 
15485
			}#for end
15486
 
15487
		#組裝主鍵與索引鍵的資訊
15488
		#$result["content"][$i]["tableName"],欄位所屬的資料表名稱.
15489
		#$result["content"][$i]["columnKey"],是"primary key"還是"index key".
15490
		#$result["content"][$i]["columnName"],欄位名稱.
15491
		#$result["content"][$i]["typeAndLength"],欄位儲存形態與長度限制.
15492
		#$result["content"][$i]["tableDotColumnName"],欄位的「鍵所屬資料表名稱.鍵欄位名稱」.
15493
		#$result["content"][$i]["tableDotColumnVarType"],「資料索引鍵所屬資料表名稱.索引鍵欄位名稱 儲存變數型別與長度」.
15494
		#$result["indexKey"]["tableName"],index key欄位所屬的資料表陣列
15495
		#$result["indexKey"]["columnName"],index key的欄位名稱陣列
15496
		#$result["indexKey"]["typeAndLength"],index key的欄位儲存型態與長度限制陣列
15497
		#$result["indexKey"]["tableDotColumnName"],index key的 「資料索引鍵所屬資料表名稱.索引鍵欄位名稱」 陣列
15498
		#$result["indexKey"]["tableDotColumnVarType"],index key的 「資料索引鍵所屬資料表名稱.索引鍵欄位名稱 儲存變數型別與長度」 陣列
15499
		#$result["primaryKey"][$tableCount]["dtName"],主鍵所屬的資料表名稱,若沒有主鍵則為null.
15500
		#$result["primaryKey"][$tableCount]["columnName"],資料表的主鍵欄位名稱,若沒有主鍵則為null.
15501
		#$result["primaryKey"][$tableCount]["columnVarType"],資料表的主鍵欄位的儲存形態,若沒有主鍵則為null..
15502
		#$result["primaryKey"][$tableCount]["columnVarLengthLimit"],資料表的主鍵欄位的儲存長度限制,若沒有主鍵則為null.
15503
		#$result["primaryKey"][$tableCount]["columnVarTypeAndLengthLimit"],儲存當前資料表的主鍵欄位的儲存形態與長度限制,若沒有主鍵則為null.
15504
 
15505
		#能夠被外鍵參照的欄位計數
15506
		$referenceColumnCount=0;
15507
 
15508
		#有幾個主鍵就執行幾次
15509
		for($i=0;$i<count($result["primaryKey"]);$i++){
15510
 
15511
			#暫存當前資料表的名稱
15512
			$dtName=$result["primaryKey"][$i]["dtName"];
15513
 
15514
			#如果主鍵欄位名稱不為 null,亦即有主鍵
15515
			if($result["primaryKey"][$i]["columnName"]!=null){
15516
 
15517
				#儲存欄位所屬的資料表名稱.
15518
				$result["content"][$referenceColumnCount]["tableName"]=$dtName;
15519
 
15520
				#儲存是"primary key"還是"index key".
15521
				$result["content"][$referenceColumnCount]["columnKey"]="primary key";
15522
 
15523
				#儲存欄位名稱
15524
				$result["content"][$referenceColumnCount]["columnName"]=$result["primaryKey"][$i]["columnName"];
15525
 
15526
				#儲存欄位儲存形態與長度限制.
15527
				$result["content"][$referenceColumnCount]["typeAndLength"]=$result["primaryKey"][$i]["columnVarLengthLimit"];
15528
 
15529
				#儲存欄位的「鍵所屬資料表名稱.鍵欄位名稱」.
15530
				$result["content"][$referenceColumnCount]["tableDotColumnName"]=$dtName.".".$result["primaryKey"][$i]["columnName"];
15531
 
15532
				#儲存欄位的「資料索引鍵所屬資料表名稱.索引鍵欄位名稱 儲存變數型別與長度」.
15533
				$result["content"][$referenceColumnCount]["tableDotColumnVarType"]=$dtName.".".$result["primaryKey"][$i]["columnName"]." ".$result["primaryKey"][$i]["columnVarTypeAndLengthLimit"];
15534
 
15535
				#能夠被外鍵參照的欄位計數加1
15536
				$referenceColumnCount++;	
15537
 
15538
				}#if end
15539
 
15540
			#用當前資料表的名稱取得索引鍵的資訊
15541
 
15542
			#所有資料表有幾個索引鍵就執行幾次
15543
			for($j=0;$j<count($result["indexKey"]["tableName"]);$j++){
15544
 
15545
				#如果是當前資料表的索引鍵
15546
				if($result["indexKey"]["tableName"][$j]==$dtName){
15547
 
15548
					#儲存欄位所屬的資料表名稱.
15549
					$result["content"][$referenceColumnCount]["tableName"]=$dtName;
15550
 
15551
					#儲存是"primary key"還是"index key".
15552
					$result["content"][$referenceColumnCount]["columnKey"]="index key";
15553
 
15554
					#儲存欄位名稱
15555
					$result["content"][$referenceColumnCount]["columnName"]=$result["indexKey"]["columnName"][$j];
15556
 
15557
					#儲存欄位儲存形態與長度限制.
15558
					$result["content"][$referenceColumnCount]["typeAndLength"]=$result["indexKey"]["typeAndLength"][$j];
15559
 
15560
					#儲存欄位的「鍵所屬資料表名稱.鍵欄位名稱」.
15561
					$result["content"][$referenceColumnCount]["tableDotColumnName"]=$result["indexKey"]["tableDotColumnName"][$j];
15562
 
15563
					#儲存欄位的「資料索引鍵所屬資料表名稱.索引鍵欄位名稱 儲存變數型別與長度」.
15564
					$result["content"][$referenceColumnCount]["tableDotColumnVarType"]=$result["indexKey"]["tableDotColumnVarType"][$j];
15565
 
15566
					#能夠被外鍵參照的欄位計數加1
15567
					$referenceColumnCount++;	
15568
 
15569
					}#if end
15570
 
15571
				}#for end
15572
 
15573
			}#for end
15574
 
15575
		#執行到這邊代表執行成功
15576
		$result["status"]="true";
15577
 
15578
		#回傳結果
15579
		return $result;
15580
 
15581
		}#function getAllIndexKeyInAllDataBase end 
15582
 
15583
	/*
15584
	#函式說明:
15585
	#將資料表輸出成csv檔案
15586
	#回傳結果:
15587
	#$result["status"],執行是否正常,"true"代表執行正常,"false"代表執行失敗.
15588
	#$result["error"],錯誤訊息
15589
	#$result["function"],當前執行的涵式
15590
	#$result["csvFile"],輸出的csv檔案位置與名稱.
15591
	#必填參數:
15592
	#$conf["dbAddress"],字串,欲連線的mariadb/mysql伺服器IP/domainName位置.
15593
	$conf["dbAddress"]=$dbAddress;
15594
	#$conf["dbAccount"],字串,連線到mariadb/mysql所用的帳戶.
15595
	$conf["dbAccount"]=$dbAccount;
15596
	#$conf["dbName"],字串,目標資料表位於哪個資庫底下.
15597
	$conf["dbName"]=$dbName;
15598
	#$conf["dtName"],字串,目標資料表的名稱.
15599
	$conf["dtName"]="";
15600
	#可省略參數:
15601
	#$conf["dbPassword"],字串,連線到mariadb/mysql伺服器時所使用的密碼,若未設置則代表不使用密碼來連線.
15602
	#$conf["dbPassword"]=$dbPassword;
15603
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,可省略,若省略則代表使用預設的port 3306.
15604
	#$conf["dbPort"]=$dbPort;
15605
	#$conf["column"],陣列,要的欄位名稱,預設為「array(*)」代表所有欄位都要, 
15606
	#$conf["column"]=array("*");
15607
	#$conf["WhereColumnName"],陣列,篩選用的特定欄位
15608
	#$conf["WhereColumnName"]=array("");
15609
	#$conf["WhereColumnValue"],陣列,篩選用特定欄位的數值要等於多少才是我們要的.
15610
	#$conf["WhereColumnValue"]=array("");
15611
	#$conf["groupBy"],陣列,爲要以哪幾個欄爲作爲分羣的依據(欄位相同的數值僅會取出一筆).
15612
	#$conf["groupBy"]=array("");
15613
	#$conf["orderItem"],字串,爲排序的項目依據,若要用隨機抽樣,可以用"rand()",可省略。
15614
	#$conf["orderItem"]="";#
15615
	#$conf["ascORdesc"],字串,爲要低增還是遞減排序,asc爲遞增;desc爲遞減。
15616
	#$conf["ascORdesc"]="asc";
15617
	#$conf["outPutPathAndName"],字串,輸出的csv檔案要存放在哪裡.
15618
	#$conf["outPutPathAndName"]="";
15619
	#$conf["noDownload"],字串,如果爲"true"則代表不要讓使用者下載,但會回傳檔案的相對位置
15620
	#$conf["noDownload"]="true";
15621
	#參考資料:
15622
	#無.
15623
	#備註:
15624
	#無.
15625
	*/
15626
	public static function exportTableToCsv($conf){
15627
 
15628
		#初始化要回傳的內容
15629
		$result=array();
15630
 
15631
		#取得當前執行的函數名稱
15632
		$result["function"]=__FUNCTION__;
15633
 
15634
		#如果 $conf 不為陣列
15635
		if(gettype($conf)!="array"){
15636
 
15637
			#設置執行失敗
15638
			$result["status"]="false";
15639
 
15640
			#設置執行錯誤訊息
15641
			$result["error"][]="\$conf變數須為陣列形態";
15642
 
15643
			#如果傳入的參數為 null
15644
			if($conf==null){
15645
 
15646
				#設置執行錯誤訊息
15647
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
15648
 
15649
				}#if end
15650
 
15651
			#回傳結果
15652
			return $result;
15653
 
15654
			}#if end
15655
 
15656
		#檢查參數
15657
		#函式說明:
15658
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
15659
		#回傳結果:
15660
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15661
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
15662
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
15663
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
15664
		#必填參數:
15665
		$conf["db"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
15666
		$conf["db"]["isexistMuti"]["variableCheck"]=array("dbAddress","dbAccount","dbName","dtName");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
15667
		#可省略參數:
15668
		$conf["db"]["isexistMuti"]["variableType"]=array("string","string","string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
15669
		$conf["db"]["isexistMuti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
15670
		$checkResult=variableCheck::isexistMulti($conf["db"]["isexistMuti"]);
15671
		unset($conf["db"]["isexistMuti"]);
15672
 
15673
		#如果 $checkResult["status"] 等於 "false"
15674
		if($checkResult["status"]=="false"){
15675
 
15676
			#設置錯誤識別
15677
			$result["status"]="false";
15678
 
15679
			#設置錯誤訊息
15680
			$result["error"]=$checkResult;
15681
 
15682
			#回傳結果
15683
			return $result;
15684
 
15685
			}#if end
15686
 
15687
		#如果 $checkResult["passed"] 等於 "false"
15688
		if($checkResult["passed"]=="false"){
15689
 
15690
			#設置錯誤識別
15691
			$result["status"]="false";
15692
 
15693
			#設置錯誤訊息
15694
			$result["error"]=$checkResult;
15695
 
15696
			#回傳結果
15697
			return $result;
15698
 
15699
			}#if end
15700
 
15701
		#如果 $conf["column"] 沒有設置
15702
		if(!isset($conf["column"])){
15703
 
15704
			#則代表要全部的欄位
15705
			$conf["column"]=array("*");
15706
 
15707
			}#if end
15708
 
15709
		#抓取資料表資料
15710
		#函式說明:
15711
		#一次取得資料庫、表的資料
15712
		#回傳結果:
15713
		#$result["status"],執行結果"true"為成功;"false"為執行失敗。
15714
		#$result["error"],錯誤訊息陣列。
15715
		#$result["dataColumnName"],抓取的資料欄位名稱陣列.
15716
		#$result["dataColumnName"][$i]代表第$i+1個欄位名稱
15717
		#$result["dataContent"],爲資料的內容。
15718
		#$result["dataContent"][$conf["WhereColumnName"][$i]][$dataSetNum]
15719
			#$dataSetNum 爲第$dataSetNum+1筆資料
15720
			#$conf["WhereColumnName"][$i] 爲第 $i+1 個欄位的名稱
15721
		#$result["dataCount"],爲取得的資料筆數。
15722
		#$result["sql"],執行的sql字串.
15723
		#必填參數:
15724
		$conf["db"]["fastGetDbData"]["dbAddress"]=$conf["dbAddress"];#爲dbServer的位置。
15725
		$conf["db"]["fastGetDbData"]["dbAccount"]=$conf["dbAccount"];#爲登入dbServer的帳號。
15726
		$conf["db"]["fastGetDbData"]["dbName"]=$conf["dbName"];#爲要存取的資料庫名稱
15727
		$conf["db"]["fastGetDbData"]["tableName"]=$conf["dtName"];#爲要存取的資料表名稱
15728
		$conf["db"]["fastGetDbData"]["columnYouWant"]=$conf["column"];#你想要的欄位!
15729
		#可省略參數:
15730
 
15731
		#如果 $conf["dbPassword"] 有設置 
15732
		if(isset($conf["dbPassword"])){
15733
 
15734
			#則設定進行連線密碼
15735
			$conf["db"]["fastGetDbData"]["dbPassword"]=$conf["dbPassword"];#爲要存取dbServer的密碼
15736
 
15737
			}#if end
15738
 
15739
		#如果 $conf["dbPort"] 有設置 
15740
		if(isset($conf["dbPort"])){
15741
 
15742
			#則設定進行連線的 port
15743
			$conf["db"]["fastGetDbData"]["dbPort"]=$conf["dbPort"];#爲要存取dbServer的port
15744
 
15745
			}#if end
15746
 
15747
		#如果 $conf["WhereColumnName"] 有設置
15748
		if(isset($conf["WhereColumnName"])){
15749
 
15750
			$conf["db"]["fastGetDbData"]["WhereColumnName"]=$conf["WhereColumnName"];#用於判斷語句的欄位項目陣列。
15751
 
15752
			}#if end
15753
 
15754
		#如果 $conf["WhereColumnValue"] 有設置
15755
		if(isset($conf["WhereColumnValue"])){
15756
 
15757
			$conf["db"]["fastGetDbData"]["WhereColumnValue"]=$conf["WhereColumnValue"];#用於判斷語句的欄位數值陣列,若與LIKE搭配,則可以在關鍵自字串的左右名加上「%」符號,這樣就可以搜尋具有該字串的內容。
15758
 
15759
			}#if end
15760
 
15761
		#$conf["db"]["fastGetDbData"]["WhereColumnCombine"]=array("");#用於判斷語句當中需要()起來的判斷式,須爲陣列值,"s"代表「(」,"e"代表「)」 ,若無則須設爲""。
15762
		#$conf["db"]["fastGetDbData"]["WhereColumnOperator"]=array("");#用於判斷語句的比較符號陣列,可以用的符號有「"="、">"、"<"、"LIKE"、"NOT LIKE"」,預設都爲「=」。
15763
		#$conf["db"]["fastGetDbData"]["WhereColumnAndOr"]=array("");#用於判斷語句條件之間成立的條件是AND還是OR,須爲陣列值。其數量應爲要判斷的欄位數量減一。
15764
 
15765
		#如果 $conf["orderItem"] 有設定
15766
		if(isset($conf["orderItem"])){
15767
 
15768
			$conf["db"]["fastGetDbData"]["orderItem"]=$conf["orderItem"];#爲排序的項目依據,若要用隨機抽樣,可以用"rand()",可省略。
15769
 
15770
			}#if end
15771
 
15772
		#如果 $conf["ascORdesc"] 有設定
15773
		if(isset($conf["ascORdesc"])){
15774
 
15775
 
15776
			$conf["db"]["fastGetDbData"]["ascORdesc"]=$conf["ascORdesc"];#爲要低增還是遞減排序,asc爲遞增;desc爲遞減。
15777
 
15778
			}#if end
15779
 
15780
		#$conf["db"]["fastGetDbData"]["numberStart"]="0";#為從第幾筆開始讀取,預設為0,代筆第一筆。
15781
		#$conf["db"]["fastGetDbData"]["numLimit"]="30";#為要取幾筆資料,可以省略,省略則表示不限制數目。
15782
 
15783
		#如果 $conf["groupBy"] 有設定
15784
		if(isset($conf["groupBy"])){
15785
 
15786
			$conf["db"]["fastGetDbData"]["groupBy"]=$conf["groupBy"];#爲要以哪幾個欄爲作爲分羣的依據(欄位相同的數值僅會取出一筆).
15787
 
15788
			}#if end
15789
 
15790
		$db["fastGetDbData"]=db::fastGetDbData($conf["db"]["fastGetDbData"]);
15791
		unset($conf["db"]["fastGetDbData"]);
15792
 
15793
		#var_dump($db["fastGetDbData"]);
15794
 
15795
		#如果 $db["fastGetDbData"]["status"] 等於 "false"
15796
		if($db["fastGetDbData"]["status"]=="false"){
15797
 
15798
			#設置錯誤識別
15799
			$result["status"]="false";
15800
 
15801
			#設置錯誤訊息
15802
			$result["error"]=$db["fastGetDbData"];
15803
 
15804
			#回傳結果
15805
			return $result;
15806
 
15807
			}#if end
15808
 
15809
		#初始化要寫入的內容
15810
		$writedData[0]=$db["fastGetDbData"]["dataColumnName"];
15811
 
15812
		#var_dump($writedData);
15813
 
15814
		#取得要寫入的欄位數值
15815
 
15816
		#針對每筆資料
15817
		for($i=0;$i<$db["fastGetDbData"]["dataCount"];$i++){
15818
 
15819
			#依據每個欄位
15820
			for($j=0;$j<count($db["fastGetDbData"]["dataColumnName"]);$j++){
15821
 
15822
				#儲存到列裡面
15823
				$writedData[$i+1][]=$db["fastGetDbData"]["dataContent"][$db["fastGetDbData"]["dataColumnName"][$j]][$i];
15824
 
15825
				}#foreach end
15826
 
15827
			}#for end
15828
 
15829
		#var_dump($writedData);
15830
 
15831
		#輸出成csv檔
15832
		#函式說明:
15833
		#快速建立一個csv檔案,並且要求使用者下載。
15834
		#回傳結果::
15835
		#如果有設置$conf["noDownload"]爲"true"的話,則會回傳檔案的位置
15836
		#必填參數:
15837
		$conf["db"]["create"]["dataArray"]=$writedData;#要寫入的文字,$conf["dataArray"][$i],代表第 $i 行的內容。
15838
		#可省略參數:
15839
 
15840
		#如果有設置 $conf["outPutPathAndName"]
15841
		if(isset($conf["outPutPathAndName"])){
15842
 
15843
			$conf["db"]["create"]["csvFilePathAndName"]=$conf["outPutPathAndName"];#csv檔案的名稱,預設爲系統時間
15844
 
15845
			}#if end
15846
 
15847
		#如果 $conf["noDownload"] 有設置
15848
		if(isset($conf["noDownload"])){
15849
 
15850
			#且$conf["noDownload"]等於"true"
15851
			if($conf["noDownload"]=="true"){
15852
 
15853
				$conf["db"]["create"]["noDownload"]="true";#如果爲"true"則代表不要讓使用者下載,但會回傳檔案的相對位置
15854
 
15855
				}#if end	
15856
 
15857
			}#if end
15858
 
15859
		#參考資料來源:
15860
		#http://php.net/manual/en/function.str-split.php
15861
		return csv::create($conf["db"]["create"]);
15862
		unset($conf["db"]["create"]);
15863
 
15864
		}#funciton exportTableToCsv end
15865
 
15866
	/*
15867
	#函式說明:
15868
	#透過一筆筆將資料表刪除後,重設識別欄位的自動增量欄位起始值為1
15869
	#回傳結果:
15870
	#$result["status"],執行是否正常,"true"代表執行正常,"false"代表執行失敗.
15871
	#$result["error"],錯誤訊息.
15872
	#$result["function"],當前執行的函數名稱.
15873
	#$result["sql"],執行的sql語法陣列.
15874
	#必填參數:
15875
	#$conf["dbAddress"],字串,連線到資料庫的位置.
15876
	$conf["dbAddress"]=$dbAddress;
15877
	#$conf["dbAccount"],字串,連線到資料庫的帳號.
15878
	$conf["dbAccount"]=$dbAccount;
15879
	#$conf["dbName"],字串,要連線到哪個資料庫.
15880
	$conf["dbName"]=$dbName;
15881
	#$conf["dtName"],字串,要重設重設識別欄位的自動增量為0的資料表名稱.
15882
	$conf["dtName"]="";
15883
	#可省略參數:
15884
	#$conf["dbPassword"],字串,連線到資料庫的密碼.
15885
	#$conf["dbPassword"]=$dbPassword;
15886
	#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,可省略,若省略則代表使用預設的port 3306.
15887
	#$conf["dbPort"]=$dbPort;
15888
	#參考資料:
15889
	#http://dev.mysql.com/doc/refman/5.0/en/alter-table.html
15890
	#備註:
15891
	#參考語法,ALTER TABLE dbName.dtName AUTO_INCREMENT = 1;
15892
	*/
15893
	public static function eraseDataInTableThenResetAutoIncrement(&$conf){
15894
 
15895
		#初始化要回傳的內容
15896
		$result=array();
15897
 
15898
		#取得當前執行的函數名稱
15899
		$result["function"]=__FUNCTION__;
15900
 
15901
		#如果 $conf 不為陣列
15902
		if(gettype($conf)!="array"){
15903
 
15904
			#設置執行失敗
15905
			$result["status"]="false";
15906
 
15907
			#設置執行錯誤訊息
15908
			$result["error"][]="\$conf變數須為陣列形態";
15909
 
15910
			#如果傳入的參數為 null
15911
			if($conf==null){
15912
 
15913
				#設置執行錯誤訊息
15914
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
15915
 
15916
				}#if end
15917
 
15918
			#回傳結果
15919
			return $result;
15920
 
15921
			}#if end
15922
 
15923
		#檢查參數
15924
		#函式說明:
15925
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
15926
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15927
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
15928
		#$result["function"],當前執行的函式名稱.
15929
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
15930
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
15931
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
15932
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
15933
		#必填參數:
15934
		#$conf["variableCheck.checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
15935
		$conf["variableCheck.checkArguments"]["varInput"]=&$conf;
15936
		#$conf["variableCheck.checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
15937
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableName"]=array("dbAddress","dbAccount","dbName","dtName");
15938
		#$conf["variableCheck.checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
15939
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableType"]=array("string","string","string","string");
15940
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
15941
		$conf["variableCheck.checkArguments"]["referenceVarKey"]="variableCheck.checkArguments";
15942
		#可省略參數:
15943
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"false"。
15944
		#$conf["canBeEmptyString"]="false";
15945
		#$conf["variableCheck.checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
15946
		$conf["variableCheck.checkArguments"]["skipableVariableName"]=array("dbPassword","dbPort");
15947
		#$conf["variableCheck.checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
15948
		$conf["variableCheck.checkArguments"]["skipableVariableType"]=array("string","string");
15949
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
15950
		#$conf["skipableVarDefaultValue"]=array("");
15951
		$checkResult=variableCheck::checkArguments($conf["variableCheck.checkArguments"]);
15952
		unset($conf["variableCheck.checkArguments"]);
15953
 
15954
		#如果 檢查參數 失敗
15955
		if($checkResult["status"]=="false"){
15956
 
15957
			#設置執行不正常
15958
			$result["status"]="false";
15959
 
15960
			#設置執行錯誤
15961
			$result["error"]=$checkResult;
15962
 
15963
			#回傳節果
15964
			return $result;
15965
 
15966
			}#if end
15967
 
15968
		#如果 檢查參數 不通過
15969
		if($checkResult["passed"]=="false"){
15970
 
15971
			#設置執行不正常
15972
			$result["status"]="false";
15973
 
15974
			#設置執行錯誤
15975
			$result["error"]=$checkResult;
15976
 
15977
			#回傳節果
15978
			return $result;
15979
 
15980
			}#if end
15981
 
15982
		#執行一筆筆移除資料的sql語法
15983
		#函式說明:
15984
		#執行mysql指令
15985
		#回傳結果::
15986
		#$result["status"],"true"為執行成功;"false"為執行失敗。
15987
		#$result["error"],錯誤訊息的陣列
15988
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
15989
		#$result["queryString"],mysql查詢的語言
15990
		#查詢號的解果,需要解析。
15991
		#必填參數:
15992
		$conf["db.execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
15993
		$conf["db.execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
15994
		$conf["db.execMysqlQuery"]["dbSql"]="DELETE FROM `".$conf["dbName"]."`.`".$conf["dtName"]."` ";#要執行sql語法
15995
		#可省略參數: 
15996
 
15997
		#如果有設置 $conf["dbPassword"]
15998
		if(isset($conf["dbPassword"])){
15999
 
16000
			$conf["db.execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
16001
 
16002
			}#if end
16003
 
16004
		#如果有設置 $conf["dbPort"]
16005
		if(isset($conf["dbPort"])){
16006
 
16007
			$conf["db.execMysqlQuery"]["dbPort"]=$conf["dbPort"];#爲連線到mysql-Server時要使用的port,可省略,若省略則代表預設的3306 port.
16008
 
16009
			}#if end
16010
 
16011
		$queryResult=db::execMysqlQuery($conf["db.execMysqlQuery"]);
16012
		unset($conf["db.execMysqlQuery"]);
16013
 
16014
		#如果執行 sql 語法失敗
16015
		if($queryResult["status"]=="false"){
16016
 
16017
			#設置執行不正常
16018
			$result["status"]="false";
16019
 
16020
			#設置執行錯誤
16021
			$result["error"]=$queryResult;
16022
 
16023
			#回傳節果
16024
			return $result;
16025
 
16026
			}#if end
16027
 
16028
		#取得所執行的sql語法
16029
		$result["sql"][]=$queryResult["queryString"];		
16030
 
16031
		#執行重設增量的sql語法
16032
		#函式說明:
16033
		#執行mysql指令
16034
		#回傳結果::
16035
		#$result["status"],"true"為執行成功;"false"為執行失敗。
16036
		#$result["error"],錯誤訊息的陣列
16037
		#$result["queryResource"],mysql查詢後的resource資源,用於給mysql解析的資源變數。
16038
		#$result["queryString"],mysql查詢的語言
16039
		#查詢號的解果,需要解析。
16040
		#必填參數:
16041
		$conf["db.execMysqlQuery"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
16042
		$conf["db.execMysqlQuery"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
16043
		$conf["db.execMysqlQuery"]["dbSql"]="ALTER TABLE ".$conf["dbName"].".".$conf["dtName"]." AUTO_INCREMENT = 1";#要執行sql語法
16044
		#如果有設置 $conf["dbPassword"]
16045
		if(isset($conf["dbPassword"])){
16046
 
16047
			$conf["db.execMysqlQuery"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
16048
 
16049
			}#if end
16050
 
16051
		#如果有設置 $conf["dbPort"]
16052
		if(isset($conf["dbPort"])){
16053
 
16054
			$conf["db.execMysqlQuery"]["dbPort"]=$conf["dbPort"];#爲連線到mysql-Server時要使用的port,可省略,若省略則代表預設的3306 port.
16055
 
16056
			}#if end
16057
 
16058
		$queryResult=db::execMysqlQuery($conf["db.execMysqlQuery"]);
16059
		unset($conf["db.execMysqlQuery"]);
16060
 
16061
		#如果執行 sql 語法失敗
16062
		if($queryResult["status"]=="false"){
16063
 
16064
			#設置執行不正常
16065
			$result["status"]="false";
16066
 
16067
			#設置執行錯誤
16068
			$result["error"]=$queryResult;
16069
 
16070
			#回傳節果
16071
			return $result;
16072
 
16073
			}#if end
16074
 
16075
		#取得所執行的sql語法
16076
		$result["sql"][]=$queryResult["queryString"];
16077
 
16078
		#設置執行正常
16079
		$result["status"]="true";
16080
 
16081
		#回傳結果
16082
		return $result;
16083
 
16084
		}#function eraseDataInTableThenResetAutoIncrement end
16085
 
16086
	}#db class end
16087
 
16088
?>