2009-09-02 6 views
2

Je ne vois pas l'erreur et espérait que quelqu'un pourrait le comprendre:passe-déclaration préparée par erreur de référence

public static function createMessage($title, $message, $startDate, $endDate, $author, $status){ 
     //$dbConn is now a mysqli instance with a connection to the database foobar 
     $dbConn = Database::getConnection("foobar"); 

     $stmt = $dbConn->prepare("INSERT into messages(title, msg, date_start, date_end, app_usersID_FK, date_created, activeflag, msg_status) VALUES (?,?,?,?,?,?,?,?)"); 

     if(!$stmt){ 
      throw new Exception("Unable to prepare the statement"); 
     } 

     $dt = date("Y-m-d"); 
     $stmt->bind_param("ssssisii", $title, $message, $startDate, $endDate, $author, $dt, 1, $status); 
     $stmt->execute(); 

     return true; 
} 

appel Fonction

MessageCenter :: createMessage (« Bonjour », « Just appeler pour dire bonjour "," 2009-09-12 "," 2009-09-12 "," 1 "," 1 ");

Message d'erreur est:

Erreur fatale: ne peut pas passer le paramètre 8 par référence

Répondre

6

Je devine votre méthode bind_param est en fait mysqli_stmt::bind_param. Si oui: tous les paramètres (sauf le premier) doivent être des variables passées par référence, donc ils peuvent être "liés".

Comme le manuel dit (Souligné par l'auteur):

mysqli_stmt::bind_param -- mysqli_stmt_bind_param — Binds variables to a prepared statement as parameters


Cela signifie que vous ne pouvez pas passer une valeur: vous devez utiliser des variables.

Si, sur votre cas, quelque chose comme cela devrait faire:

$my_var = 1; 
$stmt->bind_param("ssssisii", $title, $message, $startDate, 
    $endDate, $author, $dt, $my_var, $status); 
+0

Belle réponse complète –

+0

@Peter: merci :-) –

0

Je l'ai trouvé! Il voulait que activeFlag soit une variable. Les travaux suivants:

$dt = date("Y-m-d"); 
$flag = 1; 
$stmt->bind_param("ssssisii", $title, $message, $startDate, $endDate, $author, $dt, $flag, $status); 
$stmt->execute(); 
Questions connexes