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

/aoliz/core/include/core/db.tools.php

http://phpfor.googlecode.com/
PHP | 139 lines | 119 code | 20 blank | 0 comment | 36 complexity | 247007c74a4f9bd3e51bfb1e9f981939 MD5 | raw file
  1. <?php
  2. function db_get_update_sql(&$db,&$rs, $data, $InsertIfNoResult = false,$insertData=null,$ignore=false){
  3. if(!is_resource($rs['rs'])){
  4. trigger_error('GetUpdateSQL: '.$rs['sql'].' error ',E_USER_ERROR);
  5. }
  6. mysql_data_seek($rs['rs'],0);
  7. $row = mysql_fetch_assoc($rs['rs']);
  8. if($InsertIfNoResult && !$row){
  9. return db_get_insert_sql($db,$rs,$data);
  10. }
  11. if (preg_match('/FROM\s+([]0-9a-z_:"`.@[-]*)/is', $rs['sql'], $tableName)){
  12. $tableName = $tableName[1];
  13. }
  14. if(is_object($data)){
  15. $data = get_object_vars($data);
  16. }
  17. foreach($data as $key=>$value){
  18. $data[strtolower($key)]=$value;
  19. }
  20. $UpdateValues = array();
  21. $col_count = mysql_num_fields($rs['rs']);
  22. for($i=0;$i<$col_count;$i++) {
  23. $column = mysql_fetch_field($rs['rs'],$i);
  24. if(array_key_exists($column->name, $data) && ($ignore || $data[$column->name]!==$row[$column->name] || $column->type == 'bool')){
  25. if(is_array($data[$column->name]) || is_object($data[$column->name])){
  26. if(serialize($data[$column->name])==$row[$column->name]){
  27. continue;
  28. }
  29. }
  30. $UpdateValues[] ='`'.$column->name.'`='.db_quotevalue($db,$data[$column->name],$column->type);
  31. }
  32. }
  33. mysql_field_seek($rs['rs'],0);
  34. if (count($UpdateValues)>0) {
  35. $whereClause = db_whereClause($rs['sql']);
  36. $UpdateValues=implode(',',$UpdateValues);
  37. $sql = 'UPDATE `'.$tableName.'` SET '.$UpdateValues;
  38. if (strlen($whereClause) > 0)
  39. $sql .= ' WHERE '.$whereClause;
  40. return $sql;
  41. } else {
  42. return '';
  43. }
  44. }
  45. function db_get_insert_sql($db,&$rs, &$data,$autoup=false) {
  46. if(!$rs['rs']){
  47. trigger_error('GetInsertSQL: '.$rs['sql'].' error ',E_USER_WARNING);
  48. return false;
  49. }
  50. mysql_field_seek($rs['rs'],0);
  51. if(is_object($data)){
  52. $data = get_object_vars($data);
  53. }
  54. foreach($data as $key=>$value){
  55. $data[strtolower($key)]=$value;
  56. }
  57. if (preg_match('/FROM\s+([]0-9a-z_:"`.@[-]*)/is', $rs['sql'], $tableName)){
  58. $tableName = $tableName[1];
  59. }
  60. if($autoup){
  61. $keyColumn = mysql_fetch_field($rs['rs']);
  62. if(!$data[strtolower($keyColumn->name)]){
  63. $rs = $db->exec('SELECT MAX('.$keyColumn->name.') AS keyid FROM '.$tableName);
  64. $result = $db->selectrow('SELECT MAX('.$keyColumn->name.') AS keyid FROM '.$tableName);
  65. $data[$keyColumn->name]= $result['keyid'] + 1;
  66. }
  67. }
  68. $insertValues = array();
  69. $col_count = mysql_num_fields($rs['rs']);
  70. for($i=0;$i<$col_count;$i++) {
  71. $column = mysql_fetch_field($rs['rs'],$i);
  72. if(isset($data[$column->name])){
  73. $insertValues[$column->name] = db_quotevalue($db,$data[$column->name],$column->type);
  74. }
  75. }
  76. $strValue = implode(',',$insertValues);
  77. $strFields = implode('`,`',array_keys($insertValues));
  78. mysql_field_seek($rs['rs'],0);
  79. return 'INSERT INTO `'.$tableName.'` ( `'.$strFields.'` ) VALUES ( '.$strValue.' )';
  80. }
  81. function db_quotevalue(&$db,$value,$valuedef){
  82. if(null===$value){
  83. return 'null';
  84. }
  85. switch($valuedef){
  86. case 'bool':
  87. return (strtolower($value)!='false' && $value || (is_int($value) && $value>0))?'true':'false';
  88. break;
  89. case 'real':
  90. case 'int':
  91. $value = trim($value);
  92. if($value===''){
  93. return 'null';
  94. }else{
  95. return $value;
  96. }
  97. break;
  98. default:
  99. if(is_array($value)){
  100. return $db->quote(serialize($value));
  101. }else{
  102. return $db->quote(trim($value));
  103. }
  104. break;
  105. }
  106. }
  107. function db_whereClause($queryString){
  108. preg_match('/\sWHERE\s(.*)/is', $queryString, $whereClause);
  109. $discard = false;
  110. if ($whereClause) {
  111. if (preg_match('/\s(ORDER\s.*)/is', $whereClause[1], $discard));
  112. else if (preg_match('/\s(LIMIT\s.*)/is', $whereClause[1], $discard));
  113. else preg_match('/\s(FOR UPDATE.*)/is', $whereClause[1], $discard);
  114. } else
  115. $whereClause = array(false,false);
  116. if ($discard)
  117. $whereClause[1] = substr($whereClause[1], 0, strlen($whereClause[1]) - strlen($discard[1]));
  118. return $whereClause[1];
  119. }