00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00132 class t3lib_DB {
00133
00134
00135
00136 var $debugOutput = FALSE;
00137 var $debug_lastBuiltQuery = '';
00138
00139
00140 var $link;
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00167 function exec_INSERTquery($table,$fields_values) {
00168 $res = mysql_query($this->INSERTquery($table,$fields_values), $this->link);
00169 if ($this->debugOutput) $this->debug('exec_INSERTquery');
00170 return $res;
00171 }
00172
00183 function exec_UPDATEquery($table,$where,$fields_values) {
00184 $res = mysql_query($this->UPDATEquery($table,$where,$fields_values), $this->link);
00185 if ($this->debugOutput) $this->debug('exec_UPDATEquery');
00186 return $res;
00187 }
00188
00197 function exec_DELETEquery($table,$where) {
00198 $res = mysql_query($this->DELETEquery($table,$where), $this->link);
00199 if ($this->debugOutput) $this->debug('exec_DELETEquery');
00200 return $res;
00201 }
00202
00216 function exec_SELECTquery($select_fields,$from_table,$where_clause,$groupBy='',$orderBy='',$limit='') {
00217 $res = mysql_query($this->SELECTquery($select_fields,$from_table,$where_clause,$groupBy,$orderBy,$limit), $this->link);
00218 if ($this->debugOutput) $this->debug('exec_SELECTquery');
00219 return $res;
00220 }
00221
00241 function exec_SELECT_mm_query($select,$local_table,$mm_table,$foreign_table,$whereClause='',$groupBy='',$orderBy='',$limit='') {
00242 $mmWhere = $local_table ? $local_table.'.uid='.$mm_table.'.uid_local' : '';
00243 $mmWhere.= ($local_table AND $foreign_table) ? ' AND ' : '';
00244 $mmWhere.= $foreign_table ? $foreign_table.'.uid='.$mm_table.'.uid_foreign' : '';
00245 return $GLOBALS['TYPO3_DB']->exec_SELECTquery(
00246 $select,
00247 ($local_table ? $local_table.',' : '').$mm_table.($foreign_table ? ','.$foreign_table : ''),
00248 $mmWhere.' '.$whereClause,
00249 $groupBy,
00250 $orderBy,
00251 $limit
00252 );
00253 }
00254
00264 function exec_SELECT_queryArray($queryParts) {
00265 return $this->exec_SELECTquery(
00266 $queryParts['SELECT'],
00267 $queryParts['FROM'],
00268 $queryParts['WHERE'],
00269 $queryParts['GROUPBY'],
00270 $queryParts['ORDERBY'],
00271 $queryParts['LIMIT']
00272 );
00273 }
00274
00287 function exec_SELECTgetRows($select_fields,$from_table,$where_clause,$groupBy='',$orderBy='',$limit='',$uidIndexField='') {
00288 $res = mysql_query($this->SELECTquery($select_fields,$from_table,$where_clause,$groupBy,$orderBy,$limit), $this->link);
00289 if ($this->debugOutput) $this->debug('exec_SELECTquery');
00290
00291 unset($output);
00292 if (!$this->sql_error()) {
00293 $output = array();
00294
00295 if ($uidIndexField) {
00296 while($tempRow = $this->sql_fetch_assoc($res)) {
00297 $output[$tempRow[$uidIndexField]] = $tempRow;
00298 }
00299 } else {
00300 while($output[] = $this->sql_fetch_assoc($res));
00301 array_pop($output);
00302 }
00303 }
00304 return $output;
00305 }
00306
00307
00308
00309
00310
00311
00312
00313
00314
00315
00316
00317
00318
00319
00320
00321
00322
00332 function INSERTquery($table,$fields_values) {
00333
00334
00335 if (is_array($fields_values) && count($fields_values)) {
00336
00337
00338 foreach($fields_values as $k => $v) {
00339 $fields_values[$k] = $this->quoteStr($fields_values[$k], $table);
00340 }
00341
00342
00343 $query = 'INSERT INTO '.$table.'
00344 (
00345 '.implode(',
00346 ',array_keys($fields_values)).'
00347 ) VALUES (
00348 "'.implode('",
00349 "',$fields_values).'"
00350 )';
00351
00352
00353 if ($this->debugOutput) $this->debug_lastBuiltQuery = $query;
00354 return $query;
00355 }
00356 }
00357
00368 function UPDATEquery($table,$where,$fields_values) {
00369
00370
00371 if (is_string($where)) {
00372 if (is_array($fields_values) && count($fields_values)) {
00373
00374
00375 $nArr = array();
00376 foreach($fields_values as $k => $v) {
00377 $nArr[] = $k.'="'.$this->quoteStr($v, $table).'"';
00378 }
00379
00380
00381 $query = 'UPDATE '.$table.'
00382 SET
00383 '.implode(',
00384 ',$nArr).
00385 (strlen($where)>0 ? '
00386 WHERE
00387 '.$where : '');
00388
00389
00390 if ($this->debugOutput) $this->debug_lastBuiltQuery = $query;
00391 return $query;
00392 }
00393 } else {
00394 die('<strong>TYPO3 Fatal Error:</strong> "Where" clause argument for UPDATE query was not a string in $this->UPDATEquery() !');
00395 }
00396 }
00397
00407 function DELETEquery($table,$where) {
00408 if (is_string($where)) {
00409
00410
00411 $query = 'DELETE FROM '.$table.
00412 (strlen($where)>0 ? '
00413 WHERE
00414 '.$where : '');
00415
00416 if ($this->debugOutput) $this->debug_lastBuiltQuery = $query;
00417 return $query;
00418 } else {
00419 die('<strong>TYPO3 Fatal Error:</strong> "Where" clause argument for DELETE query was not a string in $this->DELETEquery() !');
00420 }
00421 }
00422
00436 function SELECTquery($select_fields,$from_table,$where_clause,$groupBy='',$orderBy='',$limit='') {
00437
00438
00439
00440 $query = 'SELECT '.$select_fields.'
00441 FROM '.$from_table.
00442 (strlen($where_clause)>0 ? '
00443 WHERE
00444 '.$where_clause : '');
00445
00446
00447 if (strlen($groupBy)>0) {
00448 $query.= '
00449 GROUP BY '.$groupBy;
00450 }
00451
00452 if (strlen($orderBy)>0) {
00453 $query.= '
00454 ORDER BY '.$orderBy;
00455 }
00456
00457 if (strlen($limit)>0) {
00458 $query.= '
00459 LIMIT '.$limit;
00460 }
00461
00462
00463 if ($this->debugOutput) $this->debug_lastBuiltQuery = $query;
00464 return $query;
00465 }
00466
00477 function listQuery($field, $value, $table) {
00478 $command = $this->quoteStr($value, $table);
00479 $where = '('.$field.' LIKE "%,'.$command.',%" OR '.$field.' LIKE "'.$command.',%" OR '.$field.' LIKE "%,'.$command.'" OR '.$field.'="'.$command.'")';
00480 return $where;
00481 }
00482
00491 function searchQuery($searchWords,$fields,$table) {
00492 $queryParts = array();
00493
00494 foreach($searchWords as $sw) {
00495 $like=' LIKE "%'.$this->quoteStr($sw, $table).'%"';
00496 $queryParts[] = $table.'.'.implode($like.' OR '.$table.'.',$fields).$like;
00497 }
00498 $query = '('.implode(') AND (',$queryParts).')';
00499 return $query ;
00500 }
00501
00502
00503
00504
00505
00506
00507
00508
00509
00510
00511
00512
00513
00514
00515
00516
00517
00518
00519
00520
00521
00522
00523
00524
00525
00526
00527
00537 function quoteStr($str, $table) {
00538 return addslashes($str);
00539 }
00540
00550 function cleanIntArray($arr) {
00551 foreach($arr as $k => $v) {
00552 $arr[$k] = intval($arr[$k]);
00553 }
00554 return $arr;
00555 }
00556
00566 function cleanIntList($list) {
00567 return implode(',',t3lib_div::intExplode(',',$list));
00568 }
00569
00580 function stripOrderBy($str) {
00581 return eregi_replace('^ORDER[[:space:]]+BY[[:space:]]+','',trim($str));
00582 }
00583
00594 function stripGroupBy($str) {
00595 return eregi_replace('^GROUP[[:space:]]+BY[[:space:]]+','',trim($str));
00596 }
00597
00606 function splitGroupOrderLimit($str) {
00607 $str = ' '.$str;
00608
00609 $wgolParts = array(
00610 'WHERE' => '',
00611 'GROUPBY' => '',
00612 'ORDERBY' => '',
00613 'LIMIT' => ''
00614 );
00615
00616
00617 if (eregi('^(.*)[[:space:]]+LIMIT[[:space:]]+([[:alnum:][:space:],._]+)$',$str,$reg)) {
00618 $wgolParts['LIMIT'] = trim($reg[2]);
00619 $str = $reg[1];
00620 }
00621
00622
00623 if (eregi('^(.*)[[:space:]]+ORDER[[:space:]]+BY[[:space:]]+([[:alnum:][:space:],._]+)$',$str,$reg)) {
00624 $wgolParts['ORDERBY'] = trim($reg[2]);
00625 $str = $reg[1];
00626 }
00627
00628
00629 if (eregi('^(.*)[[:space:]]+GROUP[[:space:]]+BY[[:space:]]+([[:alnum:][:space:],._]+)$',$str,$reg)) {
00630 $wgolParts['GROUPBY'] = trim($reg[2]);
00631 $str = $reg[1];
00632 }
00633
00634
00635 $wgolParts['WHERE'] = $str;
00636
00637 return $wgolParts;
00638 }
00639
00640
00641
00642
00643
00644
00645
00646
00647
00648
00649
00650
00651
00652
00653
00654
00655
00656
00657
00658
00659
00660
00671 function sql($db,$query) {
00672 $res = mysql_query($query, $this->link);
00673 if ($this->debugOutput) $this->debug('sql');
00674 return $res;
00675 }
00676
00685 function sql_query($query) {
00686 $res = mysql_query($query, $this->link);
00687 if ($this->debugOutput) $this->debug('sql_query');
00688 return $res;
00689 }
00690
00698 function sql_error() {
00699 return mysql_error($this->link);
00700 }
00701
00710 function sql_num_rows($res) {
00711 return mysql_num_rows($res);
00712 }
00713
00722 function sql_fetch_assoc($res) {
00723 return mysql_fetch_assoc($res);
00724 }
00725
00735 function sql_fetch_row($res) {
00736 return mysql_fetch_row($res);
00737 }
00738
00747 function sql_free_result($res) {
00748 return mysql_free_result($res);
00749 }
00750
00758 function sql_insert_id() {
00759 return mysql_insert_id($this->link);
00760 }
00761
00769 function sql_affected_rows() {
00770 return mysql_affected_rows($this->link);
00771 }
00772
00782 function sql_data_seek($res,$seek) {
00783 return mysql_data_seek($res,$seek);
00784 }
00785
00795 function sql_field_type($res,$pointer) {
00796 return mysql_field_type($res,$pointer);
00797 }
00798
00809 function sql_pconnect($TYPO3_db_host, $TYPO3_db_username, $TYPO3_db_password) {
00810 if ($GLOBALS['TYPO3_CONF_VARS']['SYS']['no_pconnect']) {
00811 $this->link = mysql_connect($TYPO3_db_host, $TYPO3_db_username, $TYPO3_db_password);
00812 } else {
00813 $this->link = mysql_pconnect($TYPO3_db_host, $TYPO3_db_username, $TYPO3_db_password);
00814 }
00815 return $this->link;
00816 }
00817
00826 function sql_select_db($TYPO3_db) {
00827 return mysql_select_db($TYPO3_db, $this->link);
00828 }
00829
00830
00831
00832
00833
00834
00835
00836
00837
00838
00839
00840
00841
00842
00843
00844
00845
00854 function admin_get_dbs() {
00855 $dbArr = array();
00856 $db_list = mysql_list_dbs($this->link);
00857 while ($row = mysql_fetch_object($db_list)) {
00858 if ($this->sql_select_db($row->Database)) {
00859 $dbArr[] = $row->Database;
00860 }
00861 }
00862 return $dbArr;
00863 }
00864
00872 function admin_get_tables() {
00873 $whichTables = array();
00874 $tables_result = mysql_list_tables(TYPO3_db, $this->link);
00875 if (!mysql_error()) {
00876 while ($theTable = mysql_fetch_assoc($tables_result)) {
00877 $whichTables[current($theTable)] = current($theTable);
00878 }
00879 }
00880 return $whichTables;
00881 }
00882
00891 function admin_get_fields($tableName) {
00892 $output = array();
00893
00894 $columns_res = mysql_query('SHOW columns FROM '.$tableName, $this->link);
00895 while($fieldRow = mysql_fetch_assoc($columns_res)) {
00896 $output[$fieldRow["Field"]] = $fieldRow;
00897 }
00898
00899 return $output;
00900 }
00901
00909 function admin_get_keys($tableName) {
00910 $output = array();
00911
00912 $keyRes = mysql_query('SHOW keys FROM '.$tableName, $this->link);
00913 while($keyRow = mysql_fetch_assoc($keyRes)) {
00914 $output[] = $keyRow;
00915 }
00916
00917 return $output;
00918 }
00919
00927 function admin_query($query) {
00928 $res = mysql_query($query, $this->link);
00929 if ($this->debugOutput) $this->debug('admin_query');
00930 return $res;
00931 }
00932
00933
00934
00935
00936
00937
00938
00939
00940
00941
00942
00943
00944
00945
00946
00947
00954 function debug($func) {
00955
00956 $error = $this->sql_error();
00957 if ($error) {
00958 echo t3lib_div::view_array(array(
00959 'caller' => 't3lib_DB::'.$func,
00960 'ERROR' => $error,
00961 'lastBuiltQuery' => $this->debug_lastBuiltQuery,
00962 'debug_backtrace' => function_exists('debug_backtrace') ? next(debug_backtrace()) : 'N/A'
00963 ));
00964 }
00965 }
00966 }
00967
00968
00969 if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_db.php']) {
00970 include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_db.php']);
00971 }
00972 ?>