是有可能的变量值添加到选择查询结果PHP PDO
问题描述:
比方说我有这个疑问:是有可能的变量值添加到选择查询结果PHP PDO
$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
这个VA lue是动态的,我想通过选择查询之外的条件来设置它。 我试过手动添加列在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"
}]
这是不是期望output.Also试图做Select id,column AS 'code1'...
,我尝试手动把密钥对值返回为选择查询的一部分,但它失败,给错误在AS .....
。
如何从示例中获得所需的输出? 我打开其他的解决方案,比我心目中
答
您试图在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()
或与[':column' => $your_dynamic_value]
传递参数数组执行这个不熟悉的PDO包装类,其中prepare()
方法似乎比正常的PDO::prepare()
做得更多。
如果你要在增加它的获取,你需要做的是你将它添加到迭代其追加到$rows[]
前/获取变量$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);
}
我想澄清这是最好的解决方案?第一个还是第二个? – Martin
我个人更喜欢在'SELECT'中添加'code1',因为你将它当作查询结果的一部分。它为数据库查询增加了很少的开销。将值添加到输出数组后,可能会在稍后追溯并忘记它来自哪里时使其起源不太清晰。但另一方面,也许有一天有人会查看数据库源表,并对该列不存在的原因感到困惑。这两种解决方案都没有明显的优势,但是我发现了'SELECT'整理器。如果需要,可以使用它在应用程序代码外复制SQL中相同的查询结果。 –
非常感谢解释快乐编码队友:) – Martin