簡體   English   中英

帶有准備語句的 SELECT 的 JSON 輸出

[英]JSON output for SELECT with 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);
}

您應該始終將項目添加到容器數組中,而不是覆蓋整個數組並且只編碼和回顯一次:

...

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

你不認為它應該是Items而不是Item嗎? 還有缺少引號和分號。

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

echo json_encode($result);

同樣為了約定,我建議您保留小寫的表名。 :)

創建 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 上看到的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM