使用MySQLi时,调用非对象的成员函数

时间:2013-12-01 04:27:23

标签: php database mysqli

我一直在研究一个相对简单的项目,为了使它更容易,我决定使用this PHP类来简化数据库连接。但是,我遇到了一些问题。

<?php
require 'Slim/Slim.php';
require_once('lib/db.php');

\Slim\Slim::registerAutoloader();

$app = new \Slim\Slim();
$db = new MysqliDb('127.0.0.1', 'root', '', 'url_shortener');

$app->get('/u/:url', function ($url) {
    $urls = $db
        ->where('short', $url)
        ->get('urls');
    //require('views/u.php');
    print_r($urls);
});

当我导航到/ u / 1时,我收到以下错误:

Fatal error: Call to a member function where() on a non-object in [my site index]

任何想法如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

您需要在Closure中导入$ db:

$app->get('/u/:url', function ($url) use ($db) { ... }

答案 1 :(得分:1)

$db变量在您声明的匿名函数中不可用。你假设它是一个对象,但由于它没有定义,它是NULL(在函数内部)。使用闭包,要访问函数范围之外的变量,可以使用use关键字为该函数授予权限。

$app->get('/u/:url', function ($url) use ($db) { ... }

现在$db在功能范围内可用,您可以随意使用它。