prepared-statement传递引用错误

时间:2009-09-02 19:26:51

标签: php prepared-statement

我没有看到错误,希望有人能弄明白:

 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;
 }

函数调用

MessageCenter :: createMessage(“你好”,“只是打电话来打招呼”,“2009-09-12”,“2009-09-12”,“1”,“1”);

错误消息是:

致命错误:无法通过引用传递参数8

2 个答案:

答案 0 :(得分:6)

我猜你的bind_param方法实际上是mysqli_stmt::bind_param。如果是:每个参数(第一个参数除外)必须是通过引用传递的变量,因此它们可以“绑定”。

就像手册中说的(强调我的)

  

mysqli_stmt::bind_param -   mysqli_stmt_bind_param - 绑定   变量作为参数准备好的语句


这意味着您无法传递值:您必须使用变量。

Si,就你的情况而言,应该这样:

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

答案 1 :(得分:0)

发现它!它希望activeFlag成为一个变量。以下作品:

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