类 stdClass 的对象无法转换为字符串

问题描述 投票:0回答:9

我现在的 PHP 遇到问题,我收到此错误,

Object of class stdClass could not be converted to string
当我在我的网站中运行这部分代码时发生错误,

function myaccount() {
    $data['user_data'] = $this->auth->get_userdata($this->uri->segment(3));
    //var_dump($data['user_data']);
    $this->load->model('users_model');
    $data['user_info'] = $this->users_model->get_user_and_roadmaps_by_id($this->uri->segment(3));
    $this->template->build('users/my_account', $data);
}

发生错误的行是这一行,

$data['user_data'] = $this->auth->get_userdata($this->uri->segment(3));

这一行正在调用这个函数,

   function get_userdata() {

        $CI =& get_instance();

        if(!$this->logged_in()) {
            return false;
        } else {
            $query = $CI->db->get_where('users', array('user_id' => $CI->session->userdata('user_id')));
            return $query->row();
        }
    }

我现在真的不知道这个问题是什么,所以任何帮助都会很棒。

php codeigniter object stdclass
9个回答
53
投票

最有可能的是,

userdata()
函数返回一个对象,而不是字符串。查看文档(或 var_dump 返回值)以找出您需要使用哪个值。


9
投票

我使用 codeignator 并收到错误:

stdClass 类的对象无法转换为字符串。

对于这篇文章我得到了结果

我在我的模型部分使用

$query = $this->db->get('user', 10);
        return $query->result();

从这篇文章中我使用

$query = $this->db->get('user', 10);
        return $query->row();

我解决了我的问题


7
投票

一般要摆脱

stdClass 类的对象无法转换为字符串。

尝试使用

echo '<pre>'; print_r($sql_query);
进行 SQL 查询,得到的结果为

stdClass Object
(
    [num_rows] => 1
    [row] => Array
        (
            [option_id] => 2
            [type] => select
            [sort_order] => 0
        )

    [rows] => Array
        (
            [0] => Array
                (
                    [option_id] => 2
                    [type] => select
                    [sort_order] => 0
                )

        )

)

为了访问,有不同的方法,例如:num_rows、row、rows

echo $query2->row['option_id'];

结果将为 2


4
投票

就像其他人所说,echo 命令无法自行打印出对象。 因此,您可以考虑使用 print_r 来显示对象的内容。

所以,就你而言:

 print_r($query);

2
投票

您在另一条评论中提到您不希望 get_userdata() 函数返回 stdClass 对象?如果是这种情况,您应该注意该函数中的这一行:

return $query->row();

这里,CodeIgniter 数据库对象“$query”调用了它的 row() 方法,该方法返回一个 stdClass。或者,您可以运行 row_array() ,它以数组形式返回相同的数据。

无论如何,我强烈怀疑这不是问题的根本原因。您能给我们提供更多细节吗?尝试一些事情并让我们知道进展如何。我们无法使用您的代码,因此很难确切地说出发生了什么。


1
投票

试试这个

return $query->result_array();

1
投票

我正在寻找一种获取数据的方法

所以我用了这个

$data = $this->db->get('table_name')->result_array();

然后获取我的数据,就像操作数组对象一样。

$data[0]['field_name']

无需担心类型转换或任何直接开门见山的事情。

所以它对我有用。


1
投票

如果您遇到此问题,则意味着您的数组处于无法将其转换为字符串类型的类型。您的

object
不是
string
类型。

但是,你可以这样转换:

$data= json_decode( json_encode($data), true);

如果您想要更多参考,可以去这里

希望有帮助。


0
投票

在某些情况下,错误消息具有误导性。

就我而言,我向 where 子句提供了错误类型的数据。

$this->db->where('channel_reports.channel_id', $channelId)

就我而言,我认为

$channelId
是一个整数,但经过快速调试,我意识到
$channelId
是一个数组。我解决了问题,并确保提供具有正确输入的
where
方法。

因此,在这些情况下,CI 应该显示正确的错误消息。

这个答案有什么帮助?
很多像我这样的人可能会面临这个错误,只是因为他们提供了错误类型的数据的

where
方法,并且由于这些情况下的错误消息具有误导性,他们可能会花费大量时间在不同的事情上来调试他们的代码。因此,首先,请确保为 where 子句提供正确类型的数据。

© www.soinside.com 2019 - 2024. All rights reserved.