【问题标题】:Json response only value but key + value neededJson 响应只有值,但需要键 + 值
【发布时间】:2014-12-03 19:32:10
【问题描述】:

以下 PHP 代码仅翻译值,但我还需要每个值的键:

应该如何(期望的输出):

[{"ID":"1","styleNo":"1","styleName":"Casual","placeholder":"Left Initial","type":"text","maxlength":"1","size":"small","position":"1"},{"ID":"2","styleNo":"1","styleName":"Casual","placeholder":"Right Initial","type":"text","maxlength":"1","size":"small","position":"2"},{"ID":"3","styleNo":"1","styleName":"Casual","placeholder":"Center Initial","type":"text","maxlength":"1","size":"small","position":"3"}]

实际情况如何(我不知道不同的括号是否重要?):

[["1","1","Casual","Left Initial","text","1","small","1"],["2","1","Casual","Right Initial","text","1","small","2"],["3","1","Casual","Center Initial","text","1","small","3"]]

<?php
$style = $_GET['style'];
define('HOST', 'localhost');
define('USER', 'root');
define('PASS', '');
define('DBNAME', 'inscribe');

$db = new mysqli(HOST, USER, PASS, DBNAME);

if (mysqli_connect_errno()) {
    printf("Connect failed: %s<br/>", mysqli_connect_error());
}

$sql = "SELECT * FROM inputs WHERE styleNo = '".$style."'";
$result_db = $db->query($sql);
$all_result = $result_db->fetch_all();
echo json_encode($all_result);
$db->close();
?>

【问题讨论】:

  • 那是什么问题? $all_result 编码后是什么样子的?
  • 它看起来像上面的“实际情况”部分,只打印值而不打印 ID、styleNo、styleName 等键...

标签: php mysql arrays json


【解决方案1】:

尝试在fetch_all() 中将mysql fetch 标志显式设置为MYSQLI_ASSOC,因为它的默认值为MYSQLI_NUM,它返回数字索引而不是关联索引。

例子:

$all_result = $result_db->fetch_all(MYSQLI_ASSOC);
echo json_encode($all_result);

旁注:转义输入或使用准备好的语句:

$style = $db->real_escape_string($_GET['style']);
$sql = "SELECT * FROM inputs WHERE styleNo = '$style' ";
$result_db = $db->query($sql);
$all_result = $result_db->fetch_all(MYSQL_ASSOC);
echo json_encode($all_result);

或者

$sql = "SELECT * FROM inputs WHERE styleNo = ?";
$select = $db->prepare($sql);
$select->bind_param('s', $_GET['input']);
$select->execute();
$result = $select->get_result();
$all_result = $result->fetch_all(MYSQL_ASSOC);
echo json_encode($all_result);

【讨论】:

  • @Marius 我很高兴这有帮助
【解决方案2】:

它正在做它应该做的事情。 sql查询返回结果行,这就是它给你的。快速解决方法是

$tmp = array();
$keys = array("ID", "styleNo", "placeholder", "type", "maxlength", "size", "position");
foreach($all_result as $row){
     $tmp[] = array_combine($keys, $row);
}

echo json_encode($tmp);

如果您的选择发生变化,这可能会中断。

【讨论】:

    猜你喜欢
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 2020-09-10
    • 2020-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多