在PHP数组中保存SQL数据

时间:2016-09-01 11:17:20

标签: php mysql

我想将具有匹配id的所有行保存到数组但是我无法使其正常工作。我需要添加什么?

    public function getProjects($db1) {
    $id= $this->getId($db1);

    $projects = $db1->getResult(
        sprintf(
            "SELECT * FROM projects WHERE id =1"
        )
    );
    return $projects;
}

所以项目只返回我数据库中的第一项,而不是全部。

是的,我见过类似的问题但是这些选项对我来说不起作用,因为我使用的是PHP7,或者它与sprintf有关。 谁可以帮忙?

3 个答案:

答案 0 :(得分:3)

通过以下链接查看php中sprintf()的用法:http://www.w3schools.com/php/func_string_sprintf.asp

答案 1 :(得分:3)

所以,让我直截了当地说:

您希望从数据库中获取结果,然后按ID 对结果进行分组,即构建一个聚合具有相同ID的所有行的数组即可。我是对的吗?

如果是这样,你可以这样做(例子):

$projects = [];
$projects[] = ["id" => 1, "name" => "project1"];
$projects[] = ["id" => 2, "name" => "project2"];
$projects[] = ["id" => 1, "name" => "project11"];
$projects[] = ["id" => 2, "name" => "project22"];

$projectsById = [];
foreach($projects as $project) {
   if(!isset($projectsById[$project['id']]))
      $projectsById[$project['id']] = [];
   $projectsById[$project['id']][] = $project;
}

var_dump($projectsById);

快速解释:

  • 来自数据库的Foreach记录,
    • 如果记录ID不存在于数组$ projectsById上,它创建了一个新的(嵌套)数组,其记录ID为该新数组的键:$projectsById[$project['id']] = [];
    • 现在,具有相同ID的所有下一条记录都将放在上面创建的数组中:$projectsById[$project['id']][] = $project;

您可以查看结果并在此处使用代码:http://ideone.com/AcoLIQ

答案 2 :(得分:1)

在我的情况下,它是sitecomposer中的一个函数,旨在仅返回一个值(语句成功的第一行)。