我现在的 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();
}
}
我现在真的不知道这个问题是什么,所以任何帮助都会很棒。
最有可能的是,
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、rows
echo $query2->row['option_id'];
结果将为 2
就像其他人所说,echo 命令无法自行打印出对象。 因此,您可以考虑使用 print_r 来显示对象的内容。
所以,就你而言:
print_r($query);
您在另一条评论中提到您不希望 get_userdata() 函数返回 stdClass 对象?如果是这种情况,您应该注意该函数中的这一行:
return $query->row();
这里,CodeIgniter 数据库对象“$query”调用了它的 row() 方法,该方法返回一个 stdClass。或者,您可以运行 row_array() ,它以数组形式返回相同的数据。
无论如何,我强烈怀疑这不是问题的根本原因。您能给我们提供更多细节吗?尝试一些事情并让我们知道进展如何。我们无法使用您的代码,因此很难确切地说出发生了什么。
试试这个
return $query->result_array();
我正在寻找一种获取数据的方法
所以我用了这个
$data = $this->db->get('table_name')->result_array();
然后获取我的数据,就像操作数组对象一样。
$data[0]['field_name']
无需担心类型转换或任何直接开门见山的事情。
所以它对我有用。
如果您遇到此问题,则意味着您的数组处于无法将其转换为字符串类型的类型。您的
object
不是 string
类型。
但是,你可以这样转换:
$data= json_decode( json_encode($data), true);
如果您想要更多参考,可以去这里。
希望有帮助。
在某些情况下,错误消息具有误导性。
就我而言,我向 where 子句提供了错误类型的数据。
$this->db->where('channel_reports.channel_id', $channelId)
就我而言,我认为
$channelId
是一个整数,但经过快速调试,我意识到 $channelId
是一个数组。我解决了问题,并确保提供具有正确输入的 where
方法。
因此,在这些情况下,CI 应该显示正确的错误消息。
这个答案有什么帮助?
很多像我这样的人可能会面临这个错误,只是因为他们提供了错误类型的数据的
where
方法,并且由于这些情况下的错误消息具有误导性,他们可能会花费大量时间在不同的事情上来调试他们的代码。因此,首先,请确保为 where 子句提供正确类型的数据。