douzhun4124 2017-01-23 22:35
浏览 56
已采纳

从bind_result返回json对象

I have simple PHP script that returns me user object, and it looks like this

<?php
require_once '../dbConnect.php';
session_start();

if (empty($_SESSION["id"])) {
    http_response_code(401);
    return;
}

    $stmt = $mysqli->prepare("SELECT id, firstName, lastName, email FROM users WHERE id = ?");
    $stmt->bind_param("i", $_SESSION["id"]);
    $stmt->execute();
    $stmt->bind_result($id, $firstName, $lastName, $email);
    $stmt->fetch();

    $member['id'] = $id;
    $member['firstName'] = $firstName;
    $member['lastName'] = $lastName;
    $member['email'] = $email;

    echo json_encode($member);

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

?>

My question: Is there a better way to return json object than this, where i need to create object with every property, is there something more "automatic" for this kind of stuff ?

$member['id'] = $id;
$member['firstName'] = $firstName;
$member['lastName'] = $lastName;
$member['email'] = $email;
echo json_encode($member);

I'm asking this because i had this same script written like this, but i change it to prepared statement because of performance and security

<?php
require_once '../dbConnect.php';
session_start();

if (empty($_SESSION["id"])) {
    http_response_code(401);
    return;
}

$memberId = $_SESSION["id"];
$query="SELECT id, firstName, lastName, email FROM users WHERE id='$memberId'";

$result = $mysqli->query($query) or die($mysqli->error.__LINE__);
$member = mysqli_fetch_assoc($result);

echo json_encode($member);

$mysqli->close();

?> 

and i used simply

$member = mysqli_fetch_assoc($result);

echo json_encode($member);
  • 写回答

1条回答 默认 最新

  • dsafq2131321 2017-01-23 22:40
    关注

    If you have the MYSQLND driver, you can use fetch_assoc() with a prepared statement.

    $stmt = $mysqli->prepare("SELECT id, firstName, lastName, email FROM users WHERE id = ?");
    $stmt->bind_param("i", $_SESSION["id"]);
    $stmt->execute();
    $result = $stmt->get_result();
    $member = $result->fetch_assoc();
    

    If not, you can refer to the array elements directly in bind_result(), instead of using separate variables.

    $member = array();
    $stmt->bind_result($member['id'], $member['firstName'], $member['lastName'], $member['email']);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line