ID:               34270
 User updated by:  nmariz at estadias dot com
 Reported By:      nmariz at estadias dot com
-Status:           Feedback
+Status:           Open
 Bug Type:         PDO related
 Operating System: Debian GNU/Linux 3.1 (Apache 2)
 PHP Version:      5.1.0RC1
 New Comment:

Ok,

<?php
class Modules {
    public function __construct() {
        $this->dbconn = DatabaseFactory::getInstance();
    }
    public function getModules() {
        $query = 'SELECT id name,text FROM modules';
        $stmt = $this->dbconn->query($query);
        $result = $stmt->fetchAll();
        $stmt = null;
        return $result;
    }
    (...)
}
?>

<?php

abstract class DatabaseFactory {
    private static $instancePool;
    
    private function __construct() {
        // Instanciation not allowed
    }

    // Prevent users to clone the instance
    public function __clone() {
        trigger_error('Clone is not allowed.', E_USER_ERROR);
    }    

    // The singleton method
    public static function &getInstance($instanceIndex = 'default',
$options = null) {
        try {
            if (isset(self::$instancePool[$instanceIndex]))
                return self::$instancePool[$instanceIndex];
            elseif (is_array($options))
                self::factory($instanceIndex, $options);
            else                    
                throw new Exception('The instance with index
<b>'.$instanceIndex.'</b> does not exists');
        } catch (Exception $e) {
            exit('<pre><b>Caught DatabaseFactory exception: </b><br
/>'.$e->getMessage().' on line <b>'.$e->getLine().'</b></pre>');
        }            
        
        return self::$instancePool[$instanceIndex];
    }

    // The factory method    
    public static function factory($instanceIndex, $options) {
        try {
            $dsn =
$options['driver'].':host='.$options['hostname'].';dbname='.$options['database'];
            if ($options['persistent'] == 1)
                self::$instancePool[$instanceIndex] = new PDO($dsn,
$options['username'], $options['password'], array(PDO_ATTR_PERSISTENT
=> true));
            else
                self::$instancePool[$instanceIndex] = new PDO($dsn,
$options['username'], $options['password']);
            
            if ($options['pdo_error_mode'] == 'exception')
               
self::$instancePool[$instanceIndex]->setAttribute(PDO_ATTR_ERRMODE,
PDO_ERRMODE_EXCEPTION);
            elseif ($options['pdo_error_mode'] == 'warning')
               
self::$instancePool[$instanceIndex]->setAttribute(PDO_ATTR_ERRMODE,
PDO_ERRMODE_WARNING);
            else // silent
               
self::$instancePool[$instanceIndex]->setAttribute(PDO_ATTR_ERRMODE,
PDO_ERRMODE_SILENT);
            
        } catch (PDOException $e) {
            exit('<pre><b>Database connection failed: </b><br
/>'.$e->getMessage().' on line <b>'.$e->getLine().'</b></pre>');
        }
    }
    
    // Returns the total of instances
    public static function getTotalInstances() {
        return count(self::$instancePool);
    }

    // Returns the index of the last instance created
    public static function getLastInstanceIndex() {
        return self::$instancePoll[(count(self::$instancePool) - 1)];
    }
}

?>


Previous Comments:
------------------------------------------------------------------------

[2005-08-29 17:44:34] [EMAIL PROTECTED]

No, I don't trust anyone, not even myself when dealing with bugs. Is it
so hard to give the 2-3 lines before this that do the connection/etc? 


------------------------------------------------------------------------

[2005-08-29 17:39:49] nmariz at estadias dot com

Man,
Is in the query part, this happens in several queries on my app.
I am not a beginner in PHP, so trust me...
Whatever, forget... this is a waste of time.

------------------------------------------------------------------------

[2005-08-29 17:07:13] [EMAIL PROTECTED]

I think you don't understand that I am very very lazy.
And that your problem _might_ be somewhere ELSE than in the query part.
So either give the full code or go away.

------------------------------------------------------------------------

[2005-08-29 17:00:45] nmariz at estadias dot com

What part in "Segmentation fault when executing an invalid
SQL(_____ANY_____) statement" did you not understand?
I think that you don't need more code to understand what i mean.

------------------------------------------------------------------------

[2005-08-29 13:24:51] [EMAIL PROTECTED]

What part in "a short but complete example script" did you not
understand?



------------------------------------------------------------------------

The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
    http://bugs.php.net/34270

-- 
Edit this bug report at http://bugs.php.net/?id=34270&edit=1

Reply via email to