一个我无法弄清楚的错误,当使用 stdclass 时,将值显示为 *RECURSION*
An error I can not figure out, when using stdclass, shows value as *RECURSION*
所以我再次求助于 Whosebug。很长一段时间以来,我一直试图自己破解这个问题。 Google 这里的旧问题对我没有帮助。
所以开始了。
我有一个 SQL 查询,它通过一个简单的查询从足够简单的 table 中获取数据。 table 有 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;
}
现在我不熟悉的是这个。当我执行 var_dump 的 $messages 时,我得到这个:
["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()
检测到递归。其他功能可能会导致无限循环并淹没您的内存。
所以我再次求助于 Whosebug。很长一段时间以来,我一直试图自己破解这个问题。 Google 这里的旧问题对我没有帮助。
所以开始了。
我有一个 SQL 查询,它通过一个简单的查询从足够简单的 table 中获取数据。 table 有 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;
}
现在我不熟悉的是这个。当我执行 var_dump 的 $messages 时,我得到这个:
["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()
检测到递归。其他功能可能会导致无限循环并淹没您的内存。