2017-01-23 3 views
0

У меня есть простой PHP скрипт, который возвращает мне объект пользователя, и это выглядит как этотВозвращение JSON объект из bind_result

<?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();; 

?> 

Мой вопрос: Есть ли лучший способ вернуть JSON объект, чем это, где я должен создать объект с каждым свойством, есть ли что-то более «автоматическое» для такого рода вещей?

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

Я спрашиваю это потому, что я имел тот же самый сценарий, написанный, как это, но я изменить его на подготовленное заявление из-за производительности и безопасности

<?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(); 

?> 

и я использовал просто

$member = mysqli_fetch_assoc($result); 

echo json_encode($member); 

ответ

1

Если у вас есть драйвер MYSQLND, вы можете использовать fetch_assoc() с подготовленным оператором.

$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(); 

Если нет, то вы можете обратиться к элементам массива непосредственно в bind_result(), вместо того, чтобы использовать отдельные переменные.

$member = array(); 
$stmt->bind_result($member['id'], $member['firstName'], $member['lastName'], $member['email']); 
+0

Я не имею драйвер MYSQLND, также я отредактировал мой вопрос вы можете увидеть его сейчас –

+0

я вижу, это не меняет моего ответа. Вы не можете использовать 'fetch_assoc()' с подготовленным оператором, если у вас нет драйвера MYSQLND. – Barmar

+0

Так что позвольте мне проверить с вами, если я устанавливаю mysqlnd, я могу просто использовать его после $ stmt-fetch(); $ member = $ stmt-> fetch_assoc() ;, также вы можете сказать мне, что мой новый скрипт лучше моего старого, где я не использовал подготовленный оператор –