我正在使用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
答案 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('...')"