gpt4 book ai didi

php - 一个我无法弄清楚的错误,当使用 stdclass 时,将值显示为 *RECURSION*

转载 作者:太空宇宙 更新时间:2023-11-03 12:03:18 24 4
gpt4 key购买 nike

所以我再次求助于 Stackoverflow。很长一段时间以来,我一直试图自己破解这个问题。谷歌和这里的旧问题对我没有帮助。

就这样吧。

我有一个 SQL 查询,它通过一个简单的查询从一个足够简单的表中获取数据。该表具有 int 和 varchar 数据。问题出在 varchar 数据上。其他一切都很好,但 varchar 数据。我创建了一个 stdClass 并将所有数据放入其中,到目前为止一切顺利。但是当我尝试在我的网站上回显它时,它告诉我以下错误:

Catchable fatal error: Object of class stdClass could not be converted to string in messages.php on line 53

messages.php 中的代码大约为 53:

foreach($messages as $message){
echo "
<tr>
<td>$message->from_name</td>
<td>$message->to_name</td>
<td>$message->sent</td>
<td>$message->sonum</td> //This here is line 53
</tr>
";
}

将 $messages 带到这里的函数本身是:

function GetMessages($id, $other_id){
global $mysqli;

$stmt = $mysqli->prepare("SELECT `from`, `from_name`, `to`, `to_name`, message, `sent`, `time` FROM `frei_chat` WHERE `from` = ? AND `to`=? OR `from` = ? AND `to` = ? ORDER BY `sent`");
$stmt->bind_param("iiii", $id, $other_id, $other_id, $id);
$stmt->bind_result($from, $from_name, $to, $to_name, $message, $sent, $taime);
$stmt->execute();
$messages = array();
while($stmt->fetch()){
$message = new stdclass;
$message->from = $from;
$message->from_name = $from_name;
$message->to = $to;
$message->to_name = $to_name;
$message->sonum = $message; //this one is the problem
$message->sent = $sent;
$message->taime = $taime;
array_push($messages, $message);
}
return $messages;
}

现在我不熟悉的是这个。当我执行 $messages 的 var_dump 时,我得到这个:

 ["sonum"]=> *RECURSION* 

应该有一个字符串而不是 RECURSION,但没有,我也不知道为什么。我尝试在不同的步骤中使用 (string) 将值转换为字符串,但没有任何效果。我试过换 table 。我试过更改 SQL 查询。我已经在 PHP 之外测试了查询并且知道它有效。我已经尝试了我能想到的一切。

即使没有人知道如何修复它,至少有人知道这个 RECURSION 是什么东西吗? Google 也没有出现太多,只是关于递归函数的内容。

最佳答案

您不小心将变量 $message 重新定义为新的 stdclass,而它已经存在:

$message = new stdclass;

*RECURSION* 发生是因为您将 stdclass 实例本身作为同一 stdclass 实例的属性。

$message->sonum = $message;  

所以 $message 有一个名为 'sonum' 的属性,它的值为 $message,
它有一个名为“sonum”的属性,其值为 $message,
它有一个名为“sonum”的属性,其值为 $message,等等,等等......

为了避免这种情况,简单的写

$msg = new stdclass;

请注意,显示 *RECURSION* 是因为 var_dump() 检测到递归。其他函数可能会导致无限循环并淹没您的内存。

关于php - 一个我无法弄清楚的错误,当使用 stdclass 时,将值显示为 *RECURSION*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27887586/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com