/* =========
* PHP DbLib
* =========
* A smart database indipendent library for PHP3/4
*
* @2000 by Antonio Gallo aka agx
* mailto:agx@linux.it http://www.badpenguin.org/
* mailto:agx@geocities.com http://www.linux.it/~agx/
*
* This software is released under the GNU GPL license
* got to http://www.gnu.org to get a copy of this license
*
*
* === ChangeLog ===
* 1.0.1 - Sun Nov 19 05:52:55 2000 Added DbPrintGlobals
* 1.0.2 - 2001-04-20 StripSlashes applied to DbExtractRow
* 1.0.3 - 2001-11-07 added $recno to know when to run mysql_data_seek()
* 1.0.4 - 2001-11-13 DbExtractRow bug fixing
*
*
* === Config ===
*
* 1. to use the MySQL unix_timstamp() function also under PostgreSQL you can create the following PGSQL function:
* create function unix_timestamp(datetime) returns int4 as 'select date_part(''epoch'', $1 )::int4' language 'sql';
*
* 2. Uncomment the driver of the database you wanna use :
*
*/
/* INIT */
$recno = 0;
if ($dblib_driver=="") {
//$dblib_driver = "pgsql";
$dblib_driver = "mysql";
}
//
function MySQLTimestamp($t) {
global $dblib_driver;
if ( $dblib_driver == 'mysql') {
// Convert a MySQL string from a datatime field directly into a unix-timestamp
return mktime( substr($t,11,2), substr($t,14,2), substr($t,17,2), substr($t,5,2), substr($t,8,2), substr($t,0,4) );
} else {
// REMEMBER TO SET DATESTYLE TO ISO!!
return mktime( substr($t,11,2), substr($t,14,2), substr($t,17,2), substr($t,5,2), substr($t,8,2), substr($t,0,4) );
}
}
//
function FatalError( $str, $nfun ) {
echo "\n\n";
echo "($nfun) $str\n\n";
exit;
}
//
function FatalQueryError( $qry, $str ) {
echo "\n\n";
echo "(QueryError) $str\nDetails: $qry\n\n";
exit;
}
//
function DbConnect( $hostname, $port, $database, $username, $password ) {
global $dblib_driver;
switch($dblib_driver) {
case "pgsql":
$opt = "dbname=$database host=$hostname user=$username password=$password authtype=password";
$cnn = pg_connect( $opt );
if (!$cnn) FatalError("Error connecting to $hostname", 'DbConnect' );
$opt = "";
return $cnn;
break;
case "mysql":
$cnn = mysql_connect( $hostname, $username, $password );
if (!$cnn) FatalError("Error connecting to $hostname", 'DbConnect' );
if ( ! mysql_select_db($database, $cnn) ) {
FatalError("Error selecting database $dataname", 'DbConnect' );
}
return $cnn;
break;
default:
FatalError( 'Driver: '.$dblib_driver.' unknown', 'DbConnect' );
}
}
//
function DbPConnect( $hostname, $port, $database, $username, $password ) {
global $dblib_driver;
switch($dblib_driver) {
case "pgsql":
$opt = "dbname=$database host=$hostname user=$username password=$password authtype=password";
$cnn = pg_pconnect( $opt );
if (!$cnn) FatalError("Error connecting to $hostname", 'DbPConnect' );
$opt = "";
return $cnn;
break;
case "mysql":
$cnn = mysql_pconnect( $hostname, $username, $password );
if (!$cnn) FatalError("Error connecting to $hostname", 'DbPConnect' );
if ( ! mysql_select_db($database, $cnn) ) {
FatalError("Error selecting database $dataname", 'DbPConnect' );
}
return $cnn;
break;
default:
FatalError( "Driver '$dblib_driver' unknown", 'DbPConnect' );
}
}
//
function DbQuery( $cnn, $qry ) {
global $dblib_driver, $recno;
$recno=0;
switch($dblib_driver) {
case "pgsql":
$qry = eregi_replace( 'NOW\(\)', 'NOW()::datetime', $qry );
$qry = eregi_replace( 'limit .*', '', $qry );
$rs = pg_Exec( $cnn, stripslashes($qry) );
if (!$rs) FatalQueryError( $qry, pg_ErrorMessage($cnn) );
return $rs;
break;
case "mysql":
$rs = mysql_query( $qry, $cnn );
if (!$rs) FatalQueryError( $qry, mysql_error($cnn) );
return $rs;
break;
default:
FatalError( "Driver $dblib_driver unknown", 'RunQuery' );
}
}
function DbQuerySoft( $cnn, $qry ) {
// Like DbQuery but not exit on errors
global $dblib_driver, $recno;
$recno=0;
switch($dblib_driver) {
case "pgsql":
$rs = @pg_Exec( $cnn, stripslashes($qry) );
return $rs;
break;
case "mysql":
$rs = @mysql_query( $qry, $cnn );
return $rs;
break;
default:
FatalError( "Driver $dblib_driver unknown", 'RunQuery' );
}
}
//
function DbQueryResult( $cnn, $res ) {
global $dblib_driver;
switch($dblib_driver) {
case "pgsql":
return pg_cmdTuples( $res );
break;
case "mysql":
return mysql_affected_rows( $cnn );
break;
default:
FatalError( "Driver $dblib_driver unknown", 'QueryResult' );
}
}
//
function DbQuerySize( $res ) {
global $dblib_driver;
switch($dblib_driver) {
case "pgsql":
return pg_NumRows( $res );
break;
case "mysql":
return mysql_num_rows( $res );
break;
default:
FatalError( "Driver $dblib_driver unknown", 'QueryResult' );
}
}
//
function DbGetRow( $res, $nrow ) {
global $dblib_driver, $recno;
switch($dblib_driver) {
case "pgsql": {
$iret = pg_Fetch_Array( $res, $nrow );
$recno++;
return $iret;
break;
}
case "mysql": {
if ($nrow!=$recno) mysql_data_seek($res, $nrow);
$iret = mysql_Fetch_Array( $res );
$recno++;
return $iret;
break;
}
default:
FatalError( "Driver $dblib_driver unknown", 'QueryRow' );
}
}
//
function DbExtractRow( $res, $nrow, $prefix ) {
global $dblib_driver;
switch($dblib_driver) {
case "pgsql": {
$iret = pg_Fetch_Array( $res, $nrow );
if (!$iret) return false;
$l = pg_numfields($res);
$recno++;
//
for ($i=0;$i<$l;$i++) {
$n = $prefix . pg_fieldname($res,$i);
$v = $iret[$i];
if (is_string($v)) {
$GLOBALS[$n] = ''. StripSlashes($v);
} else {
$GLOBALS[$n] = $v;
}
}
return true;
break;
}
case "mysql":
if ($nrow!=$recno) mysql_data_seek($res, $nrow);
$iret = mysql_Fetch_Array( $res );
if (!$iret) return false;
$l = mysql_num_fields($res);
$recno++;
//
for ($i=0;$i<$l;$i++) {
$n = $prefix . mysql_field_name($res,$i);
$v = $iret[$i];
if (is_string($v)) {
$GLOBALS[$n] = ''. StripSlashes($v);
} else {
$GLOBALS[$n] = $v;
}
}
return true;
break;
default:
FatalError( "Driver $dblib_driver unknown", 'QueryRow' );
return false;
}
return false;
}
//
function DbDestroyQuery( $res ) {
global $dblib_driver;
switch($dblib_driver) {
case "pgsql":
return pg_FreeResult( $res );
break;
case "msql":
return mysql_free_result( $res );
break;
default:
FatalError( "Driver $dblib_driver unknown", 'DestroyQuery' );
}
}
//
function DbClose( $cnn ) {
global $dblib_driver;
switch($dblib_driver) {
case "pgsql":
return pg_Close( $cnn );
break;
case "mysql":
return mysql_Close( $cnn );
break;
default:
FatalError( "Driver $dblib_driver unknown", 'DbClose' );
}
}
//
function DbQueryFields( $res ) {
global $dblib_driver;
switch($dblib_driver) {
case "pgsql":
return pg_numfields($res);
break;
case "mysql":
return mysql_num_fields($res);
break;
default:
FatalError( "Driver $dblib_driver unknown", 'DbQueryFields' );
}
}
//
function DbFieldName( $res, $i ) {
global $dblib_driver;
switch($dblib_driver) {
case "pgsql":
return pg_fieldname($res,$i);
break;
case "mysql":
return mysql_field_name($res,$i);
break;
default:
FatalError( "Driver $dblib_driver unknown", 'DbFieldName' );
}
}
//
function DbFieldType( $res, $i ) {
global $dblib_driver;
switch($dblib_driver) {
case "pgsql":
return pg_FieldType($res,$i);
break;
case "mysql":
return mysql_field_type($res,$i);
break;
default:
FatalError( "Driver $dblib_driver unknown", 'DbFieldType' );
}
}
//
function DbFieldSize( $res, $i ) {
global $dblib_driver;
switch($dblib_driver) {
case "pgsql":
return pg_FieldSize($res,$i);
break;
case "mysql":
return mysql_field_len($res,$i);
break;
default:
FatalError( "Driver $dblib_driver unknown", 'DbFieldType' );
}
}
//
function DbPrintGlobals() {
while ( $e = each($GLOBALS) ) {
echo $e[0] .'='. $e[1]. "
\n";
}
}
// End of dblib.inc
?>