Php 转换为数组的最佳字符串格式是什么?
我正在MySQL中使用GROUP_CONCAT生成一个字符串 我需要为每行id和name选择两列,我应该如何格式化查询中的字符串,以便在PHP中以最佳速度生成一个耦合id和name的数组 例如(我的尝试): 组_CONCAT生产Php 转换为数组的最佳字符串格式是什么?,php,mysql,Php,Mysql,我正在MySQL中使用GROUP_CONCAT生成一个字符串 我需要为每行id和name选择两列,我应该如何格式化查询中的字符串,以便在PHP中以最佳速度生成一个耦合id和name的数组 例如(我的尝试): 组_CONCAT生产 {"id":1,"name":"python"},{"id":2,"name":"ruby"} 然后将其转换为PHP中的数组。您的组是否生成JSON字符串?在这种情况下,json\u decode($string,true)(json\u decode()on)将完成
{"id":1,"name":"python"},{"id":2,"name":"ruby"}
然后将其转换为PHP中的数组。您的组是否生成JSON字符串?在这种情况下,json\u decode($string,true)
(json\u decode()on)将完成这项工作
但这不会比上面提到的跳蛙更快mysql\u fetch\u array()
将为您解析字符串(使用mysql\u NUM
以避免额外的开销),您还将避免mysql在GROUP\u CONCAT()上的额外时间
如果您只想在DB上存储一些JSON数据(这将使未来的搜索和索引变得复杂,但有时当您不想创建大量的DB字段时,Wordpress会一直这样做),您可以在存储之前使用JSON\u encode()
,然后使用JSON\u decode()
检索用于该目的的原始数组/对象。您也可以使用PHPserialize()
和unserialize()
,但我认为JSON更可取,因为您提到您在哪里使用Javascript。我不知道您为什么要尝试这样做。但是这个查询应该是可行的
SELECT * FROM `yourtable` GROUP_CONCAT(
CONCAT('{"id":"',id,'","name":"',name,'"}')
separator ',')
像这样的-
<?php
$db = new PDO('mysql:dbname=test;host=127.0.0.1', 'user', 'pass');
$stmt = $db->prepare("SELECT some_field, GROUP_CONCAT(CONCAT_WS('::', id, name) SEPARATOR '||') AS grp
FROM `table`
GROUP BY some_field");
$stmt->execute();
while($row = $stmt->fetchObject()) {
foreach(explode('||', $row->grp) as $pair) {
$tmp = explode('::', $pair);
$array[$row->some_field][$tmp[0]] = $tmp[1];
}
}
print_r($array);
仅仅一个mysql\u fetch\u数组对您没有帮助?编写您的查询和表结构,也许有比group更好的方法_concat@safarov不,没有更好的方法,标记将是一列,其余列将是问题的详细信息。也许您可以发布您的SQL查询,以便我们可以帮助您找到更好的方法?手工生成JSON根本不是一个好主意。在mysql查询中生成JSON是一件傻事。考虑SQL注入,而不是JSON。最好从MySQL获取原始数据,然后在PHP.No中进行操作/编码。执行常规的select id,name from…
查询,然后将其构建到一个PHP数组中,然后进行json\u编码,这将更加可靠。@Marc B标记名也被清理干净了。如何存在注射漏洞?有人建议这不是一个坏主意:。思想?你总是要让不好的东西进来。考虑一个名为<代码> OBRIN 的用户。该引号是一个正在等待发生的注入/语法错误,但您不会强制用户更改其名称,因为您的代码无法处理它。”“坏”总是可以存储在数据库中。这就是我们使用转义/参数化查询的原因。如果您为一个目标环境(比如HTML)存储数据“就绪”,那么如果您需要在另一个环境(比如JSON)中使用该数据,您现在必须撤消HTML清理。始终存储“原始”(但安全)数据,并在检索时根据需要进行转换。