在面向对象的mysqli中无法使用准备好的语句更新数据

时间:2019-02-03 14:10:14

标签: php mysql mysqli

我正在尝试使用此代码更新数据库中的令牌,但收到此错误:

注意:未定义的变量:第185行的C:\ MAMP \ htdocs \ admin-dashboard \ action.php中的stmt_i

可恢复的致命错误:第185行的C:\ MAMP \ htdocs \ admin-dashboard \ action.php中无法将mysqli类的对象转换为字符串

 if(count($assoc_array)>0){
                        $token = "qwertyuiopasdfghjklzxcvbnm1234567890jksdhfljdhfajlsdbhkfdajsfhaljsdfhb";
                        $token=str_shuffle($token);
                        $token=substr($token, 0,10);

    //                  echo $token;

                        $stmt_i->$conn->prepare("UPDATE users SET token=?, tokenExpire=DATE_ADD(NOW(), INTERVAL 5 MINUTE) WHERE email=?");
                        $stmt_i->bind_param("ss",$token,$femail);
                        $stmt_i-> execute();
}

1 个答案:

答案 0 :(得分:0)

您需要执行以下操作:

  • 设置$femail变量
  • 使用prepare()准备语句,并将结果分配给$stmt_i变量。然后绑定每个参数值并执行您的语句。请注意,prepare()mysqli类的方法,而bind_param()execute()mysqli_stmt类的方法。

    if (count($assoc_array) > 0) {
        $token = "qwertyuiopasdfghjklzxcvbnm1234567890jksdhfljdhfajlsdbhkfdajsfhaljsdfhb";
        $token = str_shuffle($token);
        $token = substr($token, 0,10);
        $femail = 'some@email.com';
    
        $stmt_i = $conn->prepare("UPDATE users SET token=?, tokenExpire=DATE_ADD(NOW(), INTERVAL 5 MINUTE) WHERE email=?");
        $stmt_i->bind_param("ss", $token, $femail);
        $stmt_i->execute();
    }
    
    ?>