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

57

我目前遇到了一个PHP问题,我得到了这个错误:

无法将stdClass类对象转换为字符串 当我在我的网站中运行以下部分代码时发生错误:

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();
        }
    }

我不太清楚这个问题是什么,所以任何帮助都将不胜感激。

8个回答

53

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


3
请查看对象的属性,例如使用var_dump()函数,并选择适当的属性,例如$CI->session->userdata('user_id')->username("username" 是一个例子,我不知道在您的情况下存在哪些属性)。 - Pekka
1
var_dump($var) 做到了。 - George

9

我使用Codeigniter,但遇到了以下错误:

无法将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() 方法,以数组形式返回相同的数据。

无论如何,我强烈怀疑这不是问题的根本原因。您能给我们更多细节吗?尝试一些操作并告诉我们结果如何。我们无法操作您的代码,所以很难确定出现了什么问题。


奇怪的是,return $query->row() 来自一个预先编写的脚本,而不是他自己创建的。请查看http://www.nelsonwells.net/blog/2010/05/10/creating-a-simple-extensible-codeigniter-authentication-library/。 - stef

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); 如果你想要更多参考资料,你可以点击这里
希望能对你有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接