Bonjour,
Je cherche à lister tous les auteurs (table auteur) de chaque article (table article) grâce à une jointure avec une table de relation (t_article_auteur).
Mon code actuel n'est sans doute pas idéal, mais il fonctionne.

Maintenant, je tente d'utiliser les requêtes préparées, mais je sèche sur 2 boucles while imbriquées : la première boucle ne "boucle pas" (elle ne récupère que le premier article) alors que la deuxième boucle fonctionne comme attendu (elle récupère bien tous les auteurs de l'article retourné par la première).
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
$sql_data = <<<SQL
    SELECT t_article.Titre, t_article.Page, t_article.Numero, t_article.id_article 
    FROM    t_article, ...
    WHERE  conditions sur plusieurs tables
    GROUP BY id_article
    ORDER BY Numero, Page, Titre;
SQL;
$stmt_data=mysqli_prepare($db, $sql_data);
mysqli_stmt_execute($stmt_data);
mysqli_stmt_bind_result($stmt_data, $res_titre, $res_page, $res_numero, $id_parution, $id_article);
$data = array();
// BOUCLE PRIMAIRE (LES ARTICLES)
while (mysqli_stmt_fetch($stmt_data)){
    //AUTEURS
    $sql_auteur = <<<SQL
        SELECT t_auteur.auteur
        FROM	   t_article, t_auteur
                INNER JOIN t_article_auteur ON t_article_auteur.auteur = t_auteur.auteur
        WHERE  t_article_auteur.id_article = ?
        GROUP BY t_auteur.auteur;
SQL;
    //BOUCLE SECONDAIRE (AUTEURS)
    $stmt_auteur=mysqli_prepare($db, $sql_auteur);
    mysqli_stmt_bind_param($stmt_auteur, 'i', $id_article);
    mysqli_stmt_execute($stmt_auteur);
    mysqli_stmt_bind_result($stmt_auteur, $res_auteur);
    $cell_auteur = array();
    while (mysqli_stmt_fetch($stmt_auteur)) {
            $cell_auteur[]=$res_auteur;
            }
    $cell_val_auteur= implode("\n", $cell_auteur);
 
$data[] = <<<HTML
<tr>
    <td class="alignc">
        {$res_numero}
    </td>
    <td class="alignr">
        {$res_page}
    </td>
    <td>
        <a href="http://localhost/articles-criteres-croises-tableau-details-secu-pour-ddk3_prep/pdf/{$id_parution}/{$id_article}.pdf" target='_blank'>{$res_titre}</a>               
    </td>
    <td>
        {$cell_val_auteur}
    </td>
</tr>
HTML;
}
?>

Je ne suis pas sûr d'avoir saisi toutes les subtilités de la classe stmt, mais pas sûr non plus de mon php...
Une idée sur mon erreur ?
Merci!

Si ça peut aider, le code qui fonctionne :
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
$sql = <<<SQL
    SELECT t_article.Titre, t_article.Page, t_article.Numero, t_article.id_article 
    FROM    t_article, ...
    WHERE  conditions sur plusieurs tables
    GROUP BY id_article
    ORDER BY Numero, Page, Titre;
SQL;
$data = array();
// BOUCLE PRIMAIRE (LES ARTICLES)
$qry = mysqli_query($db, $sql);
while($row = mysqli_fetch_assoc ($qry)) {
    $article = mysqli_escape_string ($db, $row['id_article']);
    //BOUCLE SECONDAIRE (AUTEURS)
    $sql_auteur = <<<SQL
    SELECT  t_auteur.auteur
    FROM     t_article, t_auteur
            INNER JOIN t_article_auteur ON t_article_auteur.auteur = t_auteur.auteur
    WHERE	t_article_auteur.id_article = $article
    GROUP BY t_auteur.auteur;
SQL;
 
    $qry_auteur=mysqli_query($db, $sql_auteur);
    while($row_auteur = mysqli_fetch_row($qry_auteur)) {
        $data_auteur[] = $row_auteur;
        }
    $cell_auteur = implode ("\n", $data_auteur);
 
$data[] = <<<HTML
    <tr>
        <td class="alignc">
            {$row['Numero']}
        </td>
        <td class="alignr">
            {$row['Page']}
        </td>
        <td>
            <a href="pdf/{$row['ref_parution']}/{$row['id_article']}.pdf" target='_blank'>{$row['Titre']}</a>               
        </td>
        <td>
            {$cell_auteur}
        </td>
    </tr>
HTML;
}