lundi 8 août 2016

Database in Class for reusability

Is there a better way to implement this? I think this one cause much memory. How should i use a singleton pattern if i have two different databases?

My example is this database class

<?php
/**
 * Database
 *
 * Class for handling database connections
 *
 * 
 * @category   Global Class
 * @copyright  ---          
 * @license    ---    
 * @version    1.0
 * @link       ---
 * @since      File available since Release 1.0
 * @created    ---
 * @modified   ---
 * @author     Original Author <--->
 * @author     Future Author <--->
 */

class Database
{
    private $database_connection = null;

    public function __construct( $database_id )
    {
        $database_host     = '';
        $database_name     = '';
        $database_username = '';
        $database_password = '';

        switch ( $database_id ) {
            case 'db1':
                $database_host     = 'host';
                $database_name     = 'name';
                $database_username = 'user';
                $database_password = 'pass';
                break;
            case 'db2':
                $database_host     = 'host';
                $database_name     = 'name';
                $database_username = 'user';
                $database_password = 'pass';
                break;
            default:
                trigger_error( 'Undefined database id', E_USER_ERROR );
        }

        try {
            $this->database_connection = new PDO( "mysql:host={$database_host};
                                                  dbname={$database_name}",
                                                  $database_username,
                                                  $database_password );

            $this->database_connection->setAttribute( PDO::ATTR_ERRMODE,
                                                      PDO::ERRMODE_EXCEPTION );
        } catch ( PDOException $pdo_exception ) {
            trigger_error( $pdo_exception, E_USER_ERROR );
        }

        if ( empty( $this->database_connection ) ) {
            trigger_error( 'Undefined database connection', E_USER_ERROR );
        }       
    }

    public function execute_query( $query, $statement_id, $values )
    {
        $statement = $this->database_connection->prepare( $query );

        // query3 has no parameters so skip the bindParam process
        if ( $statement_id != 'query3' ) {
            if ( $statement_id == 'query1' ) {
                $statement->bindParam( ':id', $values[ 0 ] );
            } else if ( $statement_id == 'query2' ) {
                $statement->bindParam( ':id1', $values[ 0 ] );
                $statement->bindParam( ':id2', $values[ 1 ] );
            } else {
                trigger_error( 'Undefined statement id', E_USER_ERROR );
            }
        }

        $statement->execute();

        return $statement->fetchAll();
    }
}

?>

and call it here like this?

<?php
require once( "database.php" );

$database_1 = new Database( "db1" );
$database_2 = new Database( "db2" );

$database_1->execute_query( "SELECT * FROM user WHERE id = :id", "query1", array( 0 ) );
$database_1->execute_query( "SELECT * FROM user WHERE id = :id", "query1", array( 1 ) );
$database_1->execute_query( "SELECT * FROM user", "query3", null );

$database_2->execute_query( "SELECT * FROM user WHERE id = :id1 AND id2 = :id2", "query2", array( 0, 1 ) );
$database_2->execute_query( "SELECT * FROM user WHERE id = :id1 AND id2 = :id2", "query2", array( 2, 3 ) );

?>

Aucun commentaire:

Enregistrer un commentaire