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

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

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

8 ответов

Решение

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

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

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

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

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

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

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

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

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

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

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

Как говорили другие, команда echo не может распечатать объект самостоятельно. По этой причине вы можете рассмотреть возможность использования print_r для отображения содержимого вашего объекта.

Итак, в вашем случае:

       print_r($query);

Попробуй это

return $query->result_array();

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

return $query->row();

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

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

Я искал способ получить данные

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

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

$data[0]['field_name']

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

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

Если у вас возникла эта проблема, это означает, что ваш массив имеет тип, в котором вы можете преобразовать его в строковый тип. Ваш объект не имеет строкового типа . Таким образом, вы можете преобразовать его этим. $data= json_decode(json_encode($data), true);

Если вы хотите больше ссылок, вы можете пойти сюда . Надеюсь, поможет.

Другие вопросы по тегам