PageRenderTime 63ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

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

https://bitbucket.org/threetopia/thtech
PHP | 1166 lines | 1118 code | 18 blank | 30 comment | 84 complexity | 3013ed3bdda778b1c89b11ad3f8c1df9 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. public $_SysDBData = array();
  36. private function getDBData($data=NULL)
  37. {
  38. $DBConfig = (isset($data['DBConfig']))?$data['DBConfig']:NULL;
  39. $DBPerRequest = false;
  40. /*
  41. * Build database source and config
  42. */
  43. if(!empty($DBConfig))
  44. {
  45. $DBInstance = '_DBPerRequest';
  46. $DBSource = $DBInstance;
  47. $DBConfig = $DBConfig;
  48. $DBPerRequest = true;
  49. }
  50. else if(!empty($this->_CurProgramConfig['DBConfig']))
  51. {
  52. $DBInstance = $this->_CurProgramData['uprgm_name'];
  53. if(isset($this->_SysDBData[$this->_CurProgramData['uprgm_name']]))
  54. {
  55. $DBSource = $this->_SysDBData[$DBInstance]['DBSource'];
  56. $DBConfig = $this->_SysDBData[$DBInstance]['DBConfig'];
  57. }
  58. else
  59. {
  60. $DBSource = $DBInstance;
  61. $DBConfig = $this->_CurProgramConfig['DBConfig'];
  62. }
  63. $DBPerRequest = (!empty($DBConfig['DBPerRequest']))?$DBConfig['DBPerRequest']:false;
  64. }
  65. else
  66. {
  67. $DBInstance = '_DBToolsDefaultConnection';
  68. if(isset($this->_SysDBData[$DBInstance]))
  69. {
  70. $DBSource = $this->_SysDBData[$DBInstance]['DBSource'];
  71. $DBConfig = $this->_SysDBData[$DBInstance]['DBConfig'];
  72. }
  73. else
  74. {
  75. $DBSource = $DBInstance;
  76. $DBConfig = (!empty($this->_LoaderConfig['DBConfig']))?$this->_LoaderConfig['DBConfig']:$this->_SysEngine->configtools_db_config(array('SelectConfig'=>'auto'));
  77. }
  78. }
  79. $DBData = array('DBInstance'=>$DBInstance,'DBSource'=>$DBSource,'DBConfig'=>$DBConfig,'DBPerRequest'=>$DBPerRequest);
  80. /*
  81. * Initiate connection (This mean the connection never been made and stored (Per Request,First init))
  82. */
  83. if(!isset($this->_SysDBData[$DBInstance]))
  84. {
  85. $DBConnect = ($DBLibrary = $this->loadDBLibrary($DBConfig['DBType']))?$DBLibrary->connect($DBData):false;
  86. if($DBConnect!=false)
  87. {
  88. $DBData = array('DBInstance'=>$DBInstance,'DBSource'=>$DBConnect,'DBConfig'=>$DBConfig,'DBPerRequest'=>$DBPerRequest);
  89. }
  90. else
  91. {
  92. $this->_SysEngine->httptools_errorprocess(array('error'=>'500','message'=>'Can\'t connect to database.'));
  93. }
  94. /*
  95. * Then write DBData to GLOBALS variable under their own instance
  96. */
  97. if($DBPerRequest===false)
  98. {
  99. $this->_SysDBData[$DBInstance] = $DBData;
  100. }
  101. }
  102. return $DBData;
  103. }
  104. public function Execute($data=NULL)
  105. {
  106. $data['DBData'] = $this->getDBData($data);
  107. 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']))
  108. {
  109. $BuildSQL = $this->BuildSQL($data);
  110. $data['SQL'] = $BuildSQL['SQL'];
  111. $data['SQLAction'] = $BuildSQL['SQLAction'];
  112. }
  113. if(strtoupper($data['SQLAction']) == 'SELECT')
  114. {
  115. $result = $this->getData($data);
  116. }
  117. else if(in_array(strtoupper($data['SQLAction']),array('INSERT','DELETE','UPDATE')))
  118. {
  119. $result = $this->executeData($data);
  120. }
  121. if($data['DBData']['DBPerRequest']===true)
  122. {
  123. $CloseDB = $this->Close($data);
  124. unset($data['DBData']['DBSource']);
  125. }
  126. if($result===false)
  127. {
  128. $this->_SysEngine->httptools_errorprocess(array('error'=>'500','message'=>'Could not execute to your database.'));
  129. }
  130. return array('DBData'=>$data['DBData'],"SQL"=>$BuildSQL['SQL'],'result'=>$result);
  131. }
  132. private function getData($data=NULL)
  133. {
  134. /*
  135. * Query SQL to Database library
  136. */
  137. if(array_key_exists($data['DBData']['DBConfig']['DBType'],$this->DBToolsLibrary))
  138. {
  139. return $this->DBToolsLibrary[$data['DBData']['DBConfig']['DBType']]->getData($data);
  140. }
  141. return false;
  142. }
  143. private function executeData($data=NULL)
  144. {
  145. /*
  146. * Execute SQL Query to Database library
  147. */
  148. if(array_key_exists($data['DBData']['DBConfig']['DBType'],$this->DBToolsLibrary))
  149. {
  150. return $this->DBToolsLibrary[$data['DBData']['DBConfig']['DBType']]->executeData($data);
  151. }
  152. return false;
  153. }
  154. public function Close($data=NULL)
  155. {
  156. $DBInstance = $data['DBData']['DBInstance'];
  157. $_SysDBData = (array_key_exists($DBInstance,$this->_SysDBData))?$this->_SysDBData[$DBInstance]:$data['DBData'];
  158. $DBType = (!empty($_SysDBData['DBConfig']))?$_SysDBData['DBConfig']['DBType']:NULL;
  159. if(array_key_exists($DBType,$this->DBToolsLibrary))
  160. {
  161. $this->DBToolsLibrary[$DBType]->close(array('DBSource'=>$_SysDBData['DBSource']));
  162. unset($this->_SysDBData[$DBInstance]);
  163. }
  164. }
  165. public function BuildSQL($data=NULL)
  166. {
  167. $DBData = (!empty($data['DBData']))?$data['DBData']:((!empty($this->_SysDBData['default']))?$this->_SysDBData['default']:NULL);
  168. $DBInstance = (!empty($DBData['DBInstance']))?$DBData['DBInstance']:NULL;
  169. $DBType = (!empty($DBData['DBConfig']['DBType']))?$DBData['DBConfig']['DBType']:NULL;
  170. $SQLAction = strtoupper(str_replace('SQL','',current(array_keys($data['SQL']))));
  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))?"`".$key."` ".$val."":"".$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)?"":" 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);
  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. $SQLIF .= ((!is_numeric($key1))?$key1."=".((!empty($JSONVal1))?$val1:"'".addslashes($val1)."'"):"".$val1."");
  717. }
  718. $SQLIF .= ($inloop==$count)?")":"";
  719. $inloop++;
  720. }
  721. }
  722. $loop++;
  723. $outloop++;
  724. }
  725. }
  726. return $SQLIF;
  727. }
  728. private function SQLLIKE($SQL=array(),$deep=0,$loop=0)
  729. {
  730. $SQLLIKE = "";
  731. if(!empty($SQL))
  732. {
  733. $inloop = 0;
  734. foreach($SQL as $key=>$val)
  735. {
  736. if(!empty($val))
  737. {
  738. if($inloop>0 and !is_numeric($key) and !method_exists($this,$key))
  739. {
  740. $key1 = $key;
  741. $key = "SQLAND";
  742. $val = array("SQLLIKE"=>array($key1=>$val));
  743. }
  744. $SQLLIKE .= ((!is_numeric($key) and !method_exists($this,$key))?"".$key." LIKE ":"");
  745. if(!is_numeric($key) and method_exists($this,$key))
  746. {
  747. $SQLLIKE .= $this->$key($val,$deep,$loop);
  748. }
  749. else if(is_numeric($key) and is_array($val))
  750. {
  751. $deep++;
  752. $SQLLIKE .= $this->defaultBuildSQL(array('SQL'=>$val),$deep);
  753. }
  754. else
  755. {
  756. $SQLLIKE .= "'".$val."'";
  757. }
  758. $loop++;
  759. $inloop++;
  760. }
  761. }
  762. }
  763. return $SQLLIKE;
  764. }
  765. private function SQLWhere($SQL=NULL,$deep=0,$loop=0)
  766. {
  767. $SQLWhere = "";
  768. if(!empty($SQL))
  769. {
  770. foreach($SQL as $key=>$val)
  771. {
  772. if($val!==NULL)
  773. {
  774. $SQLWhere .= ($loop==0 and !empty($val))?" WHERE ":(($key==='SQLOR')?"":" AND ");
  775. if(!is_numeric($key) and method_exists($this,$key))
  776. {
  777. $SQLWhere .= $this->$key($val,$deep,$loop);
  778. }
  779. else if(is_numeric($key) and is_array($val))
  780. {
  781. $deep++;
  782. $SQLWhere .= $this->defaultBuildSQL(array('SQL'=>$val),$deep);
  783. }
  784. else
  785. {
  786. $ExplodeVal = explode("'",$val);
  787. if(empty($ExplodeVal[0]) and !empty($val))
  788. {
  789. $val = substr($val,1,-1);
  790. }
  791. $JSONVal = json_decode($val,true);
  792. $val = (!empty($JSONVal))?$val:addslashes($val);
  793. $SQLWhere .= ((!is_numeric($key))?"".$key."='".$val."'":$val);
  794. }
  795. $loop++;
  796. }
  797. }
  798. }
  799. return $SQLWhere;
  800. }
  801. private function SQLOPERAND($SQL=NULL,$deep=0,$loop=0)
  802. {
  803. $SQLOPERAND = "";
  804. if(!empty($SQL))
  805. {
  806. $inloop = 0;
  807. foreach($SQL as $key0=>$val0)
  808. {
  809. if(!empty($val0))
  810. {
  811. foreach($val0 as $key1=>$val1)
  812. {
  813. if($inloop>0 and !is_numeric($key1) and !method_exists($this,$key1))
  814. {
  815. $key2 = $key0;
  816. $val1 = array("SQLOPERAND"=>array($key2=>array($key1=>$val1)));
  817. $key1 = "SQLAND";
  818. }
  819. //$SQLOPERAND .= ((!is_numeric($key) and !method_exists($this,$key))?"".$key." LIKE ":"");
  820. if(!is_numeric($key1) and method_exists($this,$key1))
  821. {
  822. $SQLOPERAND .= $this->$key1($val1,$deep,$loop);
  823. }
  824. else if(is_numeric($key1) and is_array($val1))
  825. {
  826. $deep++;
  827. $SQLOPERAND .= $this->defaultBuildSQL(array('SQL'=>$val1),$deep);
  828. }
  829. else
  830. {
  831. $SQLOPERAND .= $key1.' '.$key0.' '.$val1;
  832. }
  833. $loop++;
  834. $inloop++;
  835. }
  836. }
  837. }
  838. }
  839. return $SQLOPERAND;
  840. }
  841. private function SQLUpdate($SQL=NULL,$deep=0,$loop=0)
  842. {
  843. $SQLUpdate = "";
  844. if(!empty($SQL))
  845. {
  846. foreach($SQL as $key=>$val)
  847. {
  848. if(!empty($val))
  849. {
  850. $SQLUpdate .= ($loop==0 and !empty($val))?" UPDATE ":",";
  851. if(!is_numeric($key) and method_exists($this,$key))
  852. {
  853. $SQLUpdate .= $this->$key($val,$deep,$loop);
  854. }
  855. else if(is_numeric($key) and is_array($val))
  856. {
  857. $deep++;
  858. $SQLUpdate .= $this->defaultBuildSQL(array('SQL'=>$val),$deep);
  859. }
  860. else
  861. {
  862. $ExplodeVal = explode("'",$val);
  863. if(empty($ExplodeVal[0]) and !empty($val))
  864. {
  865. $val = substr($val,1,-1);
  866. }
  867. $JSONVal = json_decode($val,true);
  868. $val = (!empty($JSONVal))?$val:addslashes($val);
  869. $SQLUpdate .= "".$val."";
  870. }
  871. $loop++;
  872. }
  873. }
  874. }
  875. return $SQLUpdate;
  876. }
  877. private function SQLInsert($SQL=NULL,$deep=0,$loop=0)
  878. {
  879. $SQLInsert = "";
  880. if(!empty($SQL))
  881. {
  882. foreach($SQL as $key=>$val)
  883. {
  884. if(!empty($val))
  885. {
  886. $SQLInsert .= ($loop==0 and !empty($val))?" INSERT INTO ":"";
  887. if(!is_numeric($key) and method_exists($this,$key))
  888. {
  889. $SQLInsert .= $this->$key($val,$deep,$loop);
  890. }
  891. else if(is_numeric($key) and is_array($val))
  892. {
  893. $deep++;
  894. $SQLInsert .= $this->defaultBuildSQL(array('SQL'=>$val),$deep);
  895. }
  896. else
  897. {
  898. $ExplodeVal = explode("'",$val);
  899. if(empty($ExplodeVal[0]) and !empty($val))
  900. {
  901. $val = substr($val,1,-1);
  902. }
  903. $JSONVal = json_decode($val,true);
  904. $val = (!empty($JSONVal))?$val:addslashes($val);
  905. $SQLInsert .= "".$val."";
  906. }
  907. $loop++;
  908. }
  909. }
  910. }
  911. return $SQLInsert;
  912. }
  913. private function SQLSet($SQL=NULL,$deep=0,$loop=0)
  914. {
  915. $SQLSet = "";
  916. if(!empty($SQL))
  917. {
  918. foreach($SQL as $key=>$val)
  919. {
  920. if($val!==NULL)
  921. {
  922. $SQLSet .= ($loop==0)?" SET ":",";
  923. if(!is_numeric($key) and method_exists($this,$key))
  924. {
  925. $SQLSet .= $this->$key($val,$deep,$loop);
  926. }
  927. else if(is_numeric($key) and is_array($val))
  928. {
  929. $deep++;
  930. $SQLSet .= $this->defaultBuildSQL(array('SQL'=>$val),$deep);
  931. }
  932. else
  933. {
  934. $ExplodeVal = explode("'",$val);
  935. if(empty($ExplodeVal[0]) and !empty($val))
  936. {
  937. $val = substr($val,1,-1);
  938. }
  939. $JSONVal = json_decode($val,true);
  940. $val = (!empty($JSONVal))?$val:addslashes($val);
  941. $SQLSet .= ((!is_numeric($key))?"".$key."=":"").(($val!==NULL)?"'".$val."'":'NULL');
  942. }
  943. $loop++;
  944. }
  945. }
  946. }
  947. return $SQLSet;
  948. }
  949. private function SQLValues($SQL=NULL,$deep=0,$loop=0)
  950. {
  951. $SQLValues = "";
  952. if(!empty($SQL))
  953. {
  954. $countColumn = count($SQL);
  955. $countValue = ((count($SQL,COUNT_RECURSIVE))-($countColumn))/$countColumn;
  956. $SQLColumn = "";
  957. $SQLValue = "";
  958. for($loop=0;$loop<$countValue;$loop++)
  959. {
  960. $columnloop = 0;
  961. $SQLValue .= ($loop==0)?"":",";
  962. foreach($SQL as $key=>$val)
  963. {
  964. $columnloop++;
  965. if($loop==0)
  966. {
  967. $SQLColumn .= ($columnloop==1)?"":",";
  968. $SQLColumn .= $key;
  969. }
  970. $SQLValue .= ($columnloop==1)?"(":",";
  971. $ExplodeVal = explode("'",$val[$loop]);
  972. if(empty($ExplodeVal[0]) and isset($val[$loop]) and !is_numeric($val[$loop]))
  973. {
  974. $val[$loop] = substr($val[$loop],1,-1);
  975. }
  976. $JSONVal = json_decode($val[$loop],true);
  977. $val[$loop] = (!empty($JSONVal))?$val[$loop]:addslashes($val[$loop]);
  978. $SQLValue .= ($val[$loop]!==NULL)?(($val[$loop]!='' and is_numeric($val[$loop]))?"".$val[$loop]."":"'".$val[$loop]."'"):'NULL';
  979. $SQLValue .= ($columnloop==$countColumn)?")":"";
  980. }
  981. }
  982. $SQLValues .= " (";
  983. $SQLValues .= $SQLColumn;
  984. $SQLValues .= ")";
  985. $SQLValues .= " VALUES ";
  986. $SQLValues .= $SQLValue;
  987. }
  988. return $SQLValues;
  989. }
  990. private function SQLGroup($SQL=NULL,$deep=0,$loop=0)
  991. {
  992. $SQLGroup = "";
  993. if(!empty($SQL))
  994. {
  995. foreach($SQL as $key=>$val)
  996. {
  997. if(!empty($val))
  998. {
  999. $SQLGroup .= ($loop==0 and !empty($val))?" GROUP BY ":",";
  1000. if(!is_numeric($key) and method_exists($this,$key))
  1001. {
  1002. $SQLGroup .= $this->$key($val,$deep,$loop);
  1003. }
  1004. else if(is_numeric($key) and is_array($val))
  1005. {
  1006. $deep++;
  1007. $SQLGroup .= $this->defaultBuildSQL(array('SQL'=>$val),$deep);
  1008. }
  1009. else
  1010. {
  1011. $ExplodeVal = explode("'",$val);
  1012. if(empty($ExplodeVal[0]) and !empty($val))
  1013. {
  1014. $val = substr($val,1,-1);
  1015. }
  1016. $JSONVal = json_decode($val);
  1017. $val = (!empty($JSONVal))?$val:addslashes($val);
  1018. $SQLGroup .= "".$val."";
  1019. }
  1020. $loop++;
  1021. }
  1022. }
  1023. }
  1024. return $SQLGroup;
  1025. }
  1026. private function SQLOrder($SQL=NULL,$deep=0,$loop=0)
  1027. {
  1028. $SQLOrder = "";
  1029. if(!empty($SQL))
  1030. {
  1031. foreach($SQL as $key=>$val)
  1032. {
  1033. if(!empty($val))
  1034. {
  1035. $SQLOrder .= ($loop==0 and !empty($val))?" ORDER BY ":",";
  1036. if(!is_numeric($key) and method_exists($this,$key))
  1037. {
  1038. $SQLOrder .= $this->$key($val,$deep,$loop);
  1039. }
  1040. else if(is_numeric($key) and is_array($val))
  1041. {
  1042. $deep++;
  1043. $SQLOrder .= $this->defaultBuildSQL(array('SQL'=>$val),$deep);
  1044. }
  1045. else
  1046. {
  1047. $ExplodeVal = explode("'",$val);
  1048. if(empty($ExplodeVal[0]))
  1049. {
  1050. $val = substr($val,1,-1);
  1051. }
  1052. $JSONVal = json_decode($val);
  1053. $val = (!empty($JSONVal))?$val:addslashes($val);
  1054. $SQLOrder .= ((!is_numeric($key))?"".$key." ":"")."".$val."";
  1055. }
  1056. $loop++;
  1057. }
  1058. }
  1059. }
  1060. return $SQLOrder;
  1061. }
  1062. private function SQLHaving($SQL=NULL,$deep=0,$loop=0)
  1063. {
  1064. $SQLHaving = "";
  1065. if(!empty($SQL))
  1066. {
  1067. foreach($SQL as $key=>$val)
  1068. {
  1069. if(!empty($val))
  1070. {
  1071. $SQLHaving .= ($loop==0 and !empty($val))?" HAVING ":" AND ";
  1072. if(!is_numeric($key) and method_exists($this,$key))
  1073. {
  1074. $SQLHaving .= $this->$key($val,$deep,$loop);
  1075. }
  1076. else if(is_numeric($key) and is_array($val))
  1077. {
  1078. $deep++;
  1079. $SQLHaving .= $this->defaultBuildSQL(array('SQL'=>$val),$deep);
  1080. }
  1081. else
  1082. {
  1083. $ExplodeVal = explode("'",$val);
  1084. if(empty($ExplodeVal[0]) and !empty($val))
  1085. {
  1086. $val = substr($val,1,-1);
  1087. }
  1088. $JSONVal = json_decode($val);
  1089. $val = (!empty($JSONVal))?$val:addslashes($val);
  1090. $SQLHaving .= ((!is_numeric($key))?"".$key."='".$val."'":"".$val."");
  1091. }
  1092. $loop++;
  1093. }
  1094. }
  1095. }
  1096. return $SQLHaving;
  1097. }
  1098. private function SQLLimit($SQL=NULL,$deep=0,$loop=0)
  1099. {
  1100. $SQLHaving = "";
  1101. if(!empty($SQL))
  1102. {
  1103. foreach($SQL as $key=>$val)
  1104. {
  1105. if(!empty($val))
  1106. {
  1107. $SQLHaving .= ($loop==0 and !empty($val))?" LIMIT ":",";
  1108. if(!is_numeric($key) and method_exists($this,$key))
  1109. {
  1110. $SQLHaving .= $this->$key($val,$deep,$loop);
  1111. }
  1112. else if(is_numeric($key) and is_array($val))
  1113. {
  1114. $deep++;
  1115. $SQLHaving .= $this->defaultBuildSQL(array('SQL'=>$val),$deep);
  1116. }
  1117. else
  1118. {
  1119. $ExplodeVal = explode("'",$val);
  1120. if(empty($ExplodeVal[0]) and !empty($val))
  1121. {
  1122. $val = substr($val,1,-1);
  1123. }
  1124. $JSONVal = json_decode($val);
  1125. $val = (!empty($JSONVal))?$val:addslashes($val);
  1126. $SQLHaving .= ((!empty($key))?"".$key.",":"")."".$val."";
  1127. }
  1128. $loop++;
  1129. }
  1130. }
  1131. }
  1132. return $SQLHaving;
  1133. }
  1134. }
  1135. ?>