假设我有这个问题:
$stmt = $con->_con->prepare("Select id from table", array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));
while ($selected_row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$rows[] = array_map('utf8_encode', $selected_row);
}
从此我得到:
[{
"id": "000060000000000071964708\/17\/201309:55:00"
}]
我想添加另一个键值对,如:
[{
"id": "000060000000000071964708\/17\/201309:55:00",
"column": "code1"
}]
从结果中我想添加一个值为column
的键code1
,这个值是动态的,我想通过select查询之外的条件设置它。
我尝试的是在while循环中手动添加列,如:
while ($selected_row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$rows[] = array_map('utf8_encode', $selected_row);
array_push($rows, array('column' => $column));
}
哪里$column = 'code1'
取决于条件。但它给了我一个结果:
[{
"id": "000060000000000071964708\/17\/201309:55:00"
}, {
"column": "code1"
}]
这不是一个理想的输出。也尝试执行Select id,column AS 'code1'...
我手动尝试将密钥对值作为选择查询的一部分返回,但它失败并在AS .....
中给出错误。 / p>
如何从示例中获得所需的输出? 我愿意接受比我想到的想法更好的其他解决方案
答案 0 :(得分:2)
您在SQL中尝试这样做几乎是正确的,但正确的形式是
SELECT
id,
'code1' AS `column`
FROM...
将静态值作为带引号的字符串文字返回,并带有列别名。因此,您可以使用静态值查询它:
$stmt = $con->_con->prepare("Select id, 'code1' AS `column` from table", array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));
获取时,它将以所需格式返回结果。但是,由于该值是动态的,您可以而且应该使用PDO占位符。从PDO包装类中你不清楚你在哪里绑定参数,但prepare()
调用将在SQL上
// Whatever the source of the dynamic value...
$your_dynamic_value = 'code1';
// Adds :column as a prepared statement placeholder
$stmt = $con->_con->prepare("Select id, :column AS `column` from table", array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));
我必须让你正确地调用bindParam()
或者在这个不熟悉的PDO包装器类上执行带有[':column' => $your_dynamic_value]
的param数组,其中prepare()
方法似乎做得更多比正常PDO::prepare()
。
如果要在获取期间添加它,则需要在将它添加到$rows[]
之前将其添加到iterator / fetch变量$selected_row
中来执行此操作:
while ($selected_row = $stmt->fetch(PDO::FETCH_ASSOC)) {
// Add an array key to the fetched row before calling array_map()
// and appending to the $rows collection
$selected_row['column'] = 'code1';
$rows[] = array_map('utf8_encode', $selected_row);
}