Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 转换为数组的最佳字符串格式是什么?_Php_Mysql - Fatal编程技术网

Php 转换为数组的最佳字符串格式是什么?

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)将完成

我正在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)将完成这项工作

但这不会比上面提到的跳蛙更快
mysql\u fetch\u array()
将为您解析字符串(使用
mysql\u NUM
以避免额外的开销),您还将避免mysql在
GROUP\u CONCAT()上的额外时间


如果您只想在DB上存储一些JSON数据(这将使未来的搜索和索引变得复杂,但有时当您不想创建大量的DB字段时,Wordpress会一直这样做),您可以在存储之前使用
JSON\u encode()
,然后使用
JSON\u decode()
检索用于该目的的原始数组/对象。您也可以使用PHP
serialize()
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清理。始终存储“原始”(但安全)数据,并在检索时根据需要进行转换。