【问题标题】:database query return an array composed of stdClass数据库查询返回一个由 stdClass 组成的数组
【发布时间】:2016-03-22 16:53:56
【问题描述】:

我在从记录中获取价值时遇到了麻烦。 这就是我想要做的: 1.从db获取记录 2.将查询结果转换为数组 3. 显示数组[0],但报错 undefined offset:1

var_dump() : array(1) { [0]=> object(stdClass)#23 (1) { ["nama"]=> string(9) "Test Name" } }

自己尝试了查询,它返回了一条记录: |用户名|姓名| |Testuser|Testnama|

那么我怎样才能得到'Testuser'呢?

模型/verify_login_model

function getinfo($username) {
    $this->db->select('nama', 'username');
    $this->db->from('tb_userInfo');
    $this->db->where('username', $username);
    $this->db->limit(1);

    $result = $this->db->get();
    if($result->num_rows()==1) {
        return $result->result();

    } else {
        return false;
    }
}

控制器/验证登录

public function index(){
    $this->load->model('verify_login_model');
    $username = $this->input->post('username');
    $password = $this->input->post('password');
    $result = $this->verify_login_model->verify($username, $password);
    if($result == $username) {

        $row = $this->verify_login_model->getinfo($username);
        echo var_dump($row);
        $sessiondata = array('name'=>$row[0], 'username'=>$row[1]);
        $this->session->set_userdata($sessiondata);
        $name = $sessiondata['name'];
        $this->load->view('home_view', $name);

    } else {
        redirect('login');
    }
}

view/home_view

<html>
<head></head>
<body>
    welcome, <?php echo $name?>
</body>
</html>

【问题讨论】:

  • 您可以在视图内部echo $this-&gt;session-&gt;userdata['name'] 和您可以尝试的模型和return $result-&gt;result_array(); 然后在控制器内部执行$row[0]['nameofyourcolumn'];
  • @MarkoKunić 你能解释一下 var_dump() 的结果吗?为什么我得到那个 stdClass#23
  • 你试过 return $result->result_array();而不是 return $result->result();在模型中
  • @wolfgang1983 结果是:array(1) { [0]=> array(1) { ["nama"]=> string(9) "Test Name" } }

标签: arrays database codeigniter session stdclass


【解决方案1】:

您的模型在您使用时返回一个对象数组

return $result->result();

为了将结果作为普通数组使用:

return $result->result_array();

阅读更多关于生成查询结果here

【讨论】:

  • 是的,谢谢,现在我卡在这个 var_dump 上:array(1) { [0]=> array(1) { ["nama"]=> string(9) "Test Name" } } 在我改变了你的建议之后。那么为什么 $row 值是数组初始值呢?
  • 在 For result_array() 下检查我的答案中的用法
  • 谢谢你的result_array(),我认为你的回答是关于stdClass的标题最准确的。现在问题是关于我为行 [1] 得到的空值。可以查点原因吗?或猜测需要发布另一个问题
  • 我认为最好提出一个全新的问题
【解决方案2】:

根据CI查询结果显示

https://ellislab.com/codeigniter/user-guide/database/results.html

->result() 该函数将查询结果作为对象数组返回,

stdClass 怎么样 - 在这里查看 https://stackoverflow.com/a/931419/2513428

要获得结果,您必须执行以下操作

$sessiondata = array('name'=>$row[0]->nama, 'username'=>$row[0]->yourfield);

为了形象化这有点像array(1) { [0]=&gt; object(stdClass)#23 (1) { Your query result } } 并获得指向对象$var[0]-&gt;Object 的数据。但是您也可以更改为 result_array() 并将其视为数组而不是现在的对象。

对于result_array()

 $sessiondata = array('name'=>$row[0]['nama'], 'username'=>$row[0]['yourfield']);

希望这会对你有所帮助。

【讨论】:

  • 谢谢兄弟关于array[0] = object的解释,尝试了你建议的代码,但我认为它不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-04
  • 2014-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多