PX : code

Oracle8 abst.layer by Stig S. Bakken
Download this code


<?php // -*- C++ -*-
/*
 * $Id: db-oci8.phl,v 1.2 1998/10/01 19:16:06 ssb Exp $
 */

$db_error_code 0;
$db_error_msg false;
$db_error_source false;

/*
 * Database specific notes:
 *
 * - You must configure Oracle listener to use this abstraction layer.
 *
 */


/**
 * @function db_connect
 * @purpose Connect to a database
 * @desc
 *   Connects to a database and returns and identifier for the connection.
 * @arg database
 *   Data source name or database host to connect to.
 * @arg user
 *   Name of user to connect as.
 * @arg password
 *   The user's password.
 */
function db_connect($database$user$password)
{
    
$ret = @OCILogon($user$password$database);
    
db_check_errors($php_errormsg);
    return 
$ret;
}

/*
 * Function: db_query
 * Arguments: $conn (int)     - connection identifier
 *            $query (string) - SQL statement to execute
 * Description: executes an SQL statement
 * Returns:   false - query failed
 *          integer - query succeeded, value is result handle
 */
function db_query($conn$query)
{
    
$stmt = @OCIParse($conn$query);
    
db_check_errors($php_errormsg);
    if (!
$stmt) {
    return 
false;
    }
    if (@
OCIExecute($stmt)) {
    return 
$stmt;
    }
    
db_check_errors($php_errormsg);
    @
OCIFreeStatement($stmt);
    return 
false;
}

/*
 * Function: db_fetch_row
 * Arguments: $stmt (int)   - result identifier
 * Description: Returns an array containing data from a fetched row.
 * Returns:   false - error
 *          (array) - returned row, first column at index 0
 */
function db_fetch_row($stmt)
{
    
$cols = @OCIFetchInto($stmt, &$row);
    if (!
$cols) {
    
db_check_errors($php_errormsg);
    return 
false;
    }
    return 
$row;
}

/*
 * Function: db_free_result
 * Arguments: $stmt (int)   - result identifier
 * Description: Frees all memory associated with a result identifier.
 * Returns: false - failure
 *           true - success
 */
function db_free_result($stmt)
{
    global 
$db_oci8_pieces;

    if (isset(
$db_oci8_pieces[$stmt])) {
    unset(
$db_oci8_pieces[$stmt]);
    }
    
$ret = @OCIFreeStatement($stmt);
    
db_check_errors($php_errormsg);
    return 
$ret;
}

/*
 * Function: db_disconnect
 * Arguments: $connection (int) - connection identifier
 * Description: closes a database connection
 * Returns: false - failure
 *           true - success
 */
function db_disconnect($connection)
{
    
$ret = @OCILogoff($connection);
    
db_check_errors($php_errormsg);
    return 
$ret;
}

/*
 * Function: db_autocommit
 * Arguments: $connection (int) - connection identifier
 * Description: turn autocommit on or off
 * Returns: false - failure
 *           true - success
 */
function db_autocommit($connection$enabled)
{
    if (!
$enabled) {
    
db_post_error(0"Transactions not yet implemented");
    return 
false;
    }
    return 
true;
}


function 
db_commit($connection)
{
    return 
true;
}


function 
db_rollback($connection)
{
    
db_post_error(0"Transactions not yet implemented");
    return 
false;
}


function 
db_quote_string($string)
{
    
$ret ereg_replace("'""''"$string);
    return 
$ret;
}


function 
db_prepare($connection$query)
{
    global 
$db_oci8_pieces;

    
$pieces explode("?"$query);
    
$new_query "";
    
$last_piece sizeof($pieces) - 1;
    print 
"<br>last_piece=$last_piece\n";
    while (list(
$i$piece) = each($pieces)) {
    
$new_query .= $piece;
    if (
$i $last_piece) {
        
$new_query .= ":var$i";
    }
    }
    print 
"<br>new_query=$new_query\n";
    
$stmt = @OCIParse($connection$new_query);
    if (!
$stmt) {
    
db_check_errors($php_errormsg);
    return 
false;
    }
    for (
$i 0$i $last_piece$i++) {
    
$bindvar ":var$i";
    print 
"<br>trying to bind $bindvar\n";
    if (!@
OCIBindByName($stmt$bindvar, &$db_oci8_pieces[$stmt][$i])) {
        
db_check_errors($php_errormsg);
        @
OCIFreeStatement($stmt);
        return 
false;
    }
    }
    return 
$stmt;
}


function 
db_execute($stmt$data)
{
    global 
$db_oci8_pieces;

    while (list(
$i$value) = each($data)) {
    
$db_oci8_pieces[$stmt][$i] = $data[$i];
    }
    
$ret = @OCIExecute($stmt);
    if (!
$ret) {
    
db_check_errors($php_errormsg);
    return 
false;
    }
    return 
true;
}


function 
db_error_code()
{
    global 
$db_error_code;
    return 
$db_error_code;
}


function 
db_error_msg()
{
    global 
$db_error_msg;
    return 
$db_error_msg;
}


function 
db_error_source()
{
    global 
$db_error_source;
    return 
$db_error_source;
}


function 
db_check_errors($errormsg)
{
    global 
$db_error_code$db_error_msg$db_error_source;
    if (
ereg('^([^:]*): (...-.....): (.*)'$errormsg, &$data)) {
    list(
$foo$function$db_error_code$db_error_msg) = $data;
    
$db_error_msg "$function: $db_error_msg";
    
$db_error_source "[Oracle][PHP][OCI8]";
    } elseif (
ereg('^([^:]*): (.*)'$errormsg, &$data)) {
    list(
$foo$function$db_error_msg) = $data;
    
$db_error_msg "$function: $db_error_msg";
    
$db_error_code 0;
    
$db_error_source "[PHP][OCI8][db-oci8]";
    } else {
    
$db_error_msg $errormsg;
    
$db_error_code 0;
    
$db_error_source "[PHP][OCI8][db-oci8]";
    }
}


function 
db_post_error($code$message)
{
    global 
$db_error_code$db_error_msg$db_error_source;
    
$db_error_code $code;
    
$db_error_msg $message;
    
$db_error_source "[PHP][OCI8][db-oci8]";
}


function 
db_api_version()
{
    return 
10// 1.0
}

?>

Comments or questions?
PX is running PHP 5.2.17
Thanks to Miranda Productions for hosting and bandwidth.
Use of any code from PX is at your own risk.