使用带有MySql的concat创建json数组

时间:2013-06-08 14:00:08

标签: php mysql

我正在使用concat从MySql数据创建一个json数组:

$id = '5705';
$sql = 'select concat("{""type:""colName"",""id"":""$id""}") as myJson from table where etc.;

$stmt = $conn->prepare($sql);

发生了什么,而不是从表中colName获取数据以及$id的值,我得到的结果与$sql中的结果相同。如何摆脱它并获得colName$id's值?

当前结果

{""type:""colName"",""id"":""$id""}

期望的结果

{""type:""novice"",""id"":""5705""}
//Here novice is data from colName, and 5705 is the value of $id

3 个答案:

答案 0 :(得分:3)

不要那么做。尝试在SQL中将数据格式化为JSON将是脆弱的,因为将事物编码到JSON中会比您期望的更加棘手,并且您将不可避免地弄错它。

您应该在PHP中使用json_encode函数。它可以可靠地工作,而你的代码几乎肯定会破坏。

$dataArray = array();

while($statement->fetch()){
    $data = array();
    $data['type'] = $typeColumn;
    $data['id'] = $id;

    $dataArray[] = $data;
}

json_encode($dataArray, JSON_HEX_QUOT);

另外,格式化要发送到客户端的数据实际上不应该是SQL查询的一部分。

答案 1 :(得分:1)

在查询和php

中需要更好的连接
'select concat("{""type:"",colName,"",""id"":""'.$id.'""}") 

尽管不是真的需要你可以用反引号“

来包围列名

答案 2 :(得分:0)

您的字符串中的变量不会被其值替换,因为您有单引号。 Double quoted strings will expand variables with their values

因此,你可以像这样反转引号,以获得变量的实际值:

$sql = "select concat('...')"