带有Prepared Statement的SELECT的JSON输出

时间:2016-10-09 18:18:29

标签: php mysql json prepared-statement

我正在尝试使用预编译语句将SELECT查询的结果编码为JSON输出。我有以下代码,但我无法正常工作。任何帮助将不胜感激。

$query = "SELECT Item.ItemID, Item.ItemName FROM Items"
    $stmt = $db->prepare($query);
    $stmt->execute();
    $stmt->store_result();
    $numrows = $stmt->num_rows;
    $stmt->bind_result($ItemID, $ItemName);

 for ($i=0; $i <$numrows; $i++) {
    $stmt->fetch();

$JSONArray = ["ItemID" => $ItemID,
             "ItemName" => $ItemName
             ]

echo json_encode($JSONArray);
}

3 个答案:

答案 0 :(得分:2)

您应该始终将项目添加到容器数组中,而不是覆盖整个数组并编码&amp;只回应一次:

...

$JSONArray = []; // initialize to empty array
for ($i=0; $i <$numrows; $i++) {
    $row = $stmt->fetch();
    $ItemID = $row['ItemID'];
    $ItemName = $row['ItemName'];
    // add the new item in each iteration
    $JSONArray[] = ["ItemID" => $ItemID,
             "ItemName" => $ItemName
             ];
}
echo json_encode($JSONArray);

答案 1 :(得分:1)

您认为它不应该Items而不是Item吗?还有缺少的引号和分号。

$query = "SELECT Items.ItemID, Items.ItemName FROM Items";
$stmt = $db->prepare($query);
$stmt->execute();
$result = $stmt->fetchAll();

echo json_encode($result);

同样对于惯例,我建议你保留小写表名。 :)

答案 2 :(得分:0)

在创建PDO对象时,添加:

array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")

例如:

$db = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASSWORD, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));

对我的情况有帮助:)

https://stackoverflow.com/a/7030557/5764766上看到