是否可以将变量值添加到选择查询结果 php pdo
Posted
技术标签:
【中文标题】是否可以将变量值添加到选择查询结果 php pdo【英文标题】:is it possible to add variable value to a select query result php pdo 【发布时间】:2018-03-08 08:28:33 【问题描述】:假设我有这个查询:
$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
这个值是动态的,我想通过选择查询之外的条件来设置它。
我尝试的是在 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 .....
中给出错误。
如何从示例中获得所需的输出? 我愿意接受比我的想法更好的其他解决方案
【问题讨论】:
【参考方案1】:您在 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]
的参数数组,其中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);
【讨论】:
我想澄清哪个是最好的解决方案?第一个还是第二个? 我个人更喜欢将code1
添加到SELECT
,因为您将其视为查询结果的一部分。它对数据库查询的开销很小。当您稍后回溯并忘记它来自哪里时,将值添加到输出数组可能会使它的起源不太清楚。但另一方面,也许某天有人会查看数据库源表,并为为什么该列不存在感到困惑。这两种解决方案显然都不是更好的,但我发现SELECT
更整洁。如果需要,您也可以使用它在应用程序代码之外的 SQL 中复制相同的查询结果。以上是关于是否可以将变量值添加到选择查询结果 php pdo的主要内容,如果未能解决你的问题,请参考以下文章