0

我正在使用 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
4

3 回答 3

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 查询的一部分。

于 2013-06-08T14:11:00.363 回答
1

您需要在查询和 php 中进行更好的连接

'select concat("{""type:"",colName,"",""id"":""'.$id.'""}") 

尽管实际上并不需要,但您可以用反引号括住列名 `

于 2013-06-08T14:04:12.827 回答
0

您的字符串中的变量不会被它们的值替换,因为您有单引号。双引号字符串将扩展变量及其值

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

$sql = "select concat('...')"
于 2013-06-08T14:03:18.227 回答