假设我有这个查询:
$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"
}]
从结果中,我想添加一个值为 code1
的键 column
,该值是动态的,我想通过选择查询之外的条件来设置它。
我尝试的是在 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'...
,其中我手动尝试将要作为选择查询的一部分返回的 key 对值,但是它失败并在 AS .....
中给出错误。
How to get the desired output from the example? I am open to other solution that is better than the ideas I have in mind
最佳答案
您尝试在 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 包装类中不清楚您在何处绑定(bind)参数,但 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);
}
关于php - 是否可以将变量值添加到选择查询结果 php pdo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46437903/