PHP:PDO连接设置错误

时间:2016-02-18 13:53:28

标签: php mysql 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']; }

但是我收到了这个错误:

  

致命错误:第23行的/home/kyleport/public_html/inc/database.php中找不到“db”类

任何人都可以参考任何可以帮我解决此问题的方法吗?我很挣扎。

1 个答案:

答案 0 :(得分: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));

编辑:好的,你编辑了问题...... 你有一行

return new $name( $this->connection );
在您的代码中

,并使用$name = 'db';

进行调用

所以它将以return new db( $this->connection );执行 但是在这一点上,你显然没有名为'db'的课程。