【发布时间】:2015-02-26 17:55:41
【问题描述】:
我开始学习php与mysql db交互。
我必须从两个不相关的表中获取数据并形成一个 stdClass 对象数组,然后将其转储为 json 数组。
到目前为止,我已经设法从 table1 中获取数据并将其中的一些列添加到 myobjects[],如下..
这里 $array 是一个主键数组,我也传递了对 myobjects 数组的引用
function load_from_table1($array , &$myobjects)
{
foreach($array as $num)
{
$obj=(object)null;
$obj->prop1 = $num;
$sql="SELECT * FROM `table1` WHERE col1=".$num;
$result = mysqli_query($con, $sql);
if($result!=null)
{
$row = mysqli_fetch_assoc($result);
//inserting data into object
$obj->prop2 = $row['col2'];
$obj->prop3 = $row['col3'];
$obj->prop4 = $row['col4'];
}
$myobjects[]=$obj;
}
}
到目前为止还不错,现在我需要为从 table2 获得的 myobjects 数组中的所有项目添加另外两个属性。
function load_from_table2(&$data)
{
for($i=0;$i<sizeof($data);$i++)
{
$obj=(object)$data[$i];
$id=$obj->prop1;
$sql="SELECT * FROM `table2` WHERE col1=".$id;
$result = mysqli_query($con, $sql);
if($result!=null)
{
$row = mysqli_fetch_assoc($result);
//$temp=$row['name'];
//echo $temp;
//$obj->name = "test1";
$obj->name = $row['name'];
//$temp=$row['description'];
//echo $temp;
//$obj->description = "test2";
$obj->description = $row['description'];
}
}
当我将 myobjects 转储为 json 时,没有输出。但是 $temp 正确地回响,当我使用直接值时,每件事似乎都可以正常工作。
有人可以帮我解决这个问题,也非常感谢解释我做错了什么。谢谢。
关于工作环境的一些细节,由于我提供的答案,
我正在使用 wampserver 2.5 64 位,现在在 firefox 浏览器上执行 php 文件。
情况很混乱,因为我可以读取值并将其打印或保存到变量,但不能将其保存为对象属性。
【问题讨论】:
-
在您的第二个函数中,当您执行
$obj=(object)$data[$i];时,您并没有将$obj设为引用。因此,当您执行$obj->name = $row['name'];时,您不 添加到$data,您只是将其添加到$obj(转换为对象的数组值的副本)。跨度> -
@Rocket Haxmat 我理解你的逻辑,但在这种情况下,以下内容也应该不起作用,但他们可以; $obj->test = "测试";或 $temp = "测试" ; $obj->test = $temp;
标签: php mysql json null collation