在我的网络服务器上,我无法在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结果。
答案 0 :(得分:0)
您将在以下代码段中明确设置数组键:
if(!$stmt->error)
{
while($stmt->fetch())
$genericArray[$row['userId']] = getCopy($row);
}
要获得您想要的JSON输出,您需要执行以下操作:
if(!$stmt->error)
{
while($stmt->fetch())
$genericArray[] = getCopy($row);
}
如果您使用第一个代码段进行重复数据删除,那么我实际上建议您在SQL中执行此操作。