Project

General

Profile

« Previous | Next » 

Revision 2104

Added by darkviper about 10 years ago

! complete rebuild of wb/install/ - changed to use import-struct.sql
! change class WbDatabase from mysql to msqli
! rework of WbDatabase::importSql()
! function db_update_key_value() optimized for speed
! field `settings_id`removed from table `settings` and new primary key set to `name`
! update-script extended to modify table `settings`

View differences:

WbDatabase.php
33 33

  
34 34
/* -------------------------------------------------------- */
35 35
@define('DATABASE_CLASS_LOADED', true);
36
	/* define the old mysql consts for Backward compatibility */
37
	if (!defined('MYSQL_ASSOC'))
38
	{
39
		define('MYSQL_SEEK_LAST',            -1);
40
		define('MYSQL_SEEK_FIRST',            0);
41
		define('MYSQL_ASSOC',                 1);
42
		define('MYSQL_NUM',                   2);
43
		define('MYSQL_BOTH',                  3);
44
		define('MYSQL_CLIENT_COMPRESS',      32);
45
		define('MYSQL_CLIENT_IGNORE_SPACE', 256);
46
		define('MYSQL_CLIENT_INTERACTIVE', 1024);
47
		define('MYSQL_CLIENT_SSL',         2048);
48
	}
36 49

  
37 50
class WbDatabase {
38 51

  
......
52 65
 * __constructor
53 66
 *  prevent from public instancing
54 67
 */
55
	private function  __construct() {}
68
	final private function  __construct() {}
56 69
/**
57 70
 * prevent from cloning
58 71
 */
59
	private function __clone() {}
72
	final private function __clone() {}
60 73
/**
61 74
 * get a valid instance of this class
62 75
 * @param string $sIdentifier selector for several different instances
63 76
 * @return WbDatabase object
64 77
 */
65
	public static function getInstance($sIdentifier = 'core')
78
	final public static function getInstance($sIdentifier = 'core')
66 79
	{
67 80
		if( !isset(self::$_oInstances[$sIdentifier])) {
68 81
            $c = __CLASS__;
......
76 89
 * disconnect and kills an existing instance
77 90
 * @param string $sIdentifier selector for instance to kill
78 91
 */
79
	public static function killInstance($sIdentifier)
92
	final public static function killInstance($sIdentifier)
80 93
	{
81 94
		if($sIdentifier != 'core') {
82 95
			if( isset(self::$_oInstances[$sIdentifier])) {
......
105 118
			$username = isset($aIni['user']) ? $aIni['user'] : '';
106 119
			$password = isset($aIni['pass']) ? $aIni['pass'] : '';
107 120
			$hostport = isset($aIni['port']) ? $aIni['port'] : '3306';
108
			$hostport = $hostport == '3306' ? '' : ':'.$hostport;
121
			$hostport = $hostport == '3306' ? null : $hostport;
109 122
			$db_name  = ltrim(isset($aIni['path']) ? $aIni['path'] : '', '/\\');
110 123
			$sTmp = isset($aIni['query']) ? $aIni['query'] : '';
111 124
			$aQuery = explode('&', $sTmp);
......
126 139
		} else {
127 140
			throw new WbDatabaseException('Missing parameter: unable to connect database');
128 141
		}
129
		$this->oDbHandle = @mysql_connect($hostname.$hostport, $username, $password, true);
142
		$this->oDbHandle = @mysqli_connect($hostname, $username, $password, $db_name, $hostport);
130 143
		if (!$this->oDbHandle) {
131
			throw new WbDatabaseException('unable to connect \''.$scheme.'://'.$hostname.$hostport.'\'');
144
			throw new WbDatabaseException('unable to connect \''.$scheme.'://'.$hostname.':'.$hostport.'\'');
132 145
		} else {
133
			if (!@mysql_select_db($db_name, $this->oDbHandle)) {
134
				throw new WbDatabaseException('unable to select database \''.$db_name.
135
				                              '\' on \''.$scheme.'://'.
136
				                              $hostname.$hostport.'\''
137
				                             );
138
			} else {
139
				if ($this->sCharset) {
140
					@mysql_query('SET NAMES \''.$this->sCharset.'\'', $this->oDbHandle);
141
				}
142
				$this->connected = true;
143
			}
146
            if ($this->sCharset) {
147
                @mysqli_query($this->oDbHandle, 'SET NAMES \''.$this->sCharset.'\'');
148
            }
149
            $this->connected = true;
144 150
		}
145 151
		return $this->connected;
146 152
	}
......
153 159
	public function disconnect()
154 160
	{
155 161
		if ($this->connected == true && $oInstance->sInstanceIdentifier != 'core') {
156
			mysql_close($this->oDbHandle);
162
			mysqli_close($this->oDbHandle);
157 163
			$this->connected = false;
158 164
			return true;
159 165
		}
......
161 167
	}
162 168
/**
163 169
 * Alias for doQuery()
170
 * @deprecated from WB-2.8.5 and higher
164 171
 */
165 172
	public function query($statement)
166 173
	{
......
173 180
 */
174 181
	public function doQuery($statement) {
175 182
		$this->iQueryCount++;
176
		$mysql = new mysql();
177
		$mysql->query($statement, $this->oDbHandle);
183
		$mysql = new mysql($this->oDbHandle);
184
		$mysql->query($statement);
178 185
		$this->set_error($mysql->error($this->oDbHandle));
179
		if ($mysql->error($this->oDbHandle)) {
186
		if ($mysql->error()) {
180 187
			return null;
181 188
		} else {
182 189
			return $mysql;
......
184 191
	}
185 192
/**
186 193
 * Alias for getOne()
194
 * @deprecated from WB-2.8.5 and higher
187 195
 */
188 196
	public function get_one( $statement )
189 197
	{
......
198 206
	public function getOne( $statement )
199 207
	{
200 208
		$this->iQueryCount++;
201
		$fetch_row = mysql_fetch_array(mysql_query($statement, $this->oDbHandle));
209
		$fetch_row = mysqli_fetch_array(mysqli_query($this->oDbHandle, $statement));
202 210
		$result = $fetch_row[0];
203
		$this->set_error(mysql_error($this->oDbHandle));
204
		if (mysql_error($this->oDbHandle)) {
211
		$this->set_error(null);
212
		if (mysqli_error($this->oDbHandle)) {
213
    		$this->set_error(mysqli_error($this->oDbHandle));
205 214
			return null;
206 215
		} else {
207 216
			return $result;
......
209 218
	}
210 219
/**
211 220
 * Alias for setError()
221
 * @deprecated from WB-2.8.5 and higher
212 222
 */
213 223
	public function set_error($message = null)
214 224
	{
......
225 235
	}
226 236
/**
227 237
 * Alias for isError
238
 * @deprecated from WB-2.8.5 and higher
228 239
 */
229 240
	public function is_error()
230 241
	{
......
240 251
	}
241 252
/**
242 253
 * Alias for getError
254
 * @deprecated from WB-2.8.5 and higher
243 255
 */
244 256
	public function get_error()
245 257
	{
......
278 290
				break;
279 291
			case 'LastInsertId':
280 292
			case 'getLastInsertId': // << set deprecated
281
				$retval = mysql_insert_id($this->oDbHandle);
293
				$retval = $this->getLastInsertId();
282 294
				break;
283 295
			case 'DbName':
284 296
			case 'getDbName': // << set deprecated
......
306 318
 */
307 319
	public function escapeString($unescaped_string)
308 320
	{
309
		return mysql_real_escape_string($unescaped_string, $this->oDbHandle);
321
		return mysqli_real_escape_string($this->oDbHandle, $unescaped_string);
310 322
	}
311 323
/**
312 324
 * Last inserted Id
......
314 326
 */	
315 327
	public function getLastInsertId()
316 328
	{
317
		return mysql_insert_id($this->oDbHandle);
329
		return mysqli_insert_id($this->oDbHandle);
318 330
	}
319 331
/**
320 332
 * Alias for isField()
333
 * @deprecated from WB-2.8.5 and higher
321 334
 */
322 335
	public function field_exists($table_name, $field_name)
323 336
	{
......
331 344
	public function isField($table_name, $field_name)
332 345
	{
333 346
		$sql = 'DESCRIBE `'.$table_name.'` `'.$field_name.'` ';
334
		$query = $this->query($sql, $this->oDbHandle);
347
		$query = $this->doQuery($sql);
335 348
		return ($query->numRows() != 0);
336 349
	}
337 350
/**
338 351
 * Alias for isIndex()
352
 * @deprecated from WB-2.8.5 and higher
339 353
 */
340 354
	public function index_exists($table_name, $index_name, $number_fields = 0)
341 355
	{
......
352 366
		$number_fields = intval($number_fields);
353 367
		$keys = 0;
354 368
		$sql = 'SHOW INDEX FROM `'.$table_name.'`';
355
		if (($res_keys = $this->doQuery($sql, $this->oDbHandle))) {
369
		if (($res_keys = $this->doQuery($sql))) {
356 370
			while (($rec_key = $res_keys->fetchRow(MYSQL_ASSOC))) {
357 371
				if ( $rec_key['Key_name'] == $index_name ) {
358 372
					$keys++;
......
368 382
	}
369 383
/**
370 384
 * Alias for addField()
385
 * @deprecated from WB-2.8.5 and higher
371 386
 */
372 387
	public function field_add($table_name, $field_name, $description)
373 388
	{
......
384 399
		if (!$this->isField($table_name, $field_name)) {
385 400
		// add new field into a table
386 401
			$sql = 'ALTER TABLE `'.$table_name.'` ADD '.$field_name.' '.$description.' ';
387
			$query = $this->doQuery($sql, $this->oDbHandle);
388
			$this->set_error(mysql_error($this->oDbHandle));
402
			$query = $this->doQuery($sql);
403
			$this->set_error(mysqli_error($this->oDbHandle));
389 404
			if (!$this->isError()) {
390 405
				return ( $this->isField($table_name, $field_name) ) ? true : false;
391 406
			}
......
396 411
	}
397 412
/**
398 413
 * Alias for modifyField()
414
 * @deprecated from WB-2.8.5 and higher
399 415
 */
400 416
	public function field_modify($table_name, $field_name, $description)
401 417
	{
......
413 429
		if ($this->isField($table_name, $field_name)) {
414 430
		// modify a existing field in a table
415 431
			$sql  = 'ALTER TABLE `'.$table_name.'` MODIFY `'.$field_name.'` '.$description;
416
			$retval = ( $this->doQuery($sql, $this->oDbHandle) ? true : false);
417
			$this->setError(mysql_error());
432
			$retval = ( $this->doQuery($sql) ? true : false);
433
			$this->setError(mysqli_error($this->oDbHandle));
418 434
		}
419 435
		return $retval;
420 436
	}
421 437
/**
422 438
 * Alias for removeField()
439
 * @deprecated from WB-2.8.5 and higher
423 440
 */
424 441
	public function field_remove($table_name, $field_name)
425 442
	{
......
442 459
	}
443 460
/**
444 461
 * Alias for addIndex()
462
 * @deprecated from WB-2.8.5 and higher
445 463
 */
446 464
    public function index_add($table_name, $index_name, $field_list, $index_type = 'KEY')
447 465
	{
......
466 484
        {
467 485
            $sql  = 'ALTER TABLE `'.$table_name.'` ';
468 486
            $sql .= 'DROP INDEX `'.$index_name.'`';
469
            if (!$this->doQuery($sql, $this->oDbHandle)) { return false; }
487
            if (!$this->doQuery($sql)) { return false; }
470 488
        }
471 489
        $sql  = 'ALTER TABLE `'.$table_name.'` ';
472 490
        $sql .= 'ADD '.$index_type.' ';
473 491
        $sql .= $index_type == 'PRIMARY' ? 'KEY ' : '`'.$index_name.'` ';
474 492
        $sql .= '( '.$field_list.' ); ';
475
        if ($this->doQuery($sql, $this->oDbHandle)) { $retval = true; }
493
        if ($this->doQuery($sql)) { $retval = true; }
476 494
        return $retval;
477 495
    }
478 496
/**
479 497
 * Alias for removeIndex()
498
 * @deprecated from WB-2.8.5 and higher
480 499
 */
481 500
	public function index_remove($table_name, $index_name)
482 501
	{
......
493 512
		if ($this->isIndex($table_name, $index_name)) {
494 513
		// modify a existing field in a table
495 514
			$sql  = 'ALTER TABLE `'.$table_name.'` DROP INDEX `'.$index_name.'`';
496
			$retval = ( $this->doQuery($sql, $this->oDbHandle) ? true : false );
515
			$retval = ( $this->doQuery($sql) ? true : false );
497 516
		}
498 517
		return $retval;
499 518
	}
500 519
/**
501 520
 * Alias for importSql()
521
 * @deprecated from WB-2.8.5 and higher
502 522
 */
503 523
	public function SqlImport($sSqlDump,
504 524
	                          $sTablePrefix = '',
505
	                          $bPreserve    = true,
525
	                          $sAction      = 'install',
506 526
	                          $sEngine      = 'MyISAM',
507 527
	                          $sCollation   = 'utf8_unicode_ci')
508 528
	{
509 529
		return $this->importSql($sSqlDump, $sTablePrefix, $bPreserve, $sEngine, $sCollation);
510 530
	}
511 531
/**
512
 * Import a standard *.sql dump file
513
 * @param string $sSqlDump link to the sql-dumpfile
514
 * @param string $sTablePrefix
515
 * @param bool     $bPreserve   set to true will ignore all DROP TABLE statements
516
 * @param string   $sEngine     can be 'MyISAM' or 'InnoDB'
517
 * @param string   $sCollation  one of the list of available collations
518
 * @return boolean true if import successful
519
 * @description Import a standard *.sql dump file<br />
520
 *              The file can include placeholders TABLE_PREFIX, TABLE_COLLATION and TABLE_ENGINE
532
 * Import an SQl-Dumpfile witch can include unlimited placeholders for values
533
 * @param mixed  $mSqlDump      can be string with filename or array with additional vars
534
 * @param string $sTablePrefix  can be used to override settings from WbDatabase object
535
 * @param string $sAction       'install', 'uninstall', 'upgrade', 'repair
536
 * @param string $sEngine       kind of table engine: MyIsam(default)
537
 * @param string $sCollation    utf8_unicode_ci(default)
538
 * @return bool  false on error
521 539
 */
522
	public function importSql($sSqlDump,
523
	                          $sTablePrefix = '', /* unused argument, for backward compatibility only! */
524
	                          $bPreserve    = true,
525
	                          $sEngine      = 'MyISAM',
526
	                          $sCollation   = 'utf8_unicode_ci')
527
	{
528
		$sCollation = ($sCollation != '' ? $sCollation : 'utf8_unicode_ci');
529
		$aCharset = preg_split('/_/', $sCollation, null, PREG_SPLIT_NO_EMPTY);
530
		$sEngine = 'ENGINE='.$sEngine.' DEFAULT CHARSET='.$aCharset[0].' COLLATE='.$sCollation;
531
		$sCollation = ' collate '.$sCollation;
540
	public function importSql(
541
        $mSqlDump,
542
        $sTablePrefix = '',               // can override settings from WbDatabase object
543
        $sAction      = 'install',        // skip 'DROP TABLE' statements
544
        $sEngine      = 'MyISAM',         // the default table engine
545
        $sCollation   = 'utf8_unicode_ci' // the default collation to use
546
    )
547
    {
532 548
		$retval = true;
533 549
		$this->error = '';
534
		$aSearch  = array('{TABLE_PREFIX}','{TABLE_ENGINE}', '{TABLE_COLLATION}');
535
		$aReplace = array($this->sTablePrefix, $sEngine, $sCollation);
550
        // sanitize arguments
551
        if (! is_string($sAction)) {
552
            $sAction = $sAction ? 'repair' : 'install';
553
        }
554
        $aAllowedActions = array('install', 'uninstall', 'upgrade', 'repair');
555
        $sAction = strtolower(preg_replace('/^.*?('.implode('|', $aAllowedActions).')(\.php)?$/iU', '$1', $sAction));
556
        $sAction = (in_array($sAction, $aAllowedActions) ? $sAction : 'install');
557
        $sTablePrefix = trim($sTablePrefix);
558
        $aEngineTypes = array(
559
            'csv'        => 'CSV',
560
            'blackhole'  => 'BLACKHOLE',
561
            'memory'     => 'MEMORY',
562
            'myisam'     => 'MyISAM',
563
            'innodb'     => 'InnoDB',
564
            'archive'    => 'ARCHIVE',
565
            'mrg_myisam' => 'MRG_MYISAM'
566
        );
567
        if (isset($aEngineTypes[strtolower($sEngine)])) {
568
            $sEngine = $aEngineTypes[strtolower($sEngine)];
569
        } else {
570
            $sEngine = 'MyISAM';
571
        }
572
        // test if selected collation is available. Otherwise select 'utf8_unicode_ci'
573
        $sql = 'SELECT COUNT(*) FROM `COLLATIONS` '
574
             . 'WHERE `COLLATION_NAME`=\''.$sCollation.'\'';
575
        $sCollation = ($this->get_one($sql) ? $sCollation : 'utf8_unicode_ci');
576
        $aTmp = preg_split('/_/', $sCollation, null, PREG_SPLIT_NO_EMPTY);
577
        $sCharset = $aTmp[0];
578
        // define array of searches
579
        $aSearch  = array(
580
            '/\{TABLE_PREFIX\}/',
581
            '/\{TABLE_COLLATION\}/', // deprecated from 2.8.4
582
            '/\{FIELD_COLLATION\}/', // deprecated from 2.8.4
583
            '/\{TABLE_ENGINE\}/',
584
            '/\{TABLE_ENGINE=([a-zA-Z_0-9]*)\}/',
585
            '/\{CHARSET\}/',
586
            '/\{COLLATION\}/'
587
        );
588
        // define array of replacements
589
        $aReplace = array(
590
            $sTablePrefix,
591
            ' COLLATE {COLLATION}', // deprecated from 2.8.4
592
            ' COLLATE {COLLATION}', // deprecated from 2.8.4
593
            ' {ENGINE='.$sEngine.'}',
594
            ' ENGINE=$1 DEFAULT CHARSET={CHARSET} COLLATION={COLLATION}',
595
            $sCharset,
596
            $sCollation
597
        );
598

  
599
        if (is_array($mSqlDump)) {
600
            // try to get dumpfile name
601
            if (!isset($mSqlDump['sSqlDump'])) {
602
                $this->error = 'missing index \'sSqlDump\' in $mSqlDump';
603
                return false;
604
            } else {
605
            // get dumpfile name from array and then remove entry
606
                $sDumpFile = (string)$mSqlDump['sSqlDump'];
607
                unset($mSqlDump['sSqlDump']);
608
                // import all vars and it's values from array
609
                foreach ($mSqlDump as $sIndex => $sValue) {
610
                    // transform varname into placeholder name ('sPageTitle' => 'PAGE_TITLE')
611
                    $sIndex = strtoupper(preg_replace('/([a-z0-9])([A-Z])/', '\1_\2', ltrim($sIndex, 'a..z')));
612
                    // fill search/replace arrays
613
                    $aSearch[]  = '/\{'.$sIndex.'\}/';
614
                    $aReplace[] = $sValue ;
615
                }
616
            }
617
        } elseif (is_string($mSqlDump)) {
618
            $sDumpFile = (string)$mSqlDump;
619
        } else {
620
            $this->error = 'invalid argument $mSqlDump';
621
            return false;
622
        }
623
        if (!is_readable($sDumpFile)) {
624
            $this->Error = 'unable to open \''.$sDumpFile.'\'';
625
            return false;
626
        }
536 627
		$sql = '';
537
		$aSql = file($sSqlDump);
538
//		$aSql[0] = preg_replace('/^\xEF\xBB\xBF/', '', $aSql[0]);
628
		$aSql = file($sDumpFile, FILE_SKIP_EMPTY_LINES);
629
        //	remove possible ByteOrderMark
539 630
		$aSql[0] = preg_replace('/^[\xAA-\xFF]{3}/', '', $aSql[0]);
540 631
		while (sizeof($aSql) > 0) {
541 632
			$sSqlLine = trim(array_shift($aSql));
542 633
			if (!preg_match('/^[-\/]+.*/', $sSqlLine)) {
543 634
				$sql = $sql.' '.$sSqlLine;
544 635
				if ((substr($sql,-1,1) == ';')) {
545
					$sql = trim(str_replace( $aSearch, $aReplace, $sql));
546
					if (!($bPreserve && preg_match('/^\s*DROP TABLE IF EXISTS/siU', $sql))) {
547
						if (!mysql_query($sql, $this->oDbHandle)) {
548
							$retval = false;
549
							$this->error = mysql_error($this->oDbHandle);
550
							unset($aSql);
551
							break;
552
						}
553
					}
636
					$sql = trim(preg_replace($aSearch, $aReplace, $sql));
637
                    $sAvailSqlObjects = 'TABLE|VIEW|INDEX|PROCEDURE|FUNCTION|TRIGGER|EVENT';
638
                    switch ($sAction) {
639
                        case 'uninstall': // skip CREATE; execute DROP
640
                            if (preg_match('/^\s*CREATE ('.$sAvailSqlObjects.') /siU', $sql)) {
641
                                $sql = '';
642
                                continue; // read next statement
643
                            }
644
                            break;
645
                        case 'upgrade': // skip DROP; execute CREATE
646
                        case 'repair':  // skip DROP; execute CREATE
647
                            if (preg_match('/^\s*DROP ('.$sAvailSqlObjects.') /siU', $sql)) {
648
                                $sql = '';
649
                                continue; // read next statement
650
                            }
651
                            break;
652
                        default: // install:  execute DROP; execute CREATE
653
                            break;
654
                    }
655
                    if (!$this->doQuery($sql)) {
656
                        $retval = false;
657
                        $this->error = $this->getError();
658
                        unset($aSql);
659
                        break;
660
                    }
554 661
					$sql = '';
555 662
				}
556 663
			}
557 664
		}
558 665
		return $retval;
559
	}
666
    } // end of function importSql()
560 667
/**
561 668
 * retuns the type of the engine used for requested table
562 669
 * @param string $table name of the table, including prefix
......
565 672
	public function getTableEngine($table)
566 673
	{
567 674
		$retVal = false;
568
		$mysqlVersion = mysql_get_server_info($this->oDbHandle);
675
		$mysqlVersion = mysqli_get_server_info($this->oDbHandle);
569 676
		$engineValue = (version_compare($mysqlVersion, '5.0') < 0) ? 'Type' : 'Engine';
570 677
		$sql = 'SHOW TABLE STATUS FROM `' . $this->sDbName . '` LIKE \'' . $table . '\'';
571
		if (($result = $this->doQuery($sql, $this->oDbHandle))) {
678
		if (($result = $this->doQuery($sql))) {
572 679
			if (($row = $result->fetchRow(MYSQL_ASSOC))) {
573 680
				$retVal = $row[$engineValue];
574 681
			}
......
614 721
 */
615 722
class mysql {
616 723

  
617
	private $result = null;
724
	private $result    = null;
618 725
	private $oDbHandle = null;
726
    private $error     = '';
619 727

  
728
    public function __construct($oHandle)
729
    {
730
        $this->oDbHandle = $oHandle;
731
    }
620 732
/**
621 733
 * query sql statement
622 734
 * @param  string $statement
623
 * @param  object $dbHandle
624 735
 * @return object
625 736
 * @throws WbDatabaseException
626 737
 */
627
	function query($statement, $dbHandle)
738
	function query($sStatement)
628 739
	{
629
		$this->oDbHandle = $dbHandle;
630
		$this->result = @mysql_query($statement, $this->oDbHandle);
740
		$this->result = @mysqli_query($this->oDbHandle, $sStatement);
631 741
		if ($this->result === false) {
632 742
			if (DEBUG) {
633
				throw new WbDatabaseException(mysql_error($this->oDbHandle));
743
				throw new WbDatabaseException(mysqli_error($this->oDbHandle));
634 744
			} else {
635 745
				throw new WbDatabaseException('Error in SQL-Statement');
636 746
			}
637 747
		}
638
		$this->error = mysql_error($this->oDbHandle);
748
		$this->error = mysqli_error($this->oDbHandle);
639 749
		return $this->result;
640 750
	}
641 751
/**
......
645 755
 */
646 756
	function numRows()
647 757
	{
648
		return mysql_num_rows($this->result);
758
		return mysqli_num_rows($this->result);
649 759
	}
650 760
/**
651 761
 * fetchRow
......
655 765
 */
656 766
	function fetchRow($typ = MYSQL_BOTH)
657 767
	{
658
		return mysql_fetch_array($this->result, $typ);
768
		return mysqli_fetch_array($this->result, $typ);
659 769
	}
660 770
/**
661 771
 * fetchObject
......
667 777
	function fetchObject($sClassName = null, array $aParams = null)
668 778
	{
669 779
		if ($sClassName === null || class_exists($sClassName)) {
670
			return mysql_fetch_object($this->result, $sClassName, $aParams);
780
			return mysqli_fetch_object($this->result, $sClassName, $aParams);
671 781
		} else {
672 782
			throw new WbDatabaseException('Class <'.$sClassName.'> not available on request of mysql_fetch_object()');
673 783
		}
......
691 801
	{
692 802
		$pmax = $this->numRows() - 1;
693 803
		$p = (($position < 0 || $position > $pmax) ? $pmax : $position);
694
		return mysql_data_seek($this->result, $p);
804
		return mysqli_data_seek($this->result, $p);
695 805
	}
696 806
/**
697 807
 * freeResult
......
700 810
 */
701 811
	function freeResult()
702 812
	{
703
		return mysql_free_result($this->result);
813
		return mysqli_free_result($this->result);
704 814
	}
705 815
/** 
706 816
 * Get error
......
737 847
			}
738 848
		}
739 849
		$retval = true;
740
		foreach( $key as $index=>$val)
741
		{
742
			$index = strtolower($index);
743
			$sql = 'SELECT COUNT(`setting_id`) '
744
			     . 'FROM `'.$oDb->TablePrefix.$table.'` '
745
			     . 'WHERE `name` = \''.$index.'\' ';
746
			if ($oDb->getOne($sql)) {
747
				$sql = 'UPDATE ';
748
				$sql_where = 'WHERE `name` = \''.$index.'\'';
749
			} else {
750
				$sql = 'INSERT INTO ';
751
				$sql_where = '';
752
			}
753
			$sql .= '`'.$oDb->TablePrefix.$table.'` ';
754
			$sql .= 'SET `name` = \''.$index.'\', ';
755
			$sql .= '`value` = \''.$val.'\' '.$sql_where;
850
        $sNameValPairs = '';
851
		foreach ($key as $index => $val) {
852
            $sNameValPairs .= ', (\''.$index.'\', \''.$val.'\')';
853
        }
854
        $sValues = ltrim($sNameValPairs, ', ');
855
        if ($sValues != '') {
856
            $sql = 'REPLACE INTO `'.$oDb->TablePrefix.$table.'` (`name`, `value`) '
857
                 . 'VALUES '.$sValues;
756 858
			if (!$oDb->doQuery($sql)) {
757 859
				$retval = false;
758 860
			}
759
		}
861
        }
760 862
		return $retval;
761 863
	}

Also available in: Unified diff