0

我们正在遵循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() 进行了检查。

任何帮助都会很棒,谢谢...

4

2 回答 2

2

您正在使用闭包,这意味着$db变量不再在范围内。您需要使用use关键字告诉 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();
于 2013-11-12T11:00:57.777 回答
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'));
于 2013-11-12T15:33:15.643 回答