2016-02-18 3 views
-2

Внутри моего файла базы данных:PHP: PDO Подключение Настройка Ошибка

class StructureFactory 
{ 
    // Default values 
    protected $provider = null; 
    protected $connection = null; 

    // When Class is called, we send the $provider to it 
    public function __construct(callable $provider) 
    { 
     // replace the $provider in the Class to the sent in $provider 
     $this->provider = $provider; 
    } 

    public function create($name) 
    { 
     if ($this->connection === null) 
     { 
      // Create a new connection with the send in name 
      $this->connection = call_user_func($this->provider); 
     } 
     return new $name($this->connection); 
    } 

} 


$provider = function() 
{ 
    // New provider variables 
    $instance = new PDO('mysql:dbname:DBNAME;host=localhost;charset=utf8', 'userHERE', 'passHERE'); 
    $instance->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $instance->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 
    return $instance; 
}; 

// send the new provider 
$factory = new StructureFactory($provider); 

// Create a new connection with $db 
function open_database($factory){ 
    $db = $factory->create('db'); 
    global $db; 
} 

позвонить подключение к базе данных:

define('FILE_ROOT', dirname(__FILE__) . '/'); 
    require_once FILE_ROOT.'inc/database.php'; 
    open_database($factory); 

    foreach ($db->query("SELECT * FROM tbl_name") as $row) { echo $row['columnName']; } 

Но я получаю эту ошибку:

Fatal error: Class 'db' not found in /home/kyleport/public_html/inc/database.php on line 23

Может кто-нибудь ссылается на что-нибудь, что поможет мне попытаться это исправить? Я так плохо борюсь.

+1

http://php.net/manual/en/pdo.construct.php - четвертый параметр - это массив параметров. Имя базы данных является частью вашего DSN – andrewsi

+0

, так где же происходит переименование базы данных? @andrewsi – KDOT

+0

Вы посмотрели ссылку? Он показывает вам, как вам нужно это делать – andrewsi

ответ

0

Используйте его как

new PDO('mysql:host=myHost;dbname=myDB;charset=myCharset',$user, $pass, $options_array) 

в вашем случае options_array уже могли установить эти атрибуты:

new PDO('mysql:host=myHost;dbname=myDB;charset=myCharset',$user, $pass, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_EMULATE_PREPARES => false)); 

Edit: хорошо вы редактировали вопрос ... У вас есть линия

return new $name($this->connection); 

в вашем коде, и вы называете это $name = 'db';

поэтому он будет выполняться как return new db($this->connection); Но на данный момент у вас, очевидно, нет класса с именем 'db'.