json_encode没有get_result()

时间:2016-05-16 12:54:41

标签: php json

在我的网络服务器上,我无法在PHP脚本中使用get_result()。我收到错误调用未定义的方法mysqli_stmt :: get_result

bind_result()fetch()有效,但我必须每次根据SELECT结果声明不同的列,但我希望它是通用的。

我最接近的是以下代码:

               function bind_result_array($stmt)
               {
                    $meta = $stmt->result_metadata();
                    $result = array();
                    while ($field = $meta->fetch_field())
                    {
                        $result[$field->name] = NULL;
                        $params[] = &$result[$field->name];
                    }

                    call_user_func_array(array($stmt, 'bind_result'), $params);
                    return $result;
                }

                function getCopy($row)
                {
                    return array_map(create_function('$a', 'return $a;'), $row);
                }

                $stmt = $mysqli->prepare("SELECT 1 as userId, 2 as message UNION SELECT 3 as userId, 4 as message");
                $stmt->execute();

                $row = bind_result_array($stmt);
                if(!$stmt->error)
                {
                    while($stmt->fetch())
                    $genericArray[$row['userId']] = getCopy($row);
                }

                echo "{ \"userId\": ";
                echo json_encode($genericArray);
                echo "}"; 

                $stmt->close();
                $mysqli->close();

这个输出是:

  

{       " userId":{           " 1":{               " userId":1,               "消息":2           },           " 3":{               " userId":3,               "消息":4           }       }   }

虽然它应该是:

  

{       " userId":[{               " userId":1,               "消息":2           },           {               " userId":1,               "消息":2           }]       }

如何从json响应中获取此额外级别并使其成为json格式的数组? 或者有没有其他方法可以在不改变代码的情况下以json格式获取SELECT结果。

1 个答案:

答案 0 :(得分:0)

您将在以下代码段中明确设置数组键:

if(!$stmt->error)
{
    while($stmt->fetch())
    $genericArray[$row['userId']] = getCopy($row);
}

要获得您想要的JSON输出,您需要执行以下操作:

if(!$stmt->error)
{
    while($stmt->fetch())
    $genericArray[] = getCopy($row);
}

如果您使用第一个代码段进行重复数据删除,那么我实际上建议您在SQL中执行此操作。