Bonjour,

Voilà, je rencontre un petit problème avec mon code.
J'ai mes variables $numero_affection = array(1,2) , $role (expert, agent)
J'aimerais récupérer (en SQL) toutes les personnes qui sont affecter aux numéros d'affectation ci-dessus et qui ont comme role expert et agent

Ce que je fais

Dans un premier temps j'ai fait la requête avec un implode pour seulement le numéro d'affectation

<?php
$numero_affectation = array(1,2);
$marqueur = array_fill(0, count($numero_affectation), '?');
$stmt = $conn->prepare("SELECT * FROM users WHERE num_affect IN (".implode(',', $marqueur).")  ");
$stmt->execute($numero_affectation);

Mais j'aimerais pouvoir faire la même chose en ajoutant le role , comme par exemple

<?php
$numero_affectation = array(1,2);
$role= array('expert','agent');

$marqueur1 = array_fill(0, count($numero_affectation), '?');
$marqueur2 = array_fill(0, count($role), '?');

$stmt = $conn->prepare("SELECT * FROM users WHERE num_affect IN (".implode(',', $marqueur1).") AND role IN (".implode(',', $marqueur2).")  ");
$stmt->execute($numero_affectation, $role);

Ce que j'obtiens

Quand je lance le premier code ( celui qui est juste avec le numéro d'affectation) j'arrive à recupérer les utilisateurs mais dès que je rajoute le role j'ai des erreurs et cela m'affiche :

Warning: PDOStatement::execute() expects at most 1 parameter, 2 given

Merci de bien votre aide

3 réponses


keulu
Réponse acceptée

normal :)

Que te dit l'erreur ?
Attention: PDOStatement::execute() attends 1 paramètre, 2 transmis...

tu captes ?

$stmt->execute($numero_affectation, $role);
c'est comme faire :
$stmt->execute(array(1,2), array('expert','agent'));

ici tu transmet 2 tableaux.

Solution :

$stmt->execute(array_merge($numero_affectation, $role));

Alors attention :

array_merge va reindéxer toutes tes clés... (bon ici on s'en fiche mais attention quand meme... c'est bon a savoir).

si tu veux juste ajouter 2 tableaux en gardant leurs index respectif, tu peux utiliser "+" (oui tu peux additionner des tableaux)
et si les 2 tableaux se partagent une clé commune, $ar1 + $ar2 c'est $ar2 qui va overrider la clé du $ar1

Merci beaucoup de votre aide, ça marche :D