CI中的空数据库输出

时间:2010-05-08 13:04:24

标签: php codeigniter

我正在构建一个简单的应用程序并尝试测试数据库结果输出。但不幸的是,我得到的是一个大小为0的数组。这是控制器代码摘录:

$data['query'] = $this->db->query('SELECT role_id, role_privilege FROM role');
$this->load->view('welcome_message', $data);

视图代码摘录:

<?php
        echo count($query->result_array())."<br/>";
        foreach ($query->result() as $row){
            echo $row->role_id . '<br/>';
            echo $row->role_privilege . '<br/>';
        }
        echo 'Total result '.$query->num_rows();
    ?>

接下来我得到的是:

0
Total result

从命令行运行查询会产生2行输出。有人能说出我错过的东西吗?

编辑:
这个问题也在讨论here

编辑:
也许某些平台特定的东西(我真的怀疑)?我正在运行LAMP(php 5.3.2,mysql 5.1.37,apache 2.2.15)。

编辑:
这会打印出一个“Array()”字符串。我的DB是100%填充的。我可以肯定地说,因为我做了

INSERT INTO role(role_privilege) VALUES ('ROLE_MODERATOR');
INSERT INTO role(role_privilege) VALUES ('ROLE_USER');

然后通过命令行检查它。

编辑:
我把它放到我的控制器后:

echo $this->db->last_query(); exit;

我得到下一个输出:

SELECT role_id, role_privilege FROM role

这就是我需要的确切的SQL查询。不幸的是,结果是大小的数组。

2 个答案:

答案 0 :(得分:2)

嗯,这里的问题基本上不是CI相关问题,但奇怪的是CI无法跟踪此错误。这是发生了什么:

安装php时我没有指定--with-mysql-socket参数,看起来像php试图使用/tmp/mysql.sock(默认值),这显然未在my.cnf中指定。所以CI试图绑定到一个不存在的套接字。在php.ini中更改mysql params解决了这个问题。

答案 1 :(得分:0)

嗯,听起来您的数据库访问设置正确,因为您没有收到错误。我认为这也意味着表存在。我知道你说你从命令行运行了那个查询,但是你确定你正在访问相同的数据集/服务器/表吗?没有奇怪的版本或任何东西?听起来好像角色表中没有记录。对不起,因为你的代码看起来正确,只需抓住吸管。

如何做

SELECT * FROM role

然后做一个

print_r($query->result_array()); 

在你看来?这应该至少显示列名称,以便您知道您正在访问正确的数据。

尝试并报告任何细节,希望它会提供一些提示。