将新属性附加到对象中的PHP问题?
我开始学习php与mysql db的交互 我必须从两个不相关的表中获取数据,形成一个stdClass对象数组,然后将其作为json数组转储 到目前为止,我已设法从表1中获取数据,并将其中的一些列添加到 MyObject[],如下所示 这里$array是一个主键数组,我还传递了对myobjects数组的引用将新属性附加到对象中的PHP问题?,php,mysql,json,null,collation,Php,Mysql,Json,Null,Collation,我开始学习php与mysql db的交互 我必须从两个不相关的表中获取数据,形成一个stdClass对象数组,然后将其作为json数组转储 到目前为止,我已设法从表1中获取数据,并将其中的一些列添加到 MyObject[],如下所示 这里$array是一个主键数组,我还传递了对myobjects数组的引用 function load_from_table1($array , &$myobjects) { foreach($array as $num)
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;
}
}
到目前为止还不错,我需要向从表2中获得的MyObject数组中的所有项添加两个属性
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'];
}
}
从表2中加载函数(&$data)
{
对于($i=0;$iprop1;
$sql=“从`table2`中选择*,其中col1=”.$id;
$result=mysqli\u查询($con,$sql);
如果($result!=null)
{
$row=mysqli\u fetch\u 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正确地回显,而且当我将值直接导入时,一切似乎都正常工作
有人能帮我吗?如果能解释一下我做错了什么,我将不胜感激。谢谢
关于工作环境的一些细节,因为我提供了答案,我使用的是WAMPServer2.564位,目前正在firefox浏览器上执行php文件
这种情况相当混乱,因为我可以读取值并将其打印或保存到变量,但不能将其另存为对象属性。我让它工作,但问题不在于代码。我正在读取的表中的列似乎将排序规则设置为“utf8\u general\u ci”,不确定这意味着什么。但是当我删除该设置时g,这一切都像预期的那样起作用。但我觉得整理并不是真正的根本原因。所以我将继续讨论这个问题,希望有人能提供解释 似乎我在寻找错误的问题。阅读排序规则时,我发现一些字符集不完全受支持,因此我尝试回显对象数组的内容,而不是json_encode,并发现它已打印 为此,我在stackoverflow上找到了另一个qst,解决了我的问题。
在我开始对该表进行任何查询和json编码开始工作之前,简单地添加了这一行::mysqli_set_charset($con,'utf8')。在您的第二个函数中,当您执行
$obj=(object)$data[$i];
时,您并没有将$obj
变成一个引用。所以当您执行$obj->name=$row['name'];
,您并没有将其添加到$data
,您只是将其添加到$obj
(已转换为对象的数组值的副本)。@Rocket Haxmat我理解您的逻辑,但在这种情况下,以下操作也不应该起作用,但它们确实起作用;$obj->test=“test”或$temp=“test”$obj->test=$temp;请查看我上面的问题,了解我数据库中的详细信息。我选择这个作为答案,这样任何一个不幸遇到同样问题的人都可以找到它,并为他们节省大量时间。