2017-09-27 103 views
2

比方说我有这个疑问:是有可能的变量值添加到选择查询结果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 .....

如何从示例中获得所需的输出? 我打开其他的解决方案,比我心目中

回答

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()或与[':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); 
} 
+0

我想澄清这是最好的解决方案?第一个还是第二个? – Martin

+1

我个人更喜欢在'SELECT'中添加'code1',因为你将它当作查询结果的一部分。它为数据库查询增加了很少的开销。将值添加到输出数组后,可能会在稍后追溯并忘记它来自哪里时使其起源不太清晰。但另一方面,也许有一天有人会查看数据库源表,并对该列不存在的原因感到困惑。这两种解决方案都没有明显的优势,但是我发现了'SELECT'整理器。如果需要,可以使用它在应用程序代码外复制SQL中相同的查询结果。 –

+0

非常感谢解释快乐编码队友:) – Martin