在我的数据库文件中:
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”类
任何人都可以参考任何可以帮我解决此问题的方法吗?我很挣扎。
答案 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'的课程。