获取从 PHP ADO 连接返回到 MS-Access DB 的 JSON
Posted
技术标签:
【中文标题】获取从 PHP ADO 连接返回到 MS-Access DB 的 JSON【英文标题】:Get JSON returned from PHP ADO connection to MS-Access DB 【发布时间】:2012-11-25 23:07:49 【问题描述】:我正在尝试获取从 MS-Access 数据库查询返回的 JSON 字符串。我得到了记录集($rs),但试图循环返回 JSON,却不知道记录集中的所有字段。以下返回我想要的,但在[["aaa":"bbb","ccc":"ddd"]]
不是我正在寻找的[ ... ]
。
$num_columns = $rs->Fields->Count ();
//echo $num_columns . "<br>";
$arrColumns = array();
for ($i=0; $i < $num_columns; $i++)
$arrColumns[] = $rs->Fields($i);
$arrResult = array();
while (!$rs->EOF)
$arrRow = array();
for ($i=0; $i < $num_columns; $i++)
$arrRow[] = $arrColumns[$i]->value;
$arrResult[] = $arrRow;
$rs->MoveNext();
//var_dump($arrResult);
echo json_encode($arrResult);
//print_r($arrResult);
[更新]:
完成了动态部分,但结果仍然存在问题。因为我是json_encode($Array)
,所以我无法使用我的 JQuery 获得我想要的结果。
$num_columns = $rs->Fields->Count ();
$arrColumns = array();
for ($i=0; $i < $num_columns; $i++)
$arrColumns[] = $rs->Fields($i);
$newArr[] = $rs->Fields($i)->name;
$arrResult = array();
while (!$rs->EOF)
$arrRow = array();
for ($i=0; $i < $num_columns; $i++)
$arrRow[$newArr[$i]] = $arrColumns[$i]->value;
$arrResult[] = $arrRow;
$rs->MoveNext();
echo $_GET['callback'] . '(' . json_encode($arrResult) . ')';
我的 JSON 返回如下:["First":"John","Last":"Doe"]
包裹在对象中的数组。我需要返回一个对象或一个数组,以便我可以在客户端处理,例如:"First":"John","Last":"Doe"
<script>
$.getJSON('http://remote.domain.com/json.php?callback=?',function(res)
alert('Results: '+res.Last);
);
</script>
我认为这可能是我 json_encode($Array);
的方式而不使用课程?
【问题讨论】:
【参考方案1】:如果要以[...]
格式返回,则需要将$arrRow
值从数组更改为类。为简单起见,您可以利用stdClass()
试试这样的:
while (!$rs->EOF)
$arrRow = array();
$class = new stdClass();
$class->field1 = $arrColumns[1]->value;
$class->field2 = $arrColumns[2]->value;
$arrRow[] = $arrColumns[$i]->value;
$arrResult[] = $arrRow;
$rs->MoveNext();
echo json_encode($arrResult);
【讨论】:
非常感谢,这将解决我忽略的 JSON 对象问题,但我仍在尝试动态生成结果,而无需手动创建每个列。 我的代码的第一部分似乎将列名作为对象返回。我无法将其转换为字符串或将其转换为字符串数组?似乎 $arrColumns[] = $rs->Fields($i);将一个对象放入数组中?【参考方案2】:[["aaa":"bbb","ccc":"ddd"]]
中没有它,因为它不是有效的 json
数组格式...有关规范,请参阅 JSON.ORG
数组应该表示为
While 对象
你可以拥有的壁橱有数组是
[["aaa","bbb"]["ccc","ddd"]]
【讨论】:
以上是关于获取从 PHP ADO 连接返回到 MS-Access DB 的 JSON的主要内容,如果未能解决你的问题,请参考以下文章
使用 ADO.NET、Generic 从不同的表中获取 SQL 数据
如何从 MSSQL 连接查询中的字段中获取表名? (mysql_field_table 等效)