插入mysqli抛出错误的函数

时间:2013-12-21 01:53:35

标签: php mysqli

标题类型说明了一切,我通过函数insertannounce支付了3个变量,并且数据库抛出了一个错误:致命错误:无法通过引用传递参数4.

fyi:id不是自动增量,日期是字符串。

请求信息:php

for ($j = 0; $j < count($server_id); $j++){
  $found = 0;

if (isset($local_id[0])){

    for ($i = 0; $i < count($local_id); $i++) {
          if ($server_id[$j] == $local_id[$i]){
              $found = 1;
          }
    }
    if ($found == 0)
        insertAnnounce($server_id[$j], $server_message[$j], $server_date[$j]);  

 }
 else  //if both fields are empty
      insertAnnounce($server_id[$j], $server_message[$j], $server_date[$j]);                  
}

功能:

function insertAnnounce ($id, $message, $date){

         // $insert = $mysqli->query("INSERT announce (id, message, active, datestamp) VALUES ('{$id}', '{$message}', 'enabled', '{$date}')");
           if ($stmt = $mysqli->prepare("INSERT INTO announce (id, message, active, datestamp) VALUES (?, ?, ?, ?)"))
            {
             $stmt->bind_param("isss", $id, $message, 'enabled', $date);
             $stmt->execute();
             $stmt->close();
            }
    }

任何想法?,谢谢!

2 个答案:

答案 0 :(得分:2)

如果查看bind_param()上的手册,您会看到所有参数都通过引用传递,例如&$var1等。

您的字符串已修复且无法通过引用传递,因此您需要执行以下操作:

...
$var3 = 'enabled';
$stmt->bind_param("isss", $id, $message, $var3, $date);
...

答案 1 :(得分:0)

似乎您的$date变量是一个对象,并且解析函数无法解析引用,因为无法将对象保存到数据库中。使用$date->toString()$date->toUnixTimestamp()方法。 (取决于$date是什么)