【问题标题】:PHP probletm with appending new property into object?将新属性附加到对象中的PHP问题?
【发布时间】: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-&gt;name = $row['name']; 时,您 添加到$data,您只是将其添加到$obj(转换为对象的数组值的副本)。跨度>
  • @Rocket Haxmat 我理解你的逻辑,但在这种情况下,以下内容也应该不起作用,但他们可以; $obj->test = "测试";或 $temp = "测试" ; $obj->test = $temp;

标签: php mysql json null collation


【解决方案1】:

我让它工作了,但问题不在于代码。我正在阅读的表中的列似乎已将排序规则设置为“ utf8_general_ci ”,不确定这意味着什么。但是当我删除该设置时,一切都按预期工作。但我觉得整理并不是真正的根本原因。所以我会保持这个问题开放,希望有人能提供解释。

看来我在寻找错误的问题。阅读排序规则后,我发现某些字符集不受完全支持,因此我尝试回显对象数组的内容而不是 json_encode 并发现它已打印。

为此搜索,我在 stackoverflow 上找到了另一个 qst here,它解决了我的问题。 只需添加这一行 :: mysqli_set_charset($con,'utf8');在我开始对该表进行任何查询并且 json_encode 开始工作之前。

【讨论】:

  • 请查看我上面的问题以了解有关我的数据库的详细信息。
  • 我选择这个作为答案,这样任何不幸遇到同样问题的人都可以找到它并节省大量时间。
猜你喜欢
  • 1970-01-01
  • 2011-10-03
  • 2021-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
  • 2019-06-21
相关资源
最近更新 更多