【问题标题】:PHP Slim framework database class not workingPHP Slim 框架数据库类不起作用
【发布时间】:2014-03-27 00:52:49
【问题描述】:

我已经为此苦苦思索了好几个小时,但我似乎无法找出问题所在,基本上我有一个库文件,它在所有地方都被调用,并且除了我打电话的地方外,其他地方都可以正常工作在这里。

在我尝试访问 db 对象并查询任何内容之前,我可以变得很苗条以正常工作吗?我可能很昏暗,但这或多或少正是它在苗条的文档中所说的那样,并在其中添加了几行额外的行,因此它停止工作是没有意义的。

    require_once "libary.php";
    require 'Slim/Slim.php';
    \Slim\Slim::registerAutoloader();

    $app = new \Slim\Slim();

    $app->get('/login/:username/:password', function ($username, $password) {
  //check the login details against the db...
    echo "I SEE THIS";
    $query = "select * from sometable";
    $db->query($query);
    echo "I DONT SEE THIS";

    });
    $app->run();

【问题讨论】:

  • 您是否启用了错误报告?您可能会因为选择太多而遇到内存错误 - 尝试将 LIMIT 1 添加到该查询的末尾以进行调试
  • 嗨,迈克,实际上在真正的代码中,我是从只有一行的表中选择的,虽然很有趣,但 2 个月前我确实花了一整天的时间才意识到我已经用完了记忆
  • $db 设置在哪里?看起来你没有实例化它,这可能是这里的问题。
  • 嗨,Phil,如果 $db 没有在 library.php 中定义的工作,我的整个网站都会崩溃
  • 1.启用错误报告 2. 修复错误。

标签: php slim


【解决方案1】:

很抱歉反应慢,有点尴尬,但只需要在该内联函数中插入一行代码:

全球 $db

我曾假设(错误地)该变量在函数中是可见的,因为它是在我们的库中定义的。

谢谢

马克

【讨论】:

    【解决方案2】:

    您可以避免将 GLOBAL 与 use 关键字一起使用 (PHP >= 5.3.0):

    $app->get('/login/:username/:password', function ($userstrong textname, $password) use ($db) {
        //check the login details against the db...
        echo "I SEE THIS";
        $query = "select * from sometable";
        $db->query($query);
        echo "I DONT SEE THIS";
    });
    

    【讨论】:

      【解决方案3】:

      您也可以将数据库作为单例注入应用程序:

      $app->container->singleton('db', function () use ($dbcfg){
          return new \myDatabaseClass($dbcfg);
      });
      

      然后您将始终可以在此处使用它:

      $app->db->query();
      

      查看更多详情:http://docs.slimframework.com/#DI-Overview

      【讨论】:

      • 感谢这是不久前的事,所以从那时起我学到了更多的 PHP,但这仍然有用!
      猜你喜欢
      • 1970-01-01
      • 2015-10-15
      • 1970-01-01
      • 1970-01-01
      • 2016-04-04
      • 2012-07-21
      • 1970-01-01
      • 2012-03-15
      • 1970-01-01
      相关资源
      最近更新 更多