PageRenderTime 25ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 0ms

/ecerp/System/Database/DB.php

http://phpfor.googlecode.com/
PHP | 488 lines | 258 code | 53 blank | 177 comment | 23 complexity | 0895845cc80099e4c253921f2ed3eb2a MD5 | raw file
  1. <?php
  2. /**
  3. * ??????
  4. * @author Terry
  5. * @copyright baoling@yeah.net
  6. *
  7. */
  8. class DB{
  9. /**
  10. * ??Mysql??
  11. *
  12. * @var DB_Mysql
  13. */
  14. var $db;
  15. var $pre='';
  16. var $table;
  17. var $order;
  18. var $where;
  19. var $arr=array();
  20. var $sql=null;
  21. function DB($DB_config){
  22. if(is_array($DB_config) && $DB_config['adapter'])
  23. $adapterName='DB_'.$DB_config['adapter'];
  24. else{
  25. showError(__T('Config\'s argument error,or miss adapter,please check conf.php!'));
  26. }
  27. if(isset($DB_config['pre']))
  28. $this->pre=$DB_config['pre'];
  29. require_once(SYSBASE.'Database/DB/'.$DB_config['adapter'].'.php');
  30. $this->db= new $adapterName($DB_config);
  31. }
  32. /**
  33. * ????????
  34. *
  35. * @param ?? $pre
  36. */
  37. function setPre($pre){
  38. $this->pre=$pre;
  39. }
  40. /**
  41. * ???????? ??
  42. *
  43. * @param ?? $table
  44. */
  45. function setTable($table)
  46. {
  47. if(!empty($table)){
  48. $this->table=str_replace('#',$this->pre,$table);
  49. }
  50. }
  51. function stripTpre($str){
  52. return str_replace('#',$this->pre,$str);
  53. }
  54. /**
  55. * ?????sql ??
  56. *
  57. * @param sql?? $sql
  58. */
  59. function setSql($sql){
  60. if(!empty($sql)){
  61. $this->sql=str_replace('#',$this->pre,$sql);
  62. }
  63. }
  64. //??sql??
  65. function getSql(){
  66. return $this->sql;
  67. }
  68. //????
  69. function setOrder($order){
  70. if((bool)$order){
  71. $this->order=' order by '.$order;
  72. }else{
  73. $this->order='';
  74. }
  75. }
  76. //????
  77. function setWhere($where){
  78. if(!(bool)$where){
  79. $where=' 1=1 ';
  80. }
  81. $this->where=$where;
  82. }
  83. //????
  84. function setField($filed){
  85. $this->field=$filed;
  86. }
  87. //????
  88. function setArr($arr){
  89. $this->arr=$arr; //$arr = array(0=>array('name'=>'ssss')); ????
  90. }
  91. /**
  92. * ???????
  93. *
  94. * @param ?? $table
  95. * @param ?? $field
  96. * @param ?? $if
  97. * @param ?? $order
  98. */
  99. function select($table,$field,$where='',$order=''){
  100. $this->setTable($table);
  101. $this->setField($field);
  102. $this->setWhere($where);
  103. $this->setOrder($order);
  104. $this->_select();
  105. return $this->sql;
  106. }
  107. function _select(){
  108. $this->sql='select '.$this->field.' from '.$this->table.' where '.$this->where.' '.$this->order;
  109. return $this->sql;
  110. }
  111. /**
  112. * ???????
  113. *
  114. * @param ?? $table
  115. * @param ?? $if
  116. */
  117. function delete($table,$where){
  118. $this->setTable($table);
  119. $this->setWhere($where);
  120. return $this->_delete();
  121. }
  122. function _delete(){
  123. $this->sql='delete from '.$this->table.' where '.$this->where;
  124. return $this->sql;
  125. }
  126. /**
  127. * ????
  128. *
  129. * @param ??? $no_p
  130. * @param ????? $title_rows
  131. * @param URL?? $set_url
  132. * @param ????SQL $sqlcount
  133. * @param ??SQL $sql
  134. * @return array
  135. */
  136. function toPage($no_p,$title_rows,$sqlcount=null,$sql=null){
  137. if(!$sql)
  138. $sql = $this->sql;
  139. if(!$sqlcount){
  140. $total=$this->numRows($sql);
  141. }else{
  142. $total=$this->getOne($sqlcount);
  143. }
  144. $totalpage=ceil($total/$title_rows);
  145. if($no_p<1) $no_p=1;
  146. if($no_p>$totalpage) $no_p=$totalpage;
  147. if($total>0){
  148. $sql=$this->selectLimit($sql,$title_rows,($no_p-1)*$title_rows);
  149. $list=$this->getAll($sql);
  150. }else{
  151. $list=null;
  152. }
  153. $arr["ls"]= $list; //????
  154. $arr["total"]= $totalpage;//????
  155. $arr['start']=$no_p; //???
  156. $arr['count']=$total;
  157. return $arr;
  158. }
  159. /**
  160. * ??????
  161. *
  162. * @param ??? $table
  163. * @param ?? $if
  164. * @param ??? $arr
  165. */
  166. function update($table,$if,$arr){
  167. $this->setTable($table);
  168. $this->setWhere($if);
  169. $this->setArr($arr);
  170. return $this->_update();
  171. }
  172. function _update(){
  173. $row=$this->arr;
  174. $fieldValuePairs = array();
  175. foreach ($row as $fieldName => $value) {
  176. if(is_Instanceof($value,'SP_DB_Expr')){
  177. $fieldValuePairs[] = $this->db->q_field($fieldName).
  178. ' = ' . $value->get();
  179. }else{
  180. $fieldValuePairs[] = $this->db->q_field($fieldName).
  181. ' = ' . $this->db->q_str($value);
  182. }
  183. }
  184. $fieldValuePairs = implode(', ', $fieldValuePairs);
  185. $this->sql='update '.$this->table.' set '. $fieldValuePairs.' where '.$this->where;
  186. return $this->sql;
  187. }
  188. /**
  189. * ??????
  190. *
  191. * @param ??? $table
  192. * @param ????,? $arr
  193. * ?:insert('users',array('xiao'=>'123456'))
  194. */
  195. function insert($table,$arr){
  196. $this->setTable($table);
  197. $this->setArr($arr);
  198. return $this->_insert();
  199. }
  200. /**
  201. * ?????????ID
  202. *
  203. *
  204. * @return Mixed
  205. */
  206. function insertId(){
  207. return $this->db->insertId();
  208. }
  209. function _insert(){
  210. $row=$this->arr;
  211. $fields = array();
  212. $values = array();
  213. foreach ($row as $fieldName => $value) {
  214. $fields[] = $this->db->q_field($fieldName);
  215. if(is_Instanceof($value,'SP_DB_Expr')){
  216. $values[] = $value->get();
  217. }else{
  218. $values[] = $this->db->q_str($value);
  219. }
  220. }
  221. $fields=implode(',',$fields);
  222. $values=implode(',',$values);
  223. $this->sql='insert into '.$this->table.' ('. $fields.') values ( '.$values.') ';
  224. return $this->sql;
  225. }
  226. /**
  227. * ?????????
  228. *
  229. * @param ??SQL $sql
  230. * @param ??? $length
  231. * @param Offset $offset
  232. * @return string $Sql
  233. */
  234. function selectLimit($sql=null, $length = null, $offset = null){
  235. if($sql!=null){
  236. $this->sql=$sql;
  237. }
  238. $this->sql=$this->db->selectLimit($this->sql,$length,$offset);
  239. }
  240. /**
  241. * ???? ???????? sql ????ok
  242. *
  243. */
  244. function echo_sql(){
  245. echo $this->sql;
  246. exit();
  247. }
  248. /**
  249. * ????
  250. *
  251. * @param string|resource $sql
  252. *
  253. * @return Mixed
  254. */
  255. function query($sql=false) {
  256. if(!$sql) {
  257. $sql=$this->sql;
  258. } else {
  259. $this->setSql($sql);
  260. }
  261. //??log_db
  262. //$this->db->query("insert log_db (op_sql, op_time) values('" . addslashes($this->sql) . "', '" . date('Y-m-d H:i:s') . "')");
  263. return $this->db->query($this->sql);
  264. }
  265. /**
  266. * ????????????
  267. *
  268. * @param string|resource $sql
  269. *
  270. * @return mixed
  271. */
  272. function getAll($sql=false){
  273. if(!$sql)
  274. $sql=$this->sql;
  275. else
  276. $this->setSql($sql);
  277. return $this->db->getAll($this->sql);
  278. }
  279. /**
  280. * ??????????????????
  281. *
  282. * @param string|resource $sql
  283. *
  284. * @return mixed
  285. */
  286. function getOne($sql=false)
  287. {
  288. if(!$sql)
  289. $sql=$this->sql;
  290. else
  291. $this->setSql($sql);
  292. return $this->db->getOne($this->sql);
  293. }
  294. /**
  295. * ????????????
  296. *
  297. * @param string|resource $sql
  298. *
  299. * @return mixed
  300. */
  301. function getRow($sql=false)
  302. {
  303. if(!$sql)
  304. $sql=$this->sql;
  305. else
  306. $this->setSql($sql);
  307. return $this->db->getRow($this->sql);
  308. }
  309. /**
  310. * ??????????????
  311. *
  312. * @param string|resource $sql
  313. * @param int $col ??????0 ????
  314. *
  315. * @return mixed
  316. */
  317. function getCol($col = 0,$sql=false)
  318. {
  319. if(!$sql)
  320. $sql=$this->sql;
  321. else
  322. $this->setSql($sql);
  323. return $this->db->getCol($this->sql,$col);
  324. }
  325. /**
  326. * ???????Key-Value???
  327. *
  328. * @param string|resource $sql
  329. * @return Int
  330. */
  331. function getAssoc($sql=false){
  332. if(!$sql)
  333. $sql=$this->sql;
  334. else
  335. $this->setSql($sql);
  336. return $this->db->getAssoc($this->sql);
  337. }
  338. function fetchArray($resource){
  339. return $this->db->fetchArray($resource);
  340. }
  341. /**
  342. * Sql?????????
  343. *
  344. * @return Int
  345. */
  346. function numRows($query){
  347. return $this->db->numRows($query);
  348. }
  349. /**
  350. * ?????
  351. *
  352. * @return Int
  353. */
  354. function affectedRows(){
  355. return $this->db->affectedRows();
  356. }
  357. /**
  358. * ?????
  359. *
  360. */
  361. function close(){
  362. $this->db->close();
  363. }
  364. function strRandom(){
  365. return $this->db->strRandom();
  366. }
  367. /**
  368. * ????
  369. *
  370. */
  371. function startTrans(){
  372. $this->db->startTrans();
  373. }
  374. /**
  375. * ????
  376. *
  377. */
  378. function commit()
  379. {
  380. $this->db->commit();
  381. }
  382. /**
  383. * ????
  384. *
  385. */
  386. function rollback()
  387. {
  388. $this->db->rollback();
  389. }
  390. /**
  391. * ????????
  392. *
  393. */
  394. function transErrors()
  395. {
  396. $this->db->transErrors();
  397. }
  398. /**
  399. * ?????????
  400. *
  401. * @return Int
  402. */
  403. function getQueryNum(){
  404. return $this->db->getQueryNum();
  405. }
  406. /**
  407. * ??????????????
  408. *
  409. * @param Int $time
  410. * @return unknown
  411. */
  412. function DBTime($time=''){
  413. if ($time=='') {
  414. $time=time();
  415. }
  416. return $this->db->dbTimeStamp($time);
  417. }
  418. function q_str($str,$addquote=true){
  419. return $this->db->q_str($str,$addquote);
  420. }
  421. }
  422. class SP_DB_Expr{
  423. /**
  424. * Storage for the SQL expression.
  425. *
  426. * @var string
  427. */
  428. var $_expr;
  429. function SP_DB_Expr($expr){
  430. $this->_expr = (string) $expr;
  431. }
  432. function get(){
  433. return $this->_expr;
  434. }
  435. }