我正在尝试使用预编译语句将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);
}
答案 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"));
对我的情况有帮助:)