PHP-从sql数据库调用的数组无法正确内爆,但是直接创建的数组可以吗?

问题描述 投票:1回答:5

我正在使用PDO从xampp的phpmyadmin调用我的数据库。XAMPP版本7.0.1-0

当我从头开始创建数组并分解时,它给了我想要看到的结果。

例如:

$arr = array('Hello','World!','Beautiful','Day!');
echo implode(" ",$arr);

哪个给我:

你好世界!美丽的一天!

但是,当我对数据库查询执行相同的操作时,会发生这种情况:

注意:第57行上的C:\ xampp \ htdocs \ WHS_Webtour \ Search_Categories \ People_Search_Result \ people_search.php中的数组到字符串的转换

数组数组数组数组数组数组...

我已经使用var_dump()来查看数组是否真正显示了,并且显示了。

这是我以前从sql数据库调用的代码:

    function getData($db)
    {
        $stmt = $db->query('SELECT NAME FROM people');

        $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
    }

然后我添加了echo implode(" ",$result);,这给了我上面的错误结果。

如果有帮助,我已经导入了从.dbf转换为.sql的数据库文件。

UPDATE我更新了以下代码行:$result = $stmt->fetch(PDO::FETCH_ASSOC);它只打印出50个名称中的一个。

php mysql arrays sql-server pdo
5个回答
2
投票

fetchAll()返回数组数组(多维数组)。由于语言的限制,多维数组无法立即转换为文本。尝试使用fetch()返回您的值,该值将获得一行作为单个数组。您可以循环执行此操作:

while($row = $stmt->fetch() {
    $line = implode(" ",$row);
}

PDO Fetch

由于您仅从数据库中获得一列,所以可以将所有返回的值放在一个数组中:

while($row = $stmt->fetch() {
    $names[] = $row['NAME'];
}

$allNames = implode(" ", $names);

通过这种方式,将每个返回的项目推入一个数组($names)中,然后可以对其进行内爆。


1
投票

根据您的查询判断,我想您想内嵌所有名称,但是您遇到的问题是,您提取的每一行都将是一个数组。

function getData($db)
{
    $stmt = $db->query('SELECT NAME FROM people');
    $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
    $names = array();

    foreach($result as $name) {
        $names[] = $name['NAME'];
    }
    return $names;
}

这将特别以您期望的方式返回信息。它将遍历每一行并将名称拉入一个新数组,然后将其返回。


0
投票

另一种解决方案是直接在您的查询中执行此操作。

SELECT 
    GROUP_CONCAT(`NAME` SEPARATOR ' ') AS `NAMES`,
    1 AS `x` 
FROM `people` 
WHERE 1 
GROUP BY `x` 

0
投票

fetchAll()返回一个数组数组。如果您想implode()您的数据,您可能想使用fetch():]

function getData($db)
{
    $stmt = $db->query('SELECT NAME FROM people');

    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        echo implode(" ",$row);
    }
}

应该有帮助!


0
投票
$implodedVal = implode(', ', array_map(function ($indArray) {
  return implode(", ", $indArray);
}, $result));
© www.soinside.com 2019 - 2024. All rights reserved.