是否可以将变量值添加到选择查询结果 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的主要内容,如果未能解决你的问题,请参考以下文章

将变量值从 JS 传递给 PHP

是否可以在不指定类型的情况下将变量值打印到调试?

将变量值添加到 mysql 列

将变量值从反应构造函数传递到 nodeJS 后端

Datalab 到 BigQuery - 将变量值插入 SQL

从表单中检索信息以进行 PDO 查询的问题