PageRenderTime 53ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/system/engine/engine_library/dbtools.enginelib.php

https://bitbucket.org/threetopia/thtech
PHP | 1339 lines | 1289 code | 18 blank | 32 comment | 99 complexity | 28c829f55edb881b367df9d943ffa4c1 MD5 | raw file
Possible License(s): LGPL-2.1
  1. <?php
  2. /*
  3. * File name : database.class.php
  4. * Author : Tri Hartanto
  5. * Site : trihartanto.com
  6. * Framework : thtech
  7. * Library type : Engine Database
  8. * Version : 4
  9. * License : GPL
  10. * Create Date : 23 February 2011
  11. * Modified Date : 29 Jan 2014
  12. * File Description : This file contains database class to used by the framework and CMS system.
  13. *
  14. * For more license information please kindly open and read LICENSE.txt file
  15. */
  16. class DBTools_EngineLibrary extends Systems
  17. {
  18. private $DBToolsLibrary = array();
  19. private function loadDBLibrary($dbtype=NULL)
  20. {
  21. $libraryFile = dirname(__FILE__).'/dbtools_library/'.strtolower($dbtype).'.dbtoolslib.php';
  22. if(!isset($this->DBToolsLibrary[$dbtype]) and file_exists($libraryFile))
  23. {
  24. include_once($libraryFile);
  25. $libraryClass = $dbtype.'_DBToolsLibrary';
  26. $this->DBToolsLibrary[$dbtype] = new $libraryClass();
  27. }
  28. if(isset($this->DBToolsLibrary[$dbtype]))
  29. {
  30. return $this->DBToolsLibrary[$dbtype];
  31. }
  32. $this->_SysEngine->httptools->errorprocess(array('error'=>'500','message'=>'Can\'t open '.$dbtype.' database library.'));
  33. return false;
  34. }
  35. private function getDBData($data=NULL)
  36. {
  37. $DBConfig = (isset($data['DBConfig']))?$data['DBConfig']:NULL;
  38. $DBPerRequest = false;
  39. /*
  40. * Build database source and config
  41. */
  42. if(!empty($DBConfig))
  43. {
  44. $DBInstance = '_DBPerRequest';
  45. $DBSource = $DBInstance;
  46. $DBConfig = $DBConfig;
  47. $DBPerRequest = true;
  48. }
  49. else if(!empty($this->_CurProgramConfig['DBConfig']))
  50. {
  51. $DBInstance = $this->_CurProgramData['uprgm_name'];
  52. if(isset($this->_SysDBData[$this->_CurProgramData['uprgm_name']]))
  53. {
  54. $DBSource = $this->_SysDBData[$DBInstance]['DBSource'];
  55. $DBConfig = $this->_SysDBData[$DBInstance]['DBConfig'];
  56. }
  57. else
  58. {
  59. $DBSource = $DBInstance;
  60. $DBConfig = $this->_CurProgramConfig['DBConfig'];
  61. }
  62. $DBPerRequest = (!empty($DBConfig['DBPerRequest']))?$DBConfig['DBPerRequest']:false;
  63. }
  64. else
  65. {
  66. $DBInstance = '_DBToolsDefaultConnection';
  67. if(isset($this->_SysDBData[$DBInstance]))
  68. {
  69. $DBSource = $this->_SysDBData[$DBInstance]['DBSource'];
  70. $DBConfig = $this->_SysDBData[$DBInstance]['DBConfig'];
  71. }
  72. else
  73. {
  74. $DBSource = $DBInstance;
  75. $DBConfig = (!empty($this->_LoaderConfig['DBConfig']))?$this->_LoaderConfig['DBConfig']:$this->_SysEngine->configtools->db_config(array('SelectConfig'=>'auto'));
  76. }
  77. }
  78. $DBData = array('DBInstance'=>$DBInstance,'DBSource'=>$DBSource,'DBConfig'=>$DBConfig,'DBPerRequest'=>$DBPerRequest);
  79. /*
  80. * Initiate connection (This mean the connection never been made and stored (Per Request,First init))
  81. */
  82. if(!isset($this->_SysDBData[$DBInstance]))
  83. {
  84. $DBConnect = ($DBLibrary = $this->loadDBLibrary($DBConfig['DBType']))?$DBLibrary->connect($DBData):false;
  85. if($DBConnect!=false)
  86. {
  87. $DBData['DBSource'] = $DBConnect;
  88. }
  89. else
  90. {
  91. $this->_SysEngine->httptools->errorprocess(array('error'=>'500','message'=>'Can\'t connect to database.'));
  92. }
  93. /*
  94. * Then write DBData to GLOBALS variable under their own instance
  95. */
  96. if($DBPerRequest===false)
  97. {
  98. $GLOBALS['_SysDBData'][$DBInstance] = $DBData;
  99. }
  100. }
  101. return $DBData;
  102. }
  103. public function Execute($data=NULL)
  104. {
  105. $data['DBData'] = $this->getDBData($data);
  106. if((isset($data['SQL']['SQLSelect']) or isset($data['SQL']['SQLInsert']) or isset($data['SQL']['SQLUpdate']) or isset($data['SQL']['SQLDelete'])) and is_array($data['SQL']))
  107. {
  108. $BuildSQL = $this->BuildSQL($data);
  109. $data['SQL'] = $BuildSQL['SQL'];
  110. $data['SQLAction'] = $BuildSQL['SQLAction'];
  111. }
  112. if(strtoupper($data['SQLAction']) == 'SELECT')
  113. {
  114. $result = $this->getData($data);
  115. }
  116. else if(in_array(strtoupper($data['SQLAction']),array('INSERT','DELETE','UPDATE')))
  117. {
  118. $result = $this->executeData($data);
  119. }
  120. if($data['DBData']['DBPerRequest']===true)
  121. {
  122. $CloseDB = $this->Close($data);
  123. unset($data['DBData']['DBSource']);
  124. }
  125. if($result===false)
  126. {
  127. //$this->_SysEngine->httptools->errorprocess(array('error'=>'500','message'=>'Could not execute to your database.'));
  128. }
  129. return array('DBData'=>$data['DBData'],"SQL"=>$BuildSQL['SQL'],'result'=>$result);
  130. }
  131. private function getData($data=NULL)
  132. {
  133. /*
  134. * Query SQL to Database library
  135. */
  136. if(array_key_exists($data['DBData']['DBConfig']['DBType'],$this->DBToolsLibrary))
  137. {
  138. return $this->DBToolsLibrary[$data['DBData']['DBConfig']['DBType']]->getData($data);
  139. }
  140. return false;
  141. }
  142. private function executeData($data=NULL)
  143. {
  144. /*
  145. * Execute SQL Query to Database library
  146. */
  147. if(array_key_exists($data['DBData']['DBConfig']['DBType'],$this->DBToolsLibrary))
  148. {
  149. return $this->DBToolsLibrary[$data['DBData']['DBConfig']['DBType']]->executeData($data);
  150. }
  151. return false;
  152. }
  153. public function Close($data=NULL)
  154. {
  155. $DBInstance = $data['DBData']['DBInstance'];
  156. $_SysDBData = (array_key_exists($DBInstance,$this->_SysDBData))?$this->_SysDBData[$DBInstance]:$data['DBData'];
  157. $DBType = (!empty($_SysDBData['DBConfig']))?$_SysDBData['DBConfig']['DBType']:NULL;
  158. if(array_key_exists($DBType,$this->DBToolsLibrary))
  159. {
  160. $this->DBToolsLibrary[$DBType]->close(array('DBSource'=>$_SysDBData['DBSource']));
  161. unset($GLOBALS['_SysDBData'][$DBInstance]);
  162. }
  163. }
  164. public function BuildSQL($data=NULL)
  165. {
  166. $DBData = (!empty($data['DBData']))?$data['DBData']:((!empty($this->_SysDBData['_DBToolsDefaultConnection']))?$this->_SysDBData['_DBToolsDefaultConnection']:NULL);
  167. $DBInstance = (!empty($DBData['DBInstance']))?$DBData['DBInstance']:NULL;
  168. $DBType = (!empty($DBData['DBConfig']['DBType']))?$DBData['DBConfig']['DBType']:NULL;
  169. $SQLAction = strtoupper(str_replace('SQL','',current(array_keys($data['SQL']))));
  170. $SQL = false;
  171. if(array_key_exists($DBType,$this->DBToolsLibrary) and method_exists($this->DBToolsLibrary[$DBType],'BuildSQL'))
  172. {
  173. $SQL = $this->DBToolsLibrary[$DBType]->BuildSQL($data);
  174. }
  175. else
  176. {
  177. $SQL = $this->defaultBuildSQL($data);
  178. }
  179. return array('SQL'=>$SQL,'SQLAction'=>$SQLAction);
  180. }
  181. private function defaultBuildSQL($data=NULL,$deep=0,$loop=0)
  182. {
  183. $SQL = "";
  184. if(!empty($data['SQL']))
  185. {
  186. foreach($data['SQL'] as $key=>$val)
  187. {
  188. if(!empty($val) and method_exists($this,$key))
  189. {
  190. $SQL .= $this->$key($val,$deep,$loop);
  191. }
  192. }
  193. }
  194. if($deep>0)
  195. {
  196. $SQL = "(".$SQL.")";
  197. }
  198. return $SQL;
  199. }
  200. private function SQLSelect($SQL=array(),$deep=0,$loop=0)
  201. {
  202. $SQLSelect = '';
  203. if(!empty($SQL))
  204. {
  205. foreach($SQL as $key=>$val)
  206. {
  207. if(!empty($val))
  208. {
  209. $SQLSelect .= ($loop==0)?"SELECT ":",";
  210. if(!is_numeric($key) and !method_exists($this,$key))
  211. {
  212. $key1 = $key;
  213. $key = "SQLAS";
  214. $val = array($key1=>$val);
  215. }
  216. if(!is_numeric($key) and method_exists($this,$key))
  217. {
  218. $SQLSelect .= $this->$key($val,$deep,0);
  219. }
  220. else if(is_numeric($key) and is_array($val))
  221. {
  222. $deep++;
  223. $SQLSelect .= $this->defaultBuildSQL(array('SQL'=>$val),$deep);
  224. }
  225. else
  226. {
  227. $ExplodeVal = explode("'",$val);
  228. if(empty($ExplodeVal[0]) and !empty($val))
  229. {
  230. $val = substr($val,1,-1);
  231. }
  232. $JSONVal = json_decode($val);
  233. $val = (!empty($JSONVal))?$val:((!is_numeric($key))?addslashes($val):$val);
  234. $SQLSelect .= $val;
  235. }
  236. $loop++;
  237. }
  238. }
  239. }
  240. return $SQLSelect;
  241. }
  242. private function SQLAS($SQL=array(),$deep=0,$loop=0)
  243. {
  244. $SQLAS = '';
  245. if(!empty($SQL))
  246. {
  247. foreach($SQL as $key=>$val)
  248. {
  249. if($val!==NULL)
  250. {
  251. $SQLAS .= ($loop==0)?"":",";
  252. if(!is_numeric($key) and method_exists($this,$key))
  253. {
  254. $SQLAS .= $this->$key($val,$deep,$loop);
  255. }
  256. else if(is_array($val))
  257. {
  258. $deep++;
  259. $SQLAS .= $this->defaultBuildSQL(array('SQL'=>$val),$deep);
  260. }
  261. else
  262. {
  263. $SQLAS .= $val;
  264. }
  265. $SQLAS .= " AS `".$key."`";
  266. $loop++;
  267. }
  268. }
  269. }
  270. return $SQLAS;
  271. }
  272. private function SQLFrom($SQL=array(),$deep=0,$loop=0)
  273. {
  274. $SQLFrom = '';
  275. if(!empty($SQL))
  276. {
  277. foreach($SQL as $key=>$val)
  278. {
  279. if(!empty($val))
  280. {
  281. $SQLFrom .= ($loop==0)?" FROM ":",";
  282. if(!is_numeric($key) and method_exists($this,$key))
  283. {
  284. $SQLFrom .= $this->$key($val,$deep,$loop);
  285. }
  286. else if(is_numeric($key) and is_array($val))
  287. {
  288. $deep++;
  289. $SQLFrom .= $this->defaultBuildSQL(array('SQL'=>$val),$deep);
  290. }
  291. else
  292. {
  293. $SQLFrom .= ((is_string($key))?"`".$val."` ".$key."":"".$val."");
  294. }
  295. $loop++;
  296. }
  297. }
  298. }
  299. return $SQLFrom;
  300. }
  301. private function SQLJoin($SQL=array(),$deep=0,$loop=0)
  302. {
  303. $SQLJoin = '';
  304. if(!empty($SQL))
  305. {
  306. foreach($SQL as $key=>$val)
  307. {
  308. if(is_array($val))
  309. {
  310. $loop1=0;
  311. foreach($val as $key1=>$val1)
  312. {
  313. if(!empty($val1))
  314. {
  315. $loop1++;
  316. $SQLJoin .= (!empty($val1))?(" ".$key." JOIN "):"";
  317. if(!is_numeric($key1) and method_exists($this,$key1))
  318. {
  319. $SQLJoin .= $this->$key1($val1);
  320. }
  321. else if(is_numeric($key1) and is_array($val1))
  322. {
  323. $deep++;
  324. $SQLJoin .= $this->defaultBuildSQL(array('SQL'=>$val1),$deep);
  325. }
  326. else if(is_array($val1))
  327. {
  328. foreach($val1 as $key2=>$val2)
  329. {
  330. if(!empty($val2))
  331. {
  332. if(!is_numeric($key2) and method_exists($this,$key2))
  333. {
  334. $SQLJoin .= $key1." ".$this->$key2($val2);
  335. }
  336. else if(is_numeric($key2) and is_array($val2))
  337. {
  338. $deep++;
  339. $SQLJoin .= $this->defaultBuildSQL(array('SQL'=>$val2),$deep);
  340. }
  341. else
  342. {
  343. $SQLJoin .= ((is_string($key2))?"`".$key2."` ":"").$val2."";
  344. }
  345. }
  346. }
  347. }
  348. else
  349. {
  350. $SQLJoin .= ((!is_numeric($key1))?$key1.' ON ':'').$val1;
  351. }
  352. }
  353. }
  354. }
  355. else
  356. {
  357. $ExplodeVal = explode("'",$val);
  358. if(empty($ExplodeVal[0]) and !empty($val))
  359. {
  360. $val = substr($val,1,-1);
  361. }
  362. $JSONVal = json_decode($val,true);
  363. $val = (!empty($JSONVal))?$val:addslashes($val);
  364. $SQLJoin .= $val;
  365. }
  366. $loop++;
  367. }
  368. }
  369. return $SQLJoin;
  370. }
  371. private function SQLON($SQL=array(),$deep=0,$loop=0)
  372. {
  373. $SQLON = "";
  374. if(!empty($SQL))
  375. {
  376. $inloop=0;
  377. foreach($SQL as $key=>$val)
  378. {
  379. if($val!==NULL)
  380. {
  381. if($inloop>0 and !is_numeric($key) and !method_exists($this,$key))
  382. {
  383. $key1 = $key;
  384. $key = "SQLAND";
  385. $val = array($key1=>$val);
  386. }
  387. $SQLON .= ($loop==0)?" ON ":"";
  388. if(!is_numeric($key) and method_exists($this,$key))
  389. {
  390. $SQLON .= $this->$key($val,$deep,$loop);
  391. }
  392. else if(is_numeric($key) and is_array($val))
  393. {
  394. $deep++;
  395. $SQLON .= $this->defaultBuildSQL(array('SQL'=>$val),$deep);
  396. }
  397. else
  398. {
  399. $ExplodeVal = explode("'",$val);
  400. if(empty($ExplodeVal[0]) and !empty($val))
  401. {
  402. $val = substr($val,1,-1);
  403. }
  404. $JSONVal = json_decode($val,true);
  405. $val = (!empty($JSONVal))?$val:addslashes($val);
  406. $SQLON .= ((is_string($key))?"".$key."=":"").$val."";
  407. }
  408. $loop++;
  409. $inloop++;
  410. }
  411. }
  412. }
  413. return $SQLON;
  414. }
  415. private function SQLAND($SQL=array(),$deep=0,$loop=0)
  416. {
  417. $SQLAND = "";
  418. if(!empty($SQL))
  419. {
  420. foreach($SQL as $key=>$val)
  421. {
  422. if($val!==NULL)
  423. {
  424. $SQLAND .= ($loop==0 or $key==='SQLOR')?"":" AND ";
  425. if(!is_numeric($key) and method_exists($this,$key))
  426. {
  427. $SQLAND .= $this->$key($val,$deep,$loop);
  428. }
  429. else if(is_numeric($key) and is_array($val))
  430. {
  431. $deep++;
  432. $SQLAND .= $this->defaultBuildSQL(array('SQL'=>$val),$deep);
  433. }
  434. else
  435. {
  436. $ExplodeVal = explode("'",$val);
  437. if(empty($ExplodeVal[0]) and !empty($val))
  438. {
  439. $val = substr($val,1,-1);
  440. }
  441. $JSONVal = json_decode($val,true);
  442. $val = (!empty($JSONVal))?$val:addslashes($val);
  443. $SQLAND .= ((is_string($key))?" ".$key."=":"").$val."";
  444. }
  445. $loop++;
  446. }
  447. }
  448. }
  449. return $SQLAND;
  450. }
  451. private function SQLOR($SQL=array(),$deep=0,$loop=0)
  452. {
  453. $SQLOR = "";
  454. if(!empty($SQL))
  455. {
  456. foreach($SQL as $key=>$val)
  457. {
  458. if(!empty($val))
  459. {
  460. $SQLOR .= ($loop==0)?"":" OR ";
  461. if(!is_numeric($key) and method_exists($this,$key))
  462. {
  463. $SQLOR .= $this->$key($val,$deep,$loop);
  464. }
  465. else if(is_numeric($key) and is_array($val))
  466. {
  467. $deep++;
  468. $SQLOR .= $this->defaultBuildSQL(array('SQL'=>$val),$deep);
  469. }
  470. else
  471. {
  472. $ExplodeVal = explode("'",$val);
  473. if(empty($ExplodeVal[0]) and !empty($val))
  474. {
  475. $val = substr($val,1,-1);
  476. }
  477. $JSONVal = json_decode($val,true);
  478. $val = (!empty($JSONVal))?$val:addslashes($val);
  479. $SQLOR .= ((!is_numeric($key))?"".$key."='".$val."'":$val);
  480. }
  481. $loop++;
  482. }
  483. }
  484. }
  485. return $SQLOR;
  486. }
  487. private function SQLIN($SQL=array(),$deep=0,$loop=0)
  488. {
  489. $SQLIN = "";
  490. if(!empty($SQL))
  491. {
  492. $inloop = 0;
  493. foreach($SQL as $key=>$val)
  494. {
  495. if(!empty($val))
  496. {
  497. if($inloop>0 and !is_numeric($key) and !method_exists($this,$key))
  498. {
  499. $key1 = $key;
  500. $key = "SQLAND";
  501. $val = array("SQLIN"=>array($key1=>$val));
  502. }
  503. if(!is_numeric($key) and method_exists($this,$key))
  504. {
  505. $SQLIN .= $this->$key($val,$deep,$loop);
  506. }
  507. else if(is_numeric($key) and is_array($val))
  508. {
  509. $deep++;
  510. $SQLIN .= $this->defaultBuildSQL(array('SQL'=>$val),$deep);
  511. }
  512. else
  513. {
  514. $SQLIN .= ((!method_exists($this,$key))?$key:"")." IN ";
  515. $loop1 = 0;
  516. $SQLIN .= "(";
  517. foreach($val as $key1=>$val1)
  518. {
  519. if(!is_numeric($key1) and method_exists($this,$key1))
  520. {
  521. $SQLIN .= $this->$key1($val1,$deep,$loop);
  522. }
  523. else if(is_numeric($key1) and is_array($val1))
  524. {
  525. $SQLIN .= $this->defaultBuildSQL(array('SQL'=>$val1),$deep);
  526. }
  527. else
  528. {
  529. $SQLIN .= (($loop1>0)?",":"");
  530. $ExplodeVal = explode("'",$val1);
  531. if(empty($ExplodeVal[0]) and !empty($val))
  532. {
  533. $val1 = substr($val1,1,-1);
  534. }
  535. $JSONVal = json_decode($val1,true);
  536. $val1 = (!empty($JSONVal))?$val1:addslashes($val1);
  537. $SQLIN .= "'".$val1."'";
  538. $loop1++;
  539. }
  540. }
  541. $SQLIN .= ")";
  542. }
  543. $loop++;
  544. $inloop++;
  545. }
  546. }
  547. }
  548. return $SQLIN;
  549. }
  550. private function SQLNOTIN($SQL=array(),$deep=0,$loop=0)
  551. {
  552. $SQLNOTIN = "";
  553. if(!empty($SQL))
  554. {
  555. $inloop = 0;
  556. foreach($SQL as $key=>$val)
  557. {
  558. if(!empty($val))
  559. {
  560. if($inloop>0 and !is_numeric($key) and !method_exists($this,$key))
  561. {
  562. $key1 = $key;
  563. $key = "SQLAND";
  564. $val = array("SQLNOTIN"=>array($key1=>$val));
  565. //echo $key,"|";print_r($val);echo "<br><br>";
  566. }
  567. if(!is_numeric($key) and method_exists($this,$key))
  568. {
  569. $SQLNOTIN .= $this->$key($val,$deep,$loop);
  570. }
  571. else if(is_numeric($key) and is_array($val))
  572. {
  573. $deep++;
  574. $SQLNOTIN .= $this->defaultBuildSQL(array('SQL'=>$val),$deep);
  575. }
  576. else
  577. {
  578. $SQLNOTIN .= ((!method_exists($this,$key))?$key:"")." NOT IN ";
  579. $loop1 = 0;
  580. $SQLNOTIN .= "(";
  581. foreach($val as $key1=>$val1)
  582. {
  583. $SQLNOTIN .= (($loop1>0)?",":"");
  584. $ExplodeVal = explode("'",$val1);
  585. if(empty($ExplodeVal[0]) and !empty($val))
  586. {
  587. $val1 = substr($val1,1,-1);
  588. }
  589. $JSONVal = json_decode($val1,true);
  590. $val1 = (!empty($JSONVal))?$val1:addslashes($val1);
  591. $SQLNOTIN .= "'".$val1."'";
  592. $loop1++;
  593. }
  594. $SQLNOTIN .= ")";
  595. }
  596. $loop++;
  597. $inloop++;
  598. }
  599. }
  600. }
  601. return $SQLNOTIN;
  602. }
  603. private function SQLISNOT($SQL=array(),$deep=0,$loop=0)
  604. {
  605. $SQLISNOT = "";
  606. if(!empty($SQL))
  607. {
  608. $inloop = 0;
  609. foreach($SQL as $key=>$val)
  610. {
  611. if($val!='')
  612. {
  613. if($inloop>0 and !is_numeric($key) and !method_exists($this,$key))
  614. {
  615. $key1 = $key;
  616. $key = "SQLAND";
  617. $val = array("SQLISNOT"=>array($key1=>$val));
  618. }
  619. if(!is_numeric($key) and method_exists($this,$key))
  620. {
  621. $SQLISNOT .= $this->$key($val,$deep,$loop);
  622. }
  623. else if(is_numeric($key) and is_array($val))
  624. {
  625. $deep++;
  626. $SQLISNOT .= $this->defaultBuildSQL(array('SQL'=>$val),$deep);
  627. }
  628. else
  629. {
  630. $SQLISNOT .= ((!empty($key))?"".$key."":"")." IS NOT ".$val;
  631. }
  632. $loop++;
  633. $inloop++;
  634. }
  635. }
  636. }
  637. return $SQLISNOT;
  638. }
  639. private function SQLIS($SQL=array(),$deep=0,$loop=0)
  640. {
  641. $SQLIS = "";
  642. if(!empty($SQL))
  643. {
  644. $inloop = 0;
  645. foreach($SQL as $key=>$val)
  646. {
  647. if(!empty($val))
  648. {
  649. if($inloop>0 and !is_numeric($key) and !method_exists($this,$key))
  650. {
  651. $key1 = $key;
  652. $key = "SQLAND";
  653. $val = array("SQLIS"=>array($key1=>$val));
  654. }
  655. if(!is_numeric($key) and method_exists($this,$key))
  656. {
  657. $SQLIS .= $this->$key($val,$deep,$loop);
  658. }
  659. else if(is_numeric($key) and is_array($val))
  660. {
  661. $deep++;
  662. $SQLIS .= $this->defaultBuildSQL(array('SQL'=>$val),$deep);
  663. }
  664. else
  665. {
  666. $SQLIS .= ((!empty($key))?"".$key."":"")." IS ".$val;
  667. }
  668. $loop++;
  669. $inloop++;
  670. }
  671. }
  672. }
  673. return $SQLIS;
  674. }
  675. private function SQLIF($SQL=array(),$deep=0,$loop=0)
  676. {
  677. $SQLIF = "";
  678. if(!empty($SQL))
  679. {
  680. $outloop = 0;
  681. foreach($SQL as $key0=>$val0)
  682. {
  683. if(!is_numeric($key0) and method_exists($this,$key0))
  684. {
  685. $SQLIF .= $this->$key0($val0,$deep,$loop);
  686. }
  687. else if($outloop>=1)
  688. {
  689. $key0 = "SQLAND";
  690. $SQLIF .= $this->$key0(array("SQLIF"=>array($val0)),$deep,$loop);
  691. }
  692. else if(!empty($val0))
  693. {
  694. $inloop = 0;
  695. $count = count($val0);
  696. foreach($val0 as $key1=>$val1)
  697. {
  698. $SQLIF .= ($inloop==0)?"IF(":",";
  699. if(!is_numeric($key1) and method_exists($this,$key1))
  700. {
  701. $SQLIF .= $this->$key1($val1,$deep,$loop);
  702. }
  703. else if(is_numeric($key1) and is_array($val1))
  704. {
  705. $deep++;
  706. $SQLIF .= $this->defaultBuildSQL(array('SQL'=>$val1),$deep);
  707. }
  708. else
  709. {
  710. $ExplodeVal1 = explode("'",$val1);
  711. if(empty($ExplodeVal1[0]) and !empty($val1))
  712. {
  713. $val1 = substr($val1,1,-1);
  714. }
  715. $JSONVal1 = json_decode($val1,true);
  716. $val1 = (!empty($JSONVal1))?$val1:addslashes($val1);
  717. $val1 = ((strpos($val1,'=')===false)?"'".$val1."'":"".$val1."");
  718. $SQLIF .= ((!is_numeric($key1))?"".$key1."=".$val1."":"".$val1."");
  719. }
  720. $SQLIF .= ($inloop+1==$count)?")":"";
  721. $inloop++;
  722. }
  723. }
  724. $loop++;
  725. $outloop++;
  726. }
  727. }
  728. return $SQLIF;
  729. }
  730. private function SQLLIKE($SQL=array(),$deep=0,$loop=0)
  731. {
  732. $SQLLIKE = "";
  733. if(!empty($SQL))
  734. {
  735. $inloop = 0;
  736. foreach($SQL as $key=>$val)
  737. {
  738. if(!empty($val))
  739. {
  740. if($inloop>0 and !is_numeric($key) and !method_exists($this,$key))
  741. {
  742. $key1 = $key;
  743. $key = "SQLAND";
  744. $val = array("SQLLIKE"=>array($key1=>$val));
  745. }
  746. $SQLLIKE .= ((!is_numeric($key) and !method_exists($this,$key))?"".$key." LIKE ":"");
  747. if(!is_numeric($key) and method_exists($this,$key))
  748. {
  749. $SQLLIKE .= $this->$key($val,$deep,$loop);
  750. }
  751. else if(is_numeric($key) and is_array($val))
  752. {
  753. $deep++;
  754. $SQLLIKE .= $this->defaultBuildSQL(array('SQL'=>$val),$deep);
  755. }
  756. else
  757. {
  758. $ExplodeVal = explode("'",$val);
  759. if(empty($ExplodeVal[0]) and !empty($val))
  760. {
  761. $val = substr($val,1,-1);
  762. }
  763. $JSONVal = json_decode($val,true);
  764. $val = (!empty($JSONVal))?$val:addslashes($val);
  765. $SQLLIKE .= "'".$val."'";
  766. }
  767. $loop++;
  768. $inloop++;
  769. }
  770. }
  771. }
  772. return $SQLLIKE;
  773. }
  774. private function SQLBINARY($SQL=NULL,$deep=0,$loop=0)
  775. {
  776. $SQLBINARY = "";
  777. if(!empty($SQL))
  778. {
  779. foreach($SQL as $key=>$val)
  780. {
  781. if($val!==NULL)
  782. {
  783. $SQLBINARY .= ($loop==0 and !empty($val))?"":(($key==='SQLOR')?"":" AND ");
  784. if(!is_numeric($key) and method_exists($this,$key))
  785. {
  786. $SQLBINARY .= $this->$key($val,$deep,$loop);
  787. }
  788. else if(is_numeric($key) and is_array($val))
  789. {
  790. $deep++;
  791. $SQLBINARY .= $this->defaultBuildSQL(array('SQL'=>$val),$deep);
  792. }
  793. else
  794. {
  795. $ExplodeVal = explode("'",$val);
  796. if(empty($ExplodeVal[0]) and !empty($val))
  797. {
  798. $val = substr($val,1,-1);
  799. }
  800. $JSONVal = json_decode($val,true);
  801. $val = (!empty($JSONVal))?$val:addslashes($val);
  802. $SQLBINARY .= " BINARY ".((!is_numeric($key))?"".$key."='".$val."'":$val);
  803. }
  804. $loop++;
  805. }
  806. }
  807. }
  808. return $SQLBINARY;
  809. }
  810. private function SQLWhere($SQL=NULL,$deep=0,$loop=0)
  811. {
  812. $SQLWhere = "";
  813. if(!empty($SQL))
  814. {
  815. foreach($SQL as $key=>$val)
  816. {
  817. if($val!==NULL)
  818. {
  819. $SQLWhere .= ($loop==0 and !empty($val))?" WHERE ":(($key==='SQLOR')?"":" AND ");
  820. if(!is_numeric($key) and method_exists($this,$key))
  821. {
  822. $SQLWhere .= $this->$key($val,$deep,$loop);
  823. }
  824. else if(is_numeric($key) and is_array($val))
  825. {
  826. $deep++;
  827. $SQLWhere .= $this->defaultBuildSQL(array('SQL'=>$val),$deep);
  828. }
  829. else
  830. {
  831. $ExplodeVal = explode("'",$val);
  832. if(empty($ExplodeVal[0]) and !empty($val))
  833. {
  834. $val = substr($val,1,-1);
  835. }
  836. $JSONVal = json_decode($val,true);
  837. $val = (!empty($JSONVal))?$val:addslashes($val);
  838. $SQLWhere .= ((!is_numeric($key))?"".$key."='".$val."'":$val);
  839. }
  840. $loop++;
  841. }
  842. }
  843. }
  844. return $SQLWhere;
  845. }
  846. private function SQLOPERAND($SQL=NULL,$deep=0,$loop=0)
  847. {
  848. $SQLOPERAND = "";
  849. if(!empty($SQL))
  850. {
  851. $inloop = 0;
  852. foreach($SQL as $key0=>$val0)
  853. {
  854. if(!empty($val0))
  855. {
  856. foreach($val0 as $key1=>$val1)
  857. {
  858. if($inloop>0 and !is_numeric($key1) and !method_exists($this,$key1))
  859. {
  860. $key2 = $key0;
  861. $val1 = array("SQLOPERAND"=>array($key2=>array($key1=>$val1)));
  862. $key1 = "SQLAND";
  863. }
  864. //$SQLOPERAND .= ((!is_numeric($key) and !method_exists($this,$key))?"".$key." LIKE ":"");
  865. if(!is_numeric($key1) and method_exists($this,$key1))
  866. {
  867. $SQLOPERAND .= $this->$key1($val1,$deep,$loop);
  868. }
  869. else if(is_numeric($key1) and is_array($val1))
  870. {
  871. $deep++;
  872. $SQLOPERAND .= $this->defaultBuildSQL(array('SQL'=>$val1),$deep);
  873. }
  874. else
  875. {
  876. $SQLOPERAND .= $key1.' '.$key0.' '.$val1;
  877. }
  878. $loop++;
  879. $inloop++;
  880. }
  881. }
  882. }
  883. }
  884. return $SQLOPERAND;
  885. }
  886. private function SQLDelete($SQL=NULL,$deep=0,$loop=0)
  887. {
  888. $SQLDelete = "";
  889. if(!empty($SQL))
  890. {
  891. foreach($SQL as $key=>$val)
  892. {
  893. if(!empty($val))
  894. {
  895. $SQLDelete .= ($loop==0 and !empty($val))?" DELETE FROM ":"";
  896. if(!is_numeric($key) and method_exists($this,$key))
  897. {
  898. $SQLDelete .= $this->$key($val,$deep,$loop);
  899. }
  900. else if(is_numeric($key) and is_array($val))
  901. {
  902. $deep++;
  903. $SQLDelete .= $this->defaultBuildSQL(array('SQL'=>$val),$deep);
  904. }
  905. else
  906. {
  907. $ExplodeVal = explode("'",$val);
  908. if(empty($ExplodeVal[0]) and !empty($val))
  909. {
  910. $val = substr($val,1,-1);
  911. }
  912. $JSONVal = json_decode($val,true);
  913. $val = (!empty($JSONVal))?$val:addslashes($val);
  914. $SQLDelete .= "".$val."";
  915. }
  916. $loop++;
  917. }
  918. }
  919. }
  920. return $SQLDelete;
  921. }
  922. private function SQLUpdate($SQL=NULL,$deep=0,$loop=0)
  923. {
  924. $SQLUpdate = "";
  925. if(!empty($SQL))
  926. {
  927. foreach($SQL as $key=>$val)
  928. {
  929. if(!empty($val))
  930. {
  931. $SQLUpdate .= ($loop==0 and !empty($val))?" UPDATE ":",";
  932. if(!is_numeric($key) and method_exists($this,$key))
  933. {
  934. $SQLUpdate .= $this->$key($val,$deep,$loop);
  935. }
  936. else if(is_numeric($key) and is_array($val))
  937. {
  938. $deep++;
  939. $SQLUpdate .= $this->defaultBuildSQL(array('SQL'=>$val),$deep);
  940. }
  941. else
  942. {
  943. $ExplodeVal = explode("'",$val);
  944. if(empty($ExplodeVal[0]) and !empty($val))
  945. {
  946. $val = substr($val,1,-1);
  947. }
  948. $JSONVal = json_decode($val,true);
  949. $val = (!empty($JSONVal))?$val:addslashes($val);
  950. $SQLUpdate .= "".$val."";
  951. }
  952. $loop++;
  953. }
  954. }
  955. }
  956. return $SQLUpdate;
  957. }
  958. private function SQLInsert($SQL=NULL,$deep=0,$loop=0)
  959. {
  960. $SQLInsert = "";
  961. if(!empty($SQL))
  962. {
  963. foreach($SQL as $key=>$val)
  964. {
  965. if(!empty($val))
  966. {
  967. $SQLInsert .= ($loop==0 and !empty($val))?" INSERT INTO ":"";
  968. if(!is_numeric($key) and method_exists($this,$key))
  969. {
  970. $SQLInsert .= $this->$key($val,$deep,$loop);
  971. }
  972. else if(is_numeric($key) and is_array($val))
  973. {
  974. $deep++;
  975. $SQLInsert .= $this->defaultBuildSQL(array('SQL'=>$val),$deep);
  976. }
  977. else
  978. {
  979. $ExplodeVal = explode("'",$val);
  980. if(empty($ExplodeVal[0]) and !empty($val))
  981. {
  982. $val = substr($val,1,-1);
  983. }
  984. $JSONVal = json_decode($val,true);
  985. $val = (!empty($JSONVal))?$val:addslashes($val);
  986. $SQLInsert .= "".$val."";
  987. }
  988. $loop++;
  989. }
  990. }
  991. }
  992. return $SQLInsert;
  993. }
  994. private function SQLSet($SQL=NULL,$deep=0,$loop=0)
  995. {
  996. $SQLSet = "";
  997. if(!empty($SQL))
  998. {
  999. foreach($SQL as $key=>$val)
  1000. {
  1001. if($val!==NULL)
  1002. {
  1003. $SQLSet .= ($loop==0)?" SET ":",";
  1004. if(!is_numeric($key) and method_exists($this,$key))
  1005. {
  1006. $SQLSet .= $this->$key($val,$deep,$loop);
  1007. }
  1008. else if(is_array($val) and method_exists($this,end(array_keys($val))))
  1009. {
  1010. $SQLSet .= ((!is_numeric($key))?"".$key."=":"");
  1011. $key = end(array_keys($val));
  1012. $val = end(array_values($val));
  1013. $SQLSet .= $this->$key($val,$deep,$loop);
  1014. }
  1015. else if(is_array($val) and method_exists($this,key(array_keys($val))))
  1016. {
  1017. $key = key(array_keys($val));
  1018. $SQLSet .= $this->$key($val,$deep,$loop);
  1019. }
  1020. else if(is_numeric($key) and is_array($val))
  1021. {
  1022. $deep++;
  1023. $SQLSet .= $this->defaultBuildSQL(array('SQL'=>$val),$deep);
  1024. }
  1025. else
  1026. {
  1027. $ExplodeVal = explode("'",$val);
  1028. if(empty($ExplodeVal[0]) and !empty($val))
  1029. {
  1030. $val = substr($val,1,-1);
  1031. }
  1032. $JSONVal = json_decode($val,true);
  1033. $val = (!empty($JSONVal))?$val:addslashes($val);
  1034. $SQLSet .= ((!is_numeric($key))?"".$key."=":"").(($val!==NULL)?"'".$val."'":'NULL');
  1035. }
  1036. $loop++;
  1037. }
  1038. }
  1039. }
  1040. return $SQLSet;
  1041. }
  1042. private function SQLValues($SQL=NULL,$deep=0,$loop=0)
  1043. {
  1044. $SQLValues = "";
  1045. if(!empty($SQL))
  1046. {
  1047. $countColumn = count($SQL);
  1048. $countValue = ((count($SQL,COUNT_RECURSIVE))-($countColumn))/$countColumn;
  1049. $SQLColumn = "";
  1050. $SQLValue = "";
  1051. for($loop=0;$loop<$countValue;$loop++)
  1052. {
  1053. $columnloop = 0;
  1054. $SQLValue .= ($loop==0)?"":",";
  1055. foreach($SQL as $key=>$val)
  1056. {
  1057. $columnloop++;
  1058. if($loop==0)
  1059. {
  1060. $SQLColumn .= ($columnloop==1)?"":",";
  1061. $SQLColumn .= $key;
  1062. }
  1063. $SQLValue .= ($columnloop==1)?"(":",";
  1064. $ExplodeVal = explode("'",$val[$loop]);
  1065. if(empty($ExplodeVal[0]) and isset($val[$loop]) and !is_numeric($val[$loop]))
  1066. {
  1067. $val[$loop] = substr($val[$loop],1,-1);
  1068. }
  1069. $JSONVal = json_decode($val[$loop],true);
  1070. $val[$loop] = (!empty($JSONVal))?$val[$loop]:addslashes($val[$loop]);
  1071. //$SQLValue .= ($val[$loop]!==NULL)?((is_numeric($val[$loop]) and !empty($ExplodeVal[0]))?"".$val[$loop]."":"'".$val[$loop]."'"):'NULL';
  1072. $SQLValue .= ($val[$loop]!==NULL)?"'".$val[$loop]."'":'NULL';
  1073. $SQLValue .= ($columnloop==$countColumn)?")":"";
  1074. }
  1075. }
  1076. $SQLValues .= " (";
  1077. $SQLValues .= $SQLColumn;
  1078. $SQLValues .= ")";
  1079. $SQLValues .= " VALUES ";
  1080. $SQLValues .= $SQLValue;
  1081. }
  1082. return $SQLValues;
  1083. }
  1084. private function SQLGroup($SQL=NULL,$deep=0,$loop=0)
  1085. {
  1086. $SQLGroup = "";
  1087. if(!empty($SQL))
  1088. {
  1089. foreach($SQL as $key=>$val)
  1090. {
  1091. if(!empty($val))
  1092. {
  1093. $SQLGroup .= ($loop==0 and !empty($val))?" GROUP BY ":",";
  1094. if(!is_numeric($key) and method_exists($this,$key))
  1095. {
  1096. $SQLGroup .= $this->$key($val,$deep,$loop);
  1097. }
  1098. else if(is_numeric($key) and is_array($val))
  1099. {
  1100. $deep++;
  1101. $SQLGroup .= $this->defaultBuildSQL(array('SQL'=>$val),$deep);
  1102. }
  1103. else
  1104. {
  1105. $ExplodeVal = explode("'",$val);
  1106. if(empty($ExplodeVal[0]) and !empty($val))
  1107. {
  1108. $val = substr($val,1,-1);
  1109. }
  1110. $JSONVal = json_decode($val);
  1111. $val = (!empty($JSONVal))?$val:addslashes($val);
  1112. $SQLGroup .= "".$val."";
  1113. }
  1114. $loop++;
  1115. }
  1116. }
  1117. }
  1118. return $SQLGroup;
  1119. }
  1120. private function SQLOrder($SQL=NULL,$deep=0,$loop=0)
  1121. {
  1122. $SQLOrder = "";
  1123. if(!empty($SQL))
  1124. {
  1125. foreach($SQL as $key=>$val)
  1126. {
  1127. if(!empty($val))
  1128. {
  1129. $SQLOrder .= ($loop==0 and !empty($val))?" ORDER BY ":",";
  1130. if(!is_numeric($key) and method_exists($this,$key))
  1131. {
  1132. $SQLOrder .= $this->$key($val,$deep,$loop);
  1133. }
  1134. else if(is_numeric($key) and is_array($val))
  1135. {
  1136. $deep++;
  1137. $SQLOrder .= $this->defaultBuildSQL(array('SQL'=>$val),$deep);
  1138. }
  1139. else
  1140. {
  1141. $ExplodeVal = explode("'",$val);
  1142. if(empty($ExplodeVal[0]))
  1143. {
  1144. $val = substr($val,1,-1);
  1145. }
  1146. $JSONVal = json_decode($val);
  1147. $val = (!empty($JSONVal))?$val:addslashes($val);
  1148. $SQLOrder .= ((!is_numeric($key))?"".$key." ":"")."".$val."";
  1149. }
  1150. $loop++;
  1151. }
  1152. }
  1153. }
  1154. return $SQLOrder;
  1155. }
  1156. private function SQLHaving($SQL=NULL,$deep=0,$loop=0)
  1157. {
  1158. $SQLHaving = "";
  1159. if(!empty($SQL))
  1160. {
  1161. foreach($SQL as $key=>$val)
  1162. {
  1163. if(!empty($val))
  1164. {
  1165. $SQLHaving .= ($loop==0 and !empty($val))?" HAVING ":" AND ";
  1166. if(!is_numeric($key) and method_exists($this,$key))
  1167. {
  1168. $SQLHaving .= $this->$key($val,$deep,$loop);
  1169. }
  1170. else if(is_numeric($key) and is_array($val))
  1171. {
  1172. $deep++;
  1173. $SQLHaving .= $this->defaultBuildSQL(array('SQL'=>$val),$deep);
  1174. }
  1175. else
  1176. {
  1177. $ExplodeVal = explode("'",$val);
  1178. if(empty($ExplodeVal[0]) and !empty($val))
  1179. {
  1180. $val = substr($val,1,-1);
  1181. }
  1182. $JSONVal = json_decode($val);
  1183. $val = (!empty($JSONVal))?$val:addslashes($val);
  1184. $SQLHaving .= ((!is_numeric($key))?"".$key."='".$val."'":$val);
  1185. }
  1186. $loop++;
  1187. }
  1188. }
  1189. }
  1190. return $SQLHaving;
  1191. }
  1192. private function SQLLimit($SQL=NULL,$deep=0,$loop=0)
  1193. {
  1194. $SQLLimit = "";
  1195. if(!empty($SQL))
  1196. {
  1197. foreach($SQL as $key=>$val)
  1198. {
  1199. if(!empty($val))
  1200. {
  1201. $SQLLimit .= ($loop==0 and !empty($val))?" LIMIT ":",";
  1202. if(!is_numeric($key) and method_exists($this,$key))
  1203. {
  1204. $SQLLimit .= $this->$key($val,$deep,$loop);
  1205. }
  1206. else if(is_numeric($key) and is_array($val))
  1207. {
  1208. $deep++;
  1209. $SQLLimit .= $this->defaultBuildSQL(array('SQL'=>$val),$deep);
  1210. }
  1211. else
  1212. {
  1213. $ExplodeVal = explode("'",$val);
  1214. if(empty($ExplodeVal[0]) and !empty($val))
  1215. {
  1216. $val = substr($val,1,-1);
  1217. }
  1218. $JSONVal = json_decode($val);
  1219. $val = (!empty($JSONVal))?$val:addslashes($val);
  1220. $SQLLimit .= ((!empty($key))?"".$key.",":"")."".$val."";
  1221. }
  1222. $loop++;
  1223. }
  1224. }
  1225. }
  1226. return $SQLLimit;
  1227. }
  1228. private function SQLCONCAT($SQL=NULL,$deep=0,$loop=0)
  1229. {
  1230. $SQLCONCAT = "";
  1231. if(!empty($SQL))
  1232. {
  1233. foreach($SQL as $key=>$val)
  1234. {
  1235. if($val!==NULL)
  1236. {
  1237. $SQLCONCAT .= ($loop==0)?" CONCAT(":",";
  1238. if(!is_numeric($key) and method_exists($this,$key))
  1239. {
  1240. $SQLCONCAT .= $this->$key($val,$deep,$loop);
  1241. }
  1242. else if(is_numeric($key) and is_array($val))
  1243. {
  1244. $deep++;
  1245. $SQLCONCAT .= $this->defaultBuildSQL(array('SQL'=>$val),$deep);
  1246. }
  1247. else
  1248. {
  1249. $ExplodeVal = explode("'",$val);
  1250. if(empty($ExplodeVal[0]) and !empty($val))
  1251. {
  1252. $val = substr($val,1,-1);
  1253. }
  1254. $JSONVal = json_decode($val,true);
  1255. $val = (!empty($JSONVal))?$val:addslashes($val);
  1256. $SQLCONCAT .= ((is_string($key))?" ".$key."=":"").$val."";
  1257. }
  1258. $loop++;
  1259. $SQLCONCAT .= ($loop==count($SQL))?")":"";
  1260. }
  1261. }
  1262. }
  1263. return $SQLCONCAT;
  1264. }
  1265. private function SQLGROUPCONCAT($SQL=NULL,$deep=0,$loop=0)
  1266. {
  1267. $SQLGROUPCONCAT = "";
  1268. if(!empty($SQL))
  1269. {
  1270. $SEPARATOR = (!empty($SQL['SEPARATOR']))?$SQL['SEPARATOR']:"";
  1271. unset($SQL['SEPARATOR']);
  1272. foreach($SQL as $key=>$val)
  1273. {
  1274. if($val!==NULL)
  1275. {
  1276. $SQLGROUPCONCAT .= ($loop==0)?" GROUP_CONCAT(":",";
  1277. if(!is_numeric($key) and method_exists($this,$key))
  1278. {
  1279. $SQLGROUPCONCAT .= $this->$key($val,$deep,$loop);
  1280. }
  1281. else if(is_numeric($key) and is_array($val))
  1282. {
  1283. $deep++;
  1284. $SQLGROUPCONCAT .= $this->defaultBuildSQL(array('SQL'=>$val),$deep);
  1285. }
  1286. else
  1287. {
  1288. $ExplodeVal = explode("'",$val);
  1289. if(empty($ExplodeVal[0]) and !empty($val))
  1290. {
  1291. $val = substr($val,1,-1);
  1292. }
  1293. $JSONVal = json_decode($val,true);
  1294. $val = (!empty($JSONVal))?$val:addslashes($val);
  1295. $SQLGROUPCONCAT .= ((is_string($key))?" ".$key."=":"").$val."";
  1296. }
  1297. $loop++;
  1298. $SQLGROUPCONCAT .= ($loop==count($SQL))?" SEPARATOR '".$SEPARATOR."' )":"";
  1299. }
  1300. }
  1301. }
  1302. return $SQLGROUPCONCAT;
  1303. }
  1304. }
  1305. ?>