【问题标题】:Passing URI variables in CodeIgniter and MongoDB在 CodeIgniter 和 MongoDB 中传递 URI 变量
【发布时间】:2012-05-04 13:09:46
【问题描述】:

我在 CodeIgniter 的控制器中有一个函数,如下所示:

public function age($var = null) 
{
    $data = $this->mongo_db
        ->where('age', $var)
        ->get('users');

    echo "<pre>";
    print_r($data);
    echo "</pre>";
}

当我导航到http://www.siteurl.com/controller/age/25 时,它应该会带回所有年龄为 25 岁的文档,但它没有返回任何数据。

如果我将查询修改为以下内容,则可以正常工作...

public function age($var = null) 
{
    $data = $this->mongo_db
        ->where('age', 25)
        ->get('users');

    echo "<pre>";
    print_r($data);
    echo "</pre>";
}

这可能是非常简单的事情,但我是 codeigniter 的新手,我就是看不出出了什么问题!

任何帮助将不胜感激。提前致谢!

【问题讨论】:

  • 很难说是哪里出了问题。从您发布的代码来看,它似乎没有任何问题。你能发布var_dump(func_get_args());的输出吗?
  • 输出为array(1) { [0]=&gt; string(2) "20" }。如果我做一个简单的 echo $var,它将打印变量......它似乎只是忽略变量的 mongo_db 查询。
  • 在这种情况下,您可能需要提及您使用的是哪个库。据我所知,用于 CI 的 MongoDB 库不止一个。你可能会更好地咨询图书馆作者。
  • 好点!我应该马上提到这一点。我正在使用Alex Bilbie Codeigniter mongo library
  • 你能发布var_dump($this-&gt;mongo_db-&gt;where);的输出吗?当然是在你调用where() 方法之后。

标签: php codeigniter mongodb mongodb-php


【解决方案1】:

我可以看到两者之间的唯一区别是$var 是一个字符串而不是一个整数。我现在无法对此进行测试,但我怀疑您需要先将变量类型转换为整数,然后再将其传递给 Alex 的库。

$data = $this->mongo_db
    ->where('age', (int) $var)
    ->get('users');

【讨论】:

    【解决方案2】:

    试试这个:

    public function age($var = false) 
    {
        if ($var) {
           $data = $this->mongo_db
               ->where('age', $var)
               ->get('users');
    
           echo "<pre>";
           print_r($data);
           echo "</pre>";
        }
    }
    

    【讨论】:

    • 感谢您的回复,不幸的是,这似乎也没有分叉。似乎 MongoDb 查询不允许将变量传递给它。
    【解决方案3】:

    您是否配置了任何路线?在配置中添加这样的内容

    $route['controller/age/(:num)'] = "controller/age/$1";
    

    【讨论】:

    • 路由工作正常。我可以使用简单的“echo $var”打印变量,它只是不使用变量的 mongo_db 查询。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-18
    • 2010-12-29
    • 2010-09-18
    • 1970-01-01
    • 2016-11-15
    相关资源
    最近更新 更多