2011-10-27 3 views
0

je suis en train de ce code, mais je reçois cette erreur:Seules les variables peuvent être passés par référence - php

Only variables can be passed by reference in xxx 
scénario

class page { 
    function insert($db, $of, $form, &$arr) { 

     $i = 0; 

     foreach(array_combine($form['value0'], $arr) as $val=>$v){ 

      $sql->prepare("mysqli query here"); 
      $sql->bind_param('ssss', $val, $of, $v[$i][0], $v[$i][1]);//error here 
      $sql->execute(); 
      $i++; 

     } 
     return true; 
    } 
} 

quelle est la raison, et comment peut-il être résolu? merci

+2

je ne vois même pas où est initialisé 'sql' –

+0

Sur votre ligne d'erreur, devrait être $ de $ oferta? – wclark

+0

Pourquoi pensez-vous que cela réglerait le problème? – icktoofay

Répondre

5

Je suppose que vous utilisez mysqli::bind_param. Tous les arguments sauf le premier sont passés par référence. Cela signifie qu'ils doivent être des variables, et non pas des chaînes, des éléments de tableau, etc. Je ne suis pas vraiment sûr pourquoi il faut le faire par référence, mais peu importe. Vous pouvez corriger assez facilement:

$v0 = $v[$i][0]; 
$v1 = $v[$i][1]; 
$sql->bind_param('ssss', $val, $of, $v0, $v1); 
+0

"Décision de conception idiote", mais c'est ce que c'est: Je suppose "de sorte que la valeur peut être affectée à après la liaison, mais avant l'exécution?" ce qui permettrait de réutiliser le même '$ sql' en changeant seulement la valeur des variables référencées ... encore une fois, pas comment je l'aurais conçu. –

Questions connexes