使用bind param更新sql

时间:2017-02-03 18:48:18

标签: php sql

我有一个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();

3 个答案:

答案 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);