我有一个sql语句来更新确认数据库中的代码和代码。我使用bind param绑定变量。它适用于我的select和insert sql语句。但是,它一直给我这个错误:
致命错误:未捕获错误:在布尔值上调用成员函数bind_param()
当我尝试执行更新查询时。我试图搜索每个可能的论坛,但没有找到答案,我希望有人可以发现我的错误。我遇到$query1
的问题。代码和confirmcode都是varchar而不是整数。
$username = $_GET['username'];
$code = $_GET['code'];
$confirmcode = "1";
$updatecode ="0";
$query=$con->prepare("SELECT username, code FROM customer_detail WHERE username ='$username'");
$query->execute();
$query->bind_result($checkusername, $checkcode);
$query->fetch();
$query1=$con->prepare("UPDATE customer_detail SET code=?, confirmcode=? WHERE username = ?"); //error
$query1->bind_param('sss',$username, $updatecode, $confirmcode); //error
$query1->execute();
答案 0 :(得分:1)
尝试以下代码。基本上,您需要按照占位符(?)在sql中出现的顺序绑定params。
$query=$con->prepare("SELECT username, code FROM customer_detail WHERE username = ?");
$query->bind_param('s', $username);
$query->execute();
$query->bind_result($checkusername, $checkcode);
$query->fetch();
$query1=$con->prepare("UPDATE customer_detail SET code=?, confirmcode=? WHERE username = ?");
$query1->bind_param('sss', $updatecode, $confirmcode, $username);
$query1->execute();
答案 1 :(得分:1)
问题是MySQLi不能同时运行多个查询,因为它使用了ubuffered查询。在运行另一个语句之前,您需要关闭第一个语句。在who
之后添加以下行。
$query->fetch();
这就是说,您的第一个查询没有防范SQL注入,因为您直接在查询中使用该变量。为查询添加适当的占位符,最终代码将如下所示
$query->close();
答案 2 :(得分:-1)
你试过吗?
$query1->bind_param('iis', $updatecode, $confirmcode, $username);