PHP – Un tableau appelé à partir d'une database SQL n'implose pas correctement, mais un tableau créé directement le fait?

J'utilise PDO pour appeler ma database de phpmyadmin de xampp. XAMPP version 7.0.1-0

Quand je crée un tableau à partir de rien et que je l'implose, cela me donne les résultats que je veux voir.

Par exemple:

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

Ce qui me donne:

Bonjour le monde! Magnifique journée!

Cependant, quand je fais la même chose à ma requête de database, cela arrive:

Remarque: Array to ssortingng conversion dans C: \ xampp \ htdocs \ WHS_Webtour \ Search_Categories \ People_Search_Result \ people_search.php à la ligne 57

Array Array Array Array Array Array Array Array …

J'ai utilisé var_dump() pour voir si le tableau montre réellement et il le fait.

C'est le code que j'appelais depuis ma database sql:

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

J'ai ensuite ajouté echo implode(" ",$result); ce qui m'a donné le résultat d'erreur ci-dessus.

Si cela aide, j'ai importé un file de database qui a été converti d'un file .dbf en .sql.

UPDATE J'ai mis à jour cette ligne de code: $result = $stmt->fetch(PDO::FETCH_ASSOC); Il imprime seulement un nom sur 50.

fetchAll() returnne un tableau de arrays (un multidimensional array). Les arrays multidimensionnels ne peuvent pas être convertis directement en text en raison de contraintes dans le langage. Essayez de returnner vos valeurs avec fetch() qui obtiendra une ligne en un seul tableau. Vous faites cela en boucle:

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

PDO Fetch

Puisque vous obtenez seulement une colonne de la database, vous pouvez placer toutes les valeurs returnnées dans un tableau:

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

De cette façon, vous poussez chaque élément returnné dans un tableau ( $names ) que vous pouvez ensuite imploser.

A en juger par votre requête, je suppose que vous voulez imploser tous les noms, mais le problème que vous rencontrez est que chaque ligne que vous allez chercher sera un tableau.

 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; } 

Cela returnnera spécifiquement l'information de la manière que vous l'anticipez. Il passera par chaque ligne et tirera le nom dans un nouveau tableau qui sera ensuite returnné.

 $implodedVal = implode(', ', array_map(function ($indArray) { return implode(", ", $indArray); }, $result)); 

fonction éditée

 function getData($db) { $stmt = $db->query('SELECT NAME FROM people'); $result = $stmt->fetchAll(PDO::FETCH_ASSOC); return implode(', ', array_map(function ($entry) { return implode(", ", $entry); }, $result)); } 

Cela pourrait vous aider, si je ne me trompe pas dans la compréhension de votre question.

Merci et salutations

Une autre solution serait de le faire directement dans votre requête.

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

fetchAll() returnne un tableau de arrays. Si vous voulez implode() vos données, vous pouvez essayer quelque chose comme ça en utilisant fetch() :

 function getData($db) { $stmt = $db->query('SELECT NAME FROM people'); while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { echo implode(" ",$row); } } 

Cela devrait aider!