2012-06-28 3 views
1

Je rencontre les erreurs suivantes lorsque j'essaie de faire défiler un tableau sur mon serveur pour lier des instructions avec AOP:Erreur uniquement sur le serveur avec PDO: "Seules les variables peuvent être transmises par référence"/"Impossible de passer le paramètre 2 par la référence pdo"

"Seules les variables peuvent être passés par référence" ou "ne peut pas passer le paramètre 2 par référence pdo"

fonctionne très bien sur mon XAMPP local.

code:

$sql = rest of sql query etc. 

$loop = 1; 
foreach ($animal_array $ani) 
{ 
    if ($loop == 1) {$sql .= " WHERE animal.id= :animal_id".$loop; } 
    else   {$sql .= " OR animal.id= :animal_id".$loop;} 
    $loop++; 
} 

$stmt = $crud->db->prepare($sql); 

$loop = 1; 
foreach ($animal_array as $ani) 
{ 
    $stmt->bindParam(':animal_id'.$loop, $ani['animal_id'], PDO::PARAM_STR); 
    $loop++; 
} 

a également essayé ceci à la fin comme je l'ai lu quelque part que concatonations ne sont parfois pas aimé:

foreach ($animal_array as $ani) 
{ 
    $ref = ":animal_id".$loop; 
    $stmt->bindParam($ref, $ani['animal_id'], PDO::PARAM_STR); 
    $loop++; 
} 

.

EDIT: Le tableau contient d'autres valeurs, un peu comme cela:

$animal_array['animal_id']; 
$animal_array['name']; 
$animal_array['colour']; 
$animal_array['quantity']; etc 

Répondre

2

Vous devez utiliser bindValue pour les paramètres d'entrée purs. La méthode bindParam est réservée aux variables de liaison qui peuvent être utilisées en tant qu'entrée mais aussi résultats de requête de retour (sortie).

Bien que cela n'explique pas votre problème. Mais nous ne savons pas ce que contient votre tableau.
Ce n'est pas la génération/concaténation de clé, c'est certain.

+0

Le tableau contient beaucoup d'autres informations, mais animal_id est un nombre. J'ai modifié cette information pour ma question initiale. – penpen

+0

J'ai essayé bindValue et ça n'a pas fonctionné mais maintenant c'est le cas ... je ne sais pas où je me suis trompé avant, mais merci! – penpen

1

Il se sent comme vous ... pourquoi les questions trop compliquer passer non seulement le tableau à execute directement:

$sql .= 'WHERE animal.id IN (' 
    .  '?'.str_repeat(',?', count($animal_array['animal_id'])-1) 
    . ')'; 

$qry = $crud->db->prepare($sql); 
$qry->execute($animal_array['animal_id']); 
+0

Je ne connaissais pas "str_repeat". Ce sera vraiment utile, merci. Cependant, je ne pense pas que mon tableau fonctionnera comme ça dans ce cas. – penpen

+1

@penpen: Pourquoi pas? Peux-tu élaborer? – eggyal

+0

C'est un tableau multidimensionnel – penpen

Questions connexes