File: //var/www/bk/efi/eficenter.ru/core/db_connect.php
<?php
function db_connect($host='localhost', $dbname, $user='root', $passwd='', $port='3306', $persist=false) {
function_exists( 'mysql_connect' )
or die( 'FATAL ERROR: MySQL support not avaiable. Please check your configuration.' );
if ($persist) {
$link = mysql_pconnect($host, $user, $passwd);
if (!$link) die('FATAL ERROR: Connection to database server failed');
} else {
$link = mysql_connect($host, $user, $passwd);
if (!$link) die( 'FATAL ERROR: Connection to database server failed' );
}
if ($dbname) {
mysql_select_db( $dbname )
or die( "FATAL ERROR: Database not found ($dbname)" );
} else {
die( "FATAL ERROR: Database name not supplied<br />(connection to database server succesful)" );
}
}
function db_error() {
return mysql_error();
}
function db_errno() {
return mysql_errno();
}
function db_insert_id() {
return mysql_insert_id();
}
function db_affected_rows() {
return mysql_affected_rows();
}
function db_exec( $sql ) {
$cur = mysql_query( $sql );
if( !$cur ) {
return false;
}
return $cur;
}
function db_free_result( $cur ) {
if($cur) {
mysql_free_result( $cur );
}
}
function db_num_rows( $qid ) {
return mysql_num_rows( $qid );
}
function db_num_fields( $qid ) {
return mysql_num_fields( $qid );
}
function db_fetch_row( $cur ) {
return mysql_fetch_row( $cur );
}
function db_fetch_assoc( $cur , $type = null) {
if ($type) return mysql_fetch_assoc( $cur , $type);
else return mysql_fetch_assoc( $cur );
}
function db_fetch_array( $cur ) {
return @mysql_fetch_array( $cur );
}
function db_fetch_object( $cur ) {
return mysql_fetch_object( $cur );
}
function db_escape( $str ) {
return (!get_magic_quotes_gpc()) ? mysql_escape_string($str) : $str;
}
function db_version() {
if( ($cur = mysql_query( "SELECT VERSION()" )) ) {
$row = mysql_fetch_row( $cur );
mysql_free_result( $cur );
return $row[0];
} else {
return 0;
}
}
function db_unix2dateTime( $time ) {
return $time > 0 ? date("Y-m-d H:i:s", $time) : null;
}
function db_dateTime2unix( $time ) {
if ($time == '0000-00-00 00:00:00') {
return -1;
}
if( ! preg_match( "/^(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})(.?)$/", $time, $a ) ) {
return -1;
} else {
return mktime( $a[4], $a[5], $a[6], $a[2], $a[3], $a[1] );
}
}
function db_tableNames() {
global $CONFIG, $db1;
$connect = db_connect($CONFIG['db_host'],
$CONFIG['db_database'],
$CONFIG['db_user'],
$CONFIG['db_password'],
$CONFIG['db_port'],
FALSE);
$sql = "show tables";
$i = 0;
$res = @mysql_query($sql);
while ($info = @mysql_fetch_row($res)) {
$return[$i]["table_name"] = $info[0];
$return[$i]["tablespace_name"] = $this->Database;
$return[$i]["database"] = $this->Database;
$i++;
}
@mysql_free_result($h);
return $return;
}
function db_loadObject( $sql, &$object, $bindAll=false , $strip = true) {
if ($object != null) {
$hash = array();
if( !db_loadHash( $sql, $hash ) ) {
return false;
}
bindHashToObject( $hash, $object, null, $strip, $bindAll );
return true;
} else {
$cur = db_exec( $sql );
$cur or exit( db_error() );
if ($object = db_fetch_object( $cur )) {
db_free_result( $cur );
return true;
} else {
$object = null;
return false;
}
}
}
function db_loadHash( $sql, &$hash ) {
$cur = db_exec( $sql );
$cur or exit( db_error() );
$hash = db_fetch_assoc( $cur );
db_free_result( $cur );
if ($hash == false) {
return false;
} else {
return true;
}
}
function bindHashToObject( $hash, &$obj, $prefix=NULL, $checkSlashes=true, $bindAll=false ) {
is_array( $hash ) or die( "bindHashToObject : hash expected" );
is_object( $obj ) or die( "bindHashToObject : object expected" );
if ($bindAll) {
foreach ($hash as $k => $v) {
$obj->$k = ($checkSlashes && get_magic_quotes_gpc()) ? stripslashes( $hash[$k] ) : $hash[$k];
}
} else if ($prefix) {
foreach (get_object_vars($obj) as $k => $v) {
if (isset($hash[$prefix . $k ])) {
$obj->$k = ($checkSlashes && get_magic_quotes_gpc()) ? stripslashes( $hash[$k] ) : $hash[$k];
}
}
} else {
foreach (get_object_vars($obj) as $k => $v) {
if (isset($hash[$k])) {
$obj->$k = ($checkSlashes && get_magic_quotes_gpc()) ? stripslashes( $hash[$k] ) : $hash[$k];
}
}
}
}
function db_loadResult( $sql ) {
$cur = db_exec( $sql );
$cur or exit( db_error() );
$ret = null;
if ($row = db_fetch_row( $cur )) {
$ret = $row[0];
}
db_free_result( $cur );
return $ret;
}
function db_loadResult2($sql) {
$cur = db_exec($sql);
$ret = db_fetch_array($cur);
db_free_result($cur);
return $ret;
}
function db_loadHashList( $sql, $index='' ) {
$cur = db_exec( $sql );
$cur or exit( db_error() );
$hashlist = array();
while ($hash = db_fetch_array( $cur )) {
$hashlist[$hash[$index ? $index : 0]] = $index ? $hash : $hash[1];
}
db_free_result( $cur );
return $hashlist;
}
function db_loadList( $sql, $maxrows=NULL ) {
if (!($cur = db_exec( $sql ))) {;
echo db_error();
return false;
}
$list = array();
$cnt = 0;
while ($hash = db_fetch_assoc( $cur )) {
$list[] = $hash;
if( $maxrows && $maxrows == $cnt++ ) {
break;
}
}
db_free_result( $cur );
return $list;
}
function db_loadList2( $sql, $maxrows=NULL ) {
if (!($cur = db_exec( $sql ))) {;
echo db_error();
return false;
}
$list = array();
$cnt = 0;
while ($hash = db_fetch_row( $cur )) {
$list[] = $hash[0];
if( $maxrows && $maxrows == $cnt++ ) {
break;
}
}
db_free_result( $cur );
return $list;
}
function db_loadColumn( $sql, $maxrows=NULL ) {
if (!($cur = db_exec( $sql ))) {;
echo db_error();
return false;
}
$list = array();
$cnt = 0;
while ($row = db_fetch_row( $cur )) {
$list[] = $row[0];
if( $maxrows && $maxrows == $cnt++ ) {
break;
}
}
db_free_result( $cur );
return $list;
}
function db_loadObjectList( $sql, $object, $maxrows = NULL ) {
$cur = db_exec( $sql );
if (!$cur) {
die( "db_loadObjectList : " . db_error() );
}
$list = array();
$cnt = 0;
while ($row = db_fetch_array( $cur )) {
$object->load( $row[0] );
$list[] = $object;
if( $maxrows && $maxrows == $cnt++ ) {
break;
}
}
db_free_result( $cur );
return $list;
}
function db_insertArray( $table, &$hash, $verbose=false ) {
$fmtsql = "insert into $table ( %s ) values( %s ) ";
foreach ($hash as $k => $v) {
if (is_array($v) or is_object($v) or $v == NULL) {
continue;
}
$fields[] = $k;
$values[] = "'" . ( $v ) . "'";
}
$sql = sprintf( $fmtsql, implode( ",", $fields ) , implode( ",", $values ) );
($verbose) && print "$sql<br />\n";
if (!db_exec( $sql )) {
return false;
}
$id = db_insert_id();
return true;
}
function db_updateArray( $table, &$hash, $keyName, $verbose=false ) {
$fmtsql = "UPDATE $table SET %s WHERE %s";
foreach ($hash as $k => $v) {
if( is_array($v) or is_object($v) or $k[0] == '_' ) // internal or NA field
continue;
if( $k == $keyName ) { // PK not to be updated
$where = "$keyName='" . ( $v ) . "'";
continue;
}
if ($v == '') {
$val = 'NULL';
} else {
$val = "'" . ( $v ) . "'";
}
$tmp[] = "$k=$val";
}
$sql = sprintf( $fmtsql, implode( ",", $tmp ) , $where );
($verbose) && print "$sql<br />\n";
$ret = db_exec( $sql );
return $ret;
}
function db_delete( $table, $keyName, $keyValue ) {
$keyName = ( $keyName );
$keyValue = ( $keyValue );
$ret = db_exec( "DELETE FROM $table WHERE $keyName='$keyValue'" );
return $ret;
}
function db_insertObject( $table, &$object, $keyName = NULL, $verbose=false ) {
$fmtsql = "INSERT INTO $table ( %s ) VALUES ( %s ) ";
foreach (get_object_vars( $object ) as $k => $v) {
if (is_array($v) or is_object($v) or $v == NULL) {
continue;
}
if ($k[0] == '_') { // internal field
continue;
}
$fields[] = $k;
$values[] = "'" . ( $v ) . "'";
}
$sql = sprintf( $fmtsql, implode( ",", $fields ) , implode( ",", $values ) );
($verbose) && print "$sql<br />\n";
if (!db_exec( $sql )) {
return false;
}
$id = db_insert_id();
($verbose) && print "id=[$id]<br />\n";
if ($keyName && $id)
$object->$keyName = $id;
return true;
}
function db_updateObject( $table, &$object, $keyName, $updateNulls=true ) {
$fmtsql = "UPDATE $table SET %s WHERE %s";
foreach (get_object_vars( $object ) as $k => $v) {
if( is_array($v) or is_object($v) or $k[0] == '_' ) { // internal or NA field
continue;
}
if( $k == $keyName ) { // PK not to be updated
$where = "$keyName='" . ( $v ) . "'";
continue;
}
if ($v === NULL && !$updateNulls) {
continue;
}
if( $v == '' ) {
$val = "''";
} else {
$val = "'" . ( $v ) . "'";
}
$tmp[] = "$k=$val";
}
$sql = sprintf( $fmtsql, implode( ",", $tmp ) , $where );
return db_exec( $sql );
}
function db_dateConvert( $src, &$dest, $srcFmt ) {
$result = strtotime( $src );
$dest = $result;
return ( $result != 0 );
}
function db_datetime( $timestamp = NULL ) {
if (!$timestamp) {
return NULL;
}
if (is_object($timestamp)) {
return $timestamp->toString( '%Y-%m-%d %H:%M:%S');
} else {
return strftime( '%Y-%m-%d %H:%M:%S', $timestamp );
}
}
///////////////////////////////******************************************************
class my_sql
{
var $Host = '';
var $Database = '';
var $User = '';
var $Password = '';
var $Auto_Free = 0;
var $Halt_On_Error = 'yes';
var $PConnect = 0;
var $Seq_Table = 'db_sequence';
var $Record = array ();
var $Row = null;
var $Errno = 0;
var $Error = '';
var $type = 'mysql';
var $revision = '1.2';
var $Link_ID = 0;
var $Query_ID = 0;
var $locked = false;
function db_sql ($query = '')
{
$this->query ($query);
}
function escape ($query)
{
if (!get_magic_quotes_gpc ())
{
$query = mysql_escape_string (trim ($query));
}
return $query;
}
function link_id ()
{
return $this->Link_ID;
}
function query_id ()
{
return $this->Query_ID;
}
function connect ($database = '', $host = '', $user = '', $password = '')
{
if ('' == $database)
{
$database = $this->Database;
}
if ('' == $host)
{
$host = $this->Host;
}
if ('' == $user)
{
$user = $this->User;
}
if ('' == $password)
{
$password = $this->Password;
}
if (0 == $this->Link_ID)
{
if (!$this->PConnect)
{
$this->Link_ID = mysql_connect ($host, $user, $password);
mysql_query("set names cp1251");
}
else
{
$this->Link_ID = mysql_pconnect ($host, $user, $password);
}
if (!$this->Link_ID)
{
$this->halt ('connection to database failed!');
return FALSE;
}
if (!@mysql_select_db ($database, $this->Link_ID))
{
$this->halt ('cannot use database!');
return FALSE;
}
}
return $this->Link_ID;
}
function free ()
{
@mysql_free_result ($this->Query_ID);
$this->Query_ID = 0;
}
function query ($query_string) {
global $CONFIG, $queries;
if ('' == $query_string)
{
return FALSE;
}
if (!$this->connect ())
{
return FALSE;
}
if ($this->Query_ID)
{
$this->free ();
}
$this->Query_ID = @mysql_query ($query_string, $this->Link_ID);
$this->Row = 0;
$this->Errno = mysql_errno ();
$this->Error = mysql_error ();
if (!$this->Query_ID)
{
$this->halt ('Invalid SQL: ' . $query_string);
}
return $this->Query_ID;
}
function getarrayofresult ($query_string)
{
if ($this->query ($query_string))
{
while ($arr = mysql_fetch_assoc ($this->Query_ID))
{
$val[] = $arr;
}
if (is_array ($val))
{
return $val;
}
}
return FALSE;
}
function next_record ()
{
if (!$this->Query_ID)
{
$this->halt ('next_record called with no query pending.');
return FALSE;
}
$this->Record = @mysql_fetch_array ($this->Query_ID);
$this->Row += 1;
$this->Errno = mysql_errno ();
$this->Error = mysql_error ();
$stat = is_array ($this->Record);
if ((!$stat AND $this->Auto_Free))
{
$this->free ();
}
return $stat;
}
function seek ($pos = 0)
{
$status = @mysql_data_seek ($this->Query_ID, $pos);
if ($status)
{
$this->Row = $pos;
}
else
{
$this->halt ('seek(' . $pos . ') failed: result has ' . $this->num_rows () . ' rows.');
@mysql_data_seek ($this->Query_ID, @$this->num_rows ());
$this->Row = $this->num_rows ();
return FALSE;
}
return TRUE;
}
function lock ($table, $mode = 'write')
{
$query = 'lock tables ';
if (is_array ($table))
{
while (list ($key, $value) = each ($table))
{
if (is_int ($key))
{
$key = $mode;
}
if (strpos ($value, ','))
{
$query .= str_replace (',', '' . ' ' . $key . ', ', $value) . ('' . ' ' . $key . ', ');
continue;
}
else
{
$query .= '' . $value . ' ' . $key . ', ';
continue;
}
}
$query = substr ($query, 0, -2);
}
else
{
if (strpos ($table, ','))
{
$query .= str_replace (',', ' ' . $mode . ', ', $table) . ' ' . $mode;
}
else
{
$query .= $table . ' ' . $mode;
}
}
if (!$this->query ($query))
{
$this->halt ('lock() failed.');
return FALSE;
}
$this->locked = TRUE;
return TRUE;
}
function unlock ()
{
$this->locked = FALSE;
if (!$this->query ('unlock tables'))
{
$this->halt ('unlock() failed.');
return FALSE;
}
return TRUE;
}
function affected_rows ()
{
return @mysql_affected_rows ($this->Link_ID);
}
function num_rows ()
{
return @mysql_num_rows ($this->Query_ID);
}
function num_fields ()
{
return @mysql_num_fields ($this->Query_ID);
}
function nf ()
{
return $this->num_rows ();
}
function np ()
{
print $this->num_rows ();
}
function f ($name)
{
if (isset ($this->Record[$name]))
{
return $this->Record[$name];
}
}
function p ($Name)
{
if (isset ($this->Record[$Name]))
{
print $this->Record[$Name];
}
}
function nextid ($seq_name)
{
if (!$this->locked)
{
if ($this->lock ($this->Seq_Table))
{
$locked = TRUE;
}
else
{
$this->halt ('cannot lock ' . $this->Seq_Table . ' - has it been created?');
return FALSE;
}
}
$q = sprintf ('select nextid from %s where seq_name = \'%s\'', $this->Seq_Table, $seq_name);
if (!$this->query ($q))
{
$this->halt ('query failed in nextid: ' . $q);
return FALSE;
}
if (!$this->next_record ())
{
$currentid = 0;
$q = sprintf ('insert into %s values(\'%s\', %s)', $this->Seq_Table, $seq_name, $currentid);
if (!$this->query ($q))
{
$this->halt ('query failed in nextid: ' . $q);
return FALSE;
}
}
else
{
$currentid = $this->f ('nextid');
}
$nextid = $currentid + 1;
$q = sprintf ('update %s set nextid = \'%s\' where seq_name = \'%s\'', $this->Seq_Table, $nextid, $seq_name);
if (!$this->query ($q))
{
$this->halt ('query failed in nextid: ' . $q);
return FALSE;
}
if ($locked)
{
$this->unlock ();
}
return $nextid;
}
function metadata ($table = '', $full = FALSE)
{
$count = 0;
$id = 0;
$res = array ();
if ($table)
{
$this->connect ();
$id = @mysql_list_fields ($this->Database, $table);
if (!$id)
{
$this->halt ('Metadata query failed.');
return FALSE;
}
}
else
{
$id = $this->Query_ID;
if (!$id)
{
$this->halt ('No query specified.');
return FALSE;
}
}
$count = @mysql_num_fields ($id);
if (!$full)
{
for ($i = 0; $i < $count; ++$i)
{
$res[$i]['table'] = @mysql_field_table ($id, $i);
$res[$i]['name'] = @mysql_field_name ($id, $i);
$res[$i]['type'] = @mysql_field_type ($id, $i);
$res[$i]['len'] = @mysql_field_len ($id, $i);
$res[$i]['flags'] = @mysql_field_flags ($id, $i);
}
}
else
{
$res['num_fields'] = $count;
for ($i = 0; $i < $count; ++$i)
{
$res[$i]['table'] = @mysql_field_table ($id, $i);
$res[$i]['name'] = @mysql_field_name ($id, $i);
$res[$i]['type'] = @mysql_field_type ($id, $i);
$res[$i]['len'] = @mysql_field_len ($id, $i);
$res[$i]['flags'] = @mysql_field_flags ($id, $i);
$res['meta'][$res[$i]['name']] = $i;
}
}
if ($table)
{
@mysql_free_result ($id);
}
return $res;
}
function table_names ()
{
$this->connect ();
$h = @mysql_query ('show tables', $this->Link_ID);
$i = 0;
while ($info = @mysql_fetch_row ($h))
{
$return[$i]['table_name'] = $info[0];
$return[$i]['tablespace_name'] = $this->Database;
$return[$i]['database'] = $this->Database;
++$i;
}
@mysql_free_result ($h);
return $return;
}
function halt ($msg)
{
$this->Error = @mysql_error ($this->Link_ID);
$this->Errno = @mysql_errno ($this->Link_ID);
if ($this->locked)
{
$this->unlock ();
}
if ($this->Halt_On_Error == 'no')
{
return NULL;
}
$this->haltmsg ($msg);
if ($this->Halt_On_Error != 'report')
{
exit ('Session halted.');
}
}
function haltmsg ($msg)
{
printf ('</td></tr></table><b>Database error:</b> %s<br>
', $msg);
printf ('<b>MySQL Error</b>: %s (%s)<br>
', $this->Errno, $this->Error);
}
function lid ()
{
return @mysql_insert_id ($this->Link_ID);
}
function get_arr ($tabname)
{
$head = $this->metadata ($tabname);
for ($j = 0; $j < $this->num_fields (); ++$j)
{
$table[0][$j] = $head[$j]['name'];
}
for ($i = 1; $i <= $this->num_rows (); ++$i)
{
$this->next_record ();
for ($j = 0; $j < $this->num_fields (); ++$j)
{
$h = $head[$j]['name'];
$table[$i][$j] = $this->f ($h);
$table[$i][$j] = trim ($table[$i][$j]);
}
}
return $table;
}
}
?>