Объект класса stdClass не может быть преобразован в строку - PullRequest
26 голосов
/ 31 августа 2010

У меня сейчас проблема с 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();
        }
    }

На самом деле я не знаю, в чем проблема, поэтому любая помощь будет отличной.

Ответы [ 6 ]

35 голосов
/ 31 августа 2010

Скорее всего, функция userdata() возвращает объект, а не строку.Просмотрите документацию (или var_dump возвращаемого значения), чтобы узнать, какое значение вам нужно использовать.

5 голосов
/ 08 июня 2012

Я использую codeignator, и я получил ошибку:

Объект класса stdClass не может быть преобразован в строку.

за этот пост я получаю свой результат

Я использую в разделе моей модели

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

и из этого поста я использую

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

и я решил свою проблему

3 голосов
/ 19 марта 2018

В общем, чтобы избавиться от

Объект класса 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, row *

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

Получит результат как 2

2 голосов
/ 25 января 2013

попробуйте

return $query->result_array();
1 голос
/ 31 августа 2010

Вы упомянули в другом комментарии, что не ожидаете, что ваша функция get_userdata () вернет объект stdClass? Если это так, вам следует помнить следующую строку в этой функции:

return $query->row();

Здесь объект базы данных CodeIgniter «$ query» имеет вызываемый метод row (), который возвращает stdClass. Кроме того, вы можете запустить row_array (), который возвращает те же данные в виде массива.

В любом случае, я сильно подозреваю, что это не является основной причиной проблемы. Можете ли вы дать нам более подробную информацию, возможно? Поиграйте с некоторыми вещами и дайте нам знать, как это происходит. Мы не можем поиграть с вашим кодом, поэтому трудно сказать, что именно происходит.

0 голосов
/ 09 июня 2019

То, что я искал, это способ получения данных

поэтому я использовал это $data = $this->db->get('table_name')->result_array();

и затем извлекал мои данные так же, как вы работаете с объектами массива.

$data[0]['field_name']

Не нужно беспокоиться о приведении типов или о чем-то другом, просто прямо в точку.

Так что у меня сработало.

...