带有准备好的语句的 SELECT 的 JSON 输出
Posted
技术标签:
【中文标题】带有准备好的语句的 SELECT 的 JSON 输出【英文标题】:JSON output for SELECT with Prepared Statement 【发布时间】:2017-02-18 04:57:58 【问题描述】:我正在尝试使用准备好的语句将来自 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);
【问题讨论】:
代码中缺少引号($query 没有第二个引号),如果这不是问题,请写下显示给您的错误是什么 请添加更多信息,它是怎么不工作的,你有什么错误吗? 第 1 行末尾也缺少分号。 【参考方案1】:创建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://***.com/a/7030557/5764766所见
【讨论】:
【参考方案2】:你不认为应该是 Items
而不是 Item
吗?还缺少引号和分号。
$query = "SELECT Items.ItemID, Items.ItemName FROM Items";
$stmt = $db->prepare($query);
$stmt->execute();
$result = $stmt->fetchAll();
echo json_encode($result);
另外,为了约定,我建议您保留小写的表名。 :)
【讨论】:
【参考方案3】:您应该始终将项目添加到容器数组中,而不是覆盖整个数组并且只编码和回显一次:
...
$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);
【讨论】:
以上是关于带有准备好的语句的 SELECT 的 JSON 输出的主要内容,如果未能解决你的问题,请参考以下文章