1
0
Fork 0
mirror of https://github.com/Yetangitu/ampache synced 2025-10-05 19:41:55 +02:00

Replaced almost every dba::query to dba::read or dba::write.

This commit is contained in:
dipsol 2009-12-14 08:06:20 +00:00
parent 9b3232ba29
commit a7838e2a13
20 changed files with 2463 additions and 2463 deletions

View file

@ -1,21 +1,21 @@
<?php
/*
Copyright (c) Ampache.org
All rights reserved.
Copyright (c) Ampache.org
All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License v2
as published by the Free Software Foundation.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License v2
as published by the Free Software Foundation.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
/* Make sure they aren't directly accessing it */
@ -28,21 +28,21 @@ if (INIT_LOADED != '1') { exit; }
* with a few exceptions, the row and assoc will always
* return an array, simplifying checking on the far end
* it will also auto-connect as needed, and has a default
* database simplifying queries in most cases.
* database simplifying queries in most cases.
*/
class Dba {
class Dba {
public static $stats = array('query'=>0);
public static $stats = array('query'=>0);
private static $_default_db;
private static $_sql;
private static $config;
private static $_sql;
private static $config;
/**
* constructor
* This does nothing with the DBA class
*/
private function __construct() {
private function __construct() {
// Rien a faire
@ -53,34 +53,34 @@ class Dba {
* This is the meat of the class this does a query, it emulates
* The mysql_query function
*/
public static function query($sql) {
public static function query($sql) {
// Run the query
$resource = mysql_query($sql,self::dbh());
$resource = mysql_query($sql,self::dbh());
debug_event('Query',$sql,'6');
// Save the query, to make debug easier
self::$_sql = $sql;
self::$stats['query']++;
self::$_sql = $sql;
self::$stats['query']++;
// Do a little error checking here and try to recover from some forms of failure
if (!$resource) {
switch (mysql_errno(self::dbh())) {
case '2006':
case '2013':
case '2055':
debug_event('DBH','Lost connection to database server, trying to re-connect and hope nobody noticed','1');
self::disconnect();
if (!$resource) {
switch (mysql_errno(self::dbh())) {
case '2006':
case '2013':
case '2055':
debug_event('DBH','Lost connection to database server, trying to re-connect and hope nobody noticed','1');
self::disconnect();
// Try again
$resource = mysql_query($sql,self::dbh());
break;
$resource = mysql_query($sql,self::dbh());
break;
default:
debug_event('DBH',mysql_error(self::dbh()) . ' ['. mysql_errno(self::dbh()) . ']','1');
break;
debug_event('DBH',mysql_error(self::dbh()) . ' ['. mysql_errno(self::dbh()) . ']','1');
break;
} // end switch on error #
} // if failed query
return $resource;
return $resource;
} // query
@ -89,33 +89,33 @@ class Dba {
* This is a wrapper for query, it's so that in the future if we ever wanted
* to split reads and writes we could
*/
public static function read($sql) {
public static function read($sql) {
return self::query($sql);
return self::query($sql);
} // read
/**
* write
* This is a wrapper for a write query, it is so that we can split out reads and
* writes if we want to
* writes if we want to
*/
public static function write($sql) {
public static function write($sql) {
return self::query($sql);
return self::query($sql);
} // write
/**
* escape
* This runs a escape on a variable so that it can be safely inserted
* into the sql
* into the sql
*/
public static function escape($var) {
public static function escape($var) {
$string = mysql_real_escape_string($var,self::dbh());
return $string;
$string = mysql_real_escape_string($var,self::dbh());
return $string;
} // escape
@ -124,13 +124,13 @@ class Dba {
* This emulates the mysql_fetch_assoc and takes a resource result
* we force it to always return an array, albit an empty one
*/
public static function fetch_assoc($resource) {
public static function fetch_assoc($resource) {
$result = mysql_fetch_assoc($resource);
$result = mysql_fetch_assoc($resource);
if (!$result) {
return array();
}
if (!$result) {
return array();
}
return $result;
@ -141,15 +141,15 @@ class Dba {
* This emulates the mysql_fetch_row and takes a resource result
* we force it to always return an array, albit an empty one
*/
public static function fetch_row($resource) {
public static function fetch_row($resource) {
$result = mysql_fetch_row($resource);
$result = mysql_fetch_row($resource);
if (!$result) {
return array();
}
if (!$result) {
return array();
}
return $result;
return $result;
} // fetch_row
@ -159,25 +159,25 @@ class Dba {
* just a count of rows returned by our select statement, this
* doesn't work for updates or inserts
*/
public static function num_rows($resource) {
$result = mysql_num_rows($resource);
if (!$result) {
return '0';
}
public static function num_rows($resource) {
$result = mysql_num_rows($resource);
if (!$result) {
return '0';
}
return $result;
} // num_rows
} // num_rows
/**
* finish
* This closes a result handle and clears the memory assoicated with it
*/
public static function finish($resource) {
public static function finish($resource) {
// Clear the result memory
mysql_free_result($resource);
mysql_free_result($resource);
} // finish
@ -185,15 +185,15 @@ class Dba {
* affected_rows
* This emulates the mysql_affected_rows function
*/
public static function affected_rows($resource) {
public static function affected_rows($resource) {
$result = mysql_affected_rows($resource);
$result = mysql_affected_rows($resource);
if (!$result) {
return '0';
}
if (!$result) {
return '0';
}
return $result;
return $result;
} // affected_rows
@ -201,40 +201,40 @@ class Dba {
* _connect
* This connects to the database, used by the DBH function
*/
private static function _connect($db_name) {
private static function _connect($db_name) {
if (self::$_default_db == $db_name) {
$username = Config::get('database_username');
$hostname = Config::get('database_hostname');
$password = Config::get('database_password');
$database = Config::get('database_name');
}
else {
if (self::$_default_db == $db_name) {
$username = Config::get('database_username');
$hostname = Config::get('database_hostname');
$password = Config::get('database_password');
$database = Config::get('database_name');
}
else {
// Do this later
}
}
$dbh = mysql_connect($hostname,$username,$password);
if (!$dbh) { debug_event('Database','Error unable to connect to database' . mysql_error(),'1'); }
$dbh = mysql_connect($hostname,$username,$password);
if (!$dbh) { debug_event('Database','Error unable to connect to database' . mysql_error(),'1'); }
$data = self::translate_to_mysqlcharset(Config::get('site_charset'));
if (function_exists('mysql_set_charset')) {
if (!$charset = mysql_set_charset($data['charset'],$dbh)) {
debug_event('Database','Error unable to set MySQL Connection charset to ' . $data['charset'] . ' this may cause issues...','1');
}
}
else {
$sql = "SET NAMES " . mysql_real_escape_string($data['charset']);
$charset = mysql_query($sql,$dbh);
if (mysql_error($dbh)) { debug_event('Database','Error unable to set MySQL Connection charset to ' . $data['charset'] . ' using SET NAMES, you may have issues','1'); }
if (function_exists('mysql_set_charset')) {
if (!$charset = mysql_set_charset($data['charset'],$dbh)) {
debug_event('Database','Error unable to set MySQL Connection charset to ' . $data['charset'] . ' this may cause issues...','1');
}
}
else {
$sql = "SET NAMES " . mysql_real_escape_string($data['charset']);
$charset = mysql_query($sql,$dbh);
if (mysql_error($dbh)) { debug_event('Database','Error unable to set MySQL Connection charset to ' . $data['charset'] . ' using SET NAMES, you may have issues','1'); }
}
if (!$charset) { debug_event('Database','Error unable to set connection charset, function missing or set failed','1'); }
if (!$charset) { debug_event('Database','Error unable to set connection charset, function missing or set failed','1'); }
$select_db = mysql_select_db($database,$dbh);
if (!$select_db) { debug_event('Database','Error unable to select ' . $database . ' error ' . mysql_error(),'1'); }
$select_db = mysql_select_db($database,$dbh);
if (!$select_db) { debug_event('Database','Error unable to select ' . $database . ' error ' . mysql_error(),'1'); }
if (Config::get('sql_profiling')) {
mysql_query('set profiling=1', $dbh);
mysql_query('set profiling_history_size=50', $dbh);
@ -251,13 +251,13 @@ class Dba {
public static function show_profile() {
if (Config::get('sql_profiling')) {
print '<br/>Profiling data: <br/>';
$res = Dba::query('show profiles');
print '<table>';
while ($r = Dba::fetch_row($res)) {
print '<tr><td>' . implode('</td><td>', $r) . '</td></tr>';
}
print '</table>';
print '<br/>Profiling data: <br/>';
$res = Dba::read('show profiles');
print '<table>';
while ($r = Dba::fetch_row($res)) {
print '<tr><td>' . implode('</td><td>', $r) . '</td></tr>';
}
print '</table>';
}
} // show_profile
@ -266,21 +266,21 @@ class Dba {
* This is called by the class to return the database handle
* for the specified database, if none is found it connects
*/
public static function dbh($database='') {
public static function dbh($database='') {
if (!$database) { $database = self::$_default_db; }
if (!$database) { $database = self::$_default_db; }
// Assign the Handle name that we are going to store
$handle = 'dbh_' . $database;
if (!is_resource(Config::get($handle))) {
if (!is_resource(Config::get($handle))) {
$dbh = self::_connect($database);
Config::set($handle,$dbh,1);
Config::set($handle,$dbh,1);
return $dbh;
}
else {
return Config::get($handle);
}
}
else {
return Config::get($handle);
}
} // dbh
@ -289,19 +289,19 @@ class Dba {
* disconnect
* This nukes the dbh connection based, this isn't used very often...
*/
public static function disconnect($database='') {
public static function disconnect($database='') {
if (!$database) { $database = self::$_default_db; }
if (!$database) { $database = self::$_default_db; }
$handle = 'dbh_' . $database;
$handle = 'dbh_' . $database;
// Try to close it correctly
mysql_close(Config::get($handle));
mysql_close(Config::get($handle));
// Nuke it
Config::set($handle,false,1);
Config::set($handle,false,1);
return true;
return true;
} // disconnect
@ -310,10 +310,10 @@ class Dba {
* This emulates the mysql_insert_id function, it takes
* an optional database target
*/
public static function insert_id() {
public static function insert_id() {
$id = mysql_insert_id(self::dbh());
return $id;
$id = mysql_insert_id(self::dbh());
return $id;
} // insert_id
@ -321,22 +321,22 @@ class Dba {
* error
* this returns the error of the db
*/
public static function error() {
public static function error() {
return mysql_error();
return mysql_error();
} // error
/**
* auto_init
* This is the auto init function it sets up the config class
* and also sets the default database
* and also sets the default database
*/
public static function _auto_init() {
public static function _auto_init() {
self::$_default_db = Config::get('database_name');
self::$_default_db = Config::get('database_name');
return true;
return true;
} // auto_init
@ -344,51 +344,51 @@ class Dba {
* translate_to_mysqlcharset
* This translates the specified charset to a mysqlcharset, stupid ass mysql
* demands that it's charset list is different!
*/
public static function translate_to_mysqlcharset($charset) {
*/
public static function translate_to_mysqlcharset($charset) {
// MySQL translte real charset names into fancy smancy MySQL land names
switch (strtoupper($charset)) {
case 'CP1250':
case 'WINDOWS-1250':
$target_charset = 'cp1250';
$target_collation = 'cp1250_general_ci';
break;
case 'ISO-8859':
case 'ISO-8859-2':
$target_charset = 'latin2';
$target_collation = 'latin2_general_ci';
break;
case 'ISO-8859-1':
// MySQL translte real charset names into fancy smancy MySQL land names
switch (strtoupper($charset)) {
case 'CP1250':
case 'WINDOWS-1250':
$target_charset = 'cp1250';
$target_collation = 'cp1250_general_ci';
break;
case 'ISO-8859':
case 'ISO-8859-2':
$target_charset = 'latin2';
$target_collation = 'latin2_general_ci';
break;
case 'ISO-8859-1':
case 'CP1252':
case 'WINDOWS-1252':
$target_charset = 'latin1';
$target_collation = 'latin1_general_ci';
break;
case 'EUC-KR':
$target_charset = 'euckr';
$target_collation = 'euckr_korean_ci';
break;
case 'CP932':
$target_charset = 'sjis';
$target_collation = 'sjis_japanese_ci';
break;
case 'KOI8-U':
$target_charset = 'koi8u';
$target_collation = 'koi8u_general_ci';
break;
case 'KOI8-R':
$target_charset = 'koi8r';
$target_collation = 'koi8r_general_ci';
break;
default;
case 'UTF-8':
$target_charset = 'utf8';
$target_collation = 'utf8_unicode_ci';
break;
} // end mysql charset translation
case 'WINDOWS-1252':
$target_charset = 'latin1';
$target_collation = 'latin1_general_ci';
break;
case 'EUC-KR':
$target_charset = 'euckr';
$target_collation = 'euckr_korean_ci';
break;
case 'CP932':
$target_charset = 'sjis';
$target_collation = 'sjis_japanese_ci';
break;
case 'KOI8-U':
$target_charset = 'koi8u';
$target_collation = 'koi8u_general_ci';
break;
case 'KOI8-R':
$target_charset = 'koi8r';
$target_collation = 'koi8r_general_ci';
break;
default;
case 'UTF-8':
$target_charset = 'utf8';
$target_collation = 'utf8_unicode_ci';
break;
} // end mysql charset translation
return array('charset'=>$target_charset,'collation'=>$target_collation);
return array('charset'=>$target_charset,'collation'=>$target_collation);
} // translate_to_mysqlcharset
@ -396,43 +396,43 @@ class Dba {
* reset_db_charset
* This cruises through the database and trys to set the charset to the current
* site charset, this is an admin function that can be run by an administrator
* this can mess up data if you switch between charsets that are not overlapping
* this can mess up data if you switch between charsets that are not overlapping
* a catalog verify must be re-run to correct them
*/
public static function reset_db_charset() {
public static function reset_db_charset() {
$translated_charset = self::translate_to_mysqlcharset(Config::get('site_charset'));
$target_charset = $translated_charset['charset'];
$target_collation = $translated_charset['collation'];
$translated_charset = self::translate_to_mysqlcharset(Config::get('site_charset'));
$target_charset = $translated_charset['charset'];
$target_collation = $translated_charset['collation'];
// Alter the charset for the entire database
$sql = "ALTER DATABASE `" . Config::get('database_name') . "` DEFAULT CHARACTER SET $target_charset COLLATE $target_collation";
$db_results = Dba::query($sql);
$sql = "ALTER DATABASE `" . Config::get('database_name') . "` DEFAULT CHARACTER SET $target_charset COLLATE $target_collation";
$db_results = Dba::write($sql);
$sql = "SHOW TABLES";
$db_results = Dba::query($sql);
$sql = "SHOW TABLES";
$db_results = Dba::read($sql);
// Go through the tables!
while ($row = Dba::fetch_row($db_results)) {
$sql = "DESCRIBE `" . $row['0'] . "`";
$describe_results = Dba::query($sql);
// Go through the tables!
while ($row = Dba::fetch_row($db_results)) {
$sql = "DESCRIBE `" . $row['0'] . "`";
$describe_results = Dba::read($sql);
// Change the tables default charset and colliation
$sql = "ALTER TABLE `" . $row['0'] . "` DEFAULT CHARACTER SET $target_charset COLLATE $target_collation";
$alter_table = Dba::query($sql);
// Itterate through the columns of the table
while ($table = Dba::fetch_assoc($describe_results)) {
if (strstr($table['Type'],'varchar') OR strstr($table['Type'],'enum') OR strstr($table['Table'],'text')) {
$sql = "ALTER TABLE `" . $row['0'] . "` MODIFY `" . $table['Field'] . "` " . $table['Type'] . " CHARACTER SET " . $target_charset;
$charset_results = Dba::query($sql);
if (!$charset_results) {
debug_event('CHARSET','Unable to update the charset of ' . $table['Field'] . '.' . $table['Type'] . ' to ' . $target_charset,'3');
} // if it fails
} // if its a varchar
} // end columns
$sql = "ALTER TABLE `" . $row['0'] . "` DEFAULT CHARACTER SET $target_charset COLLATE $target_collation";
$alter_table = Dba::write($sql);
} // end tables
// Itterate through the columns of the table
while ($table = Dba::fetch_assoc($describe_results)) {
if (strstr($table['Type'],'varchar') OR strstr($table['Type'],'enum') OR strstr($table['Table'],'text')) {
$sql = "ALTER TABLE `" . $row['0'] . "` MODIFY `" . $table['Field'] . "` " . $table['Type'] . " CHARACTER SET " . $target_charset;
$charset_results = Dba::write($sql);
if (!$charset_results) {
debug_event('CHARSET','Unable to update the charset of ' . $table['Field'] . '.' . $table['Type'] . ' to ' . $target_charset,'3');
} // if it fails
} // if its a varchar
} // end columns
} // end tables
} // reset_db_charset