我们正在关注github上的入门教程,一切顺利,但我们被困在数据库连接上。
我们已经创建了$ db对象:
$db=new DB\SQL(
'mysql:host=localhost;port=3306;dbname=liselore',
'jow',
''
);
我们已经设置了一个控制器:
$f3->route('GET /',
function($f3) {
$f3->set('result',$db->exec('SELECT achternaam FROM test1'));
$template = new Template;
echo $template->render('views/homepage.html');
}
);
$f3->run();
但是,我们收到此错误:
Internal Server Error
Fatal error: Call to a member function exec() on a non-object
• fatfree-master/index.php:32
我认为该错误与未设置的$ db对象有关。但是,我们确实有php-pdo设置,我只是通过phpinfo()检查。
任何帮助都会很棒,但是......
答案 0 :(得分:2)
您使用的是closure,这意味着$db
变量不再位于scope中。您需要使用use
keyword告诉PHP允许使用父作用域中的变量。
$f3->route('GET /', function($f3) use ($db) {
$f3->set('result', $db->exec('SELECT achternaam FROM test1'));
$template = new Template;
echo $template->render('views/homepage.html');
});
$f3->run();
答案 1 :(得分:1)
你已经说过了:
使用$ f3-> set方法设置的所有变量都是全局的
是的,将这些对象保存在这些框架变量中是一种常见做法。所以试试
$f3->set('DB', $db=new DB\SQL('mysql:host=localhost;port=3306;dbname=liselore','jow',''));
并在其他地方使用它:
$f3->set('result',$f3->get('DB')->exec('SELECT achternaam FROM test1'));