用PHP从MySql数据生成这个json数组的更好方法

时间:2013-05-25 11:11:57

标签: php mysql

为了您的方便而使用Sql小提琴here

我从MySql表中获取数据并将其转换为json数组。一切运作良好,我有我想要的输出方式,但有没有一种方法可以改进(缩短/改进)?数组键必须保持不变,并且需要匹配dbs输出。

我的代码

    $stmt = $conn->prepare("select name as name, age as age, address as address, pincode as pincode from json where name = 'peter'");
    $stmt->execute();

    while( $row = $stmt->fetch() ) {
        #echo $row['name']." ".$row['age']." ".$row['address']." ".$row['pincode'].'<br>';
        $myarray['name'] = $row['name'];
        $myarray['age'] = $row['age'];
        $myarray['address'] = $row['address'];
        $myarray['pincode'] = $row['pincode'];
    }

    echo json_encode($myarray);

我的输出(上面的代码成功输出了这个)

{"name":"Peter","age":"30","address":"1 Elm Street","pincode":"91550"}

3 个答案:

答案 0 :(得分:2)

取出所有冗余,使用适当的预处理语句(假设PDO)并添加错误处理(至少是存根),最终得到:

$stmt = $conn->prepare('SELECT name, age, address, pincode FROM json WHERE name = ?');
$stmt->execute(array('peter'));

if ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    echo json_encode($row);
} else {
    echo json_encode(array('status' => 'error'));
}

如果您期望多行:

echo json_encode($stmt->fetchAll(PDO::FETCH_ASSOC));

答案 1 :(得分:2)

您只需选择所需的字段,因此您可以执行

echo json_encode($stmt->fetch(PDO::FETCH_ASSOC));
编辑:你现在提到名字是唯一的,所以上面就是你所需要的。

答案 2 :(得分:0)

$row = $stmt->fetch(PDO::FETCH_ASSOC);
echo json_encode($row);

如果结果中只有一行,则不需要while循环。