MySQLi在PHP中编写了更新语句

时间:2012-05-16 17:13:50

标签: php sql mysqli xss

您如何撰写准备好的更新声明?参考:mysqli::prepare

我尝试按照描述编写它:

  if ($stmt = $mysqli->prepare("UPDATE tblFacilityHrs SET title =? description = ? WHERE uid = ?")){
            $stmt->bind_param('sss', $title, $desc, $uid2);

            //Get params
            $title=$_POST['title'];
            $desc=$_POST['description'];
            $uid2=$_GET['uid'];     

$stmt->execute();
            $stmt->close();
    }
    else {
        //Error
        printf("Prep statment failed: %s\n", $mysqli->error);
    }

错误:

  

准备法规失败:您的SQL语法出错;检查   手册,对应右边的MySQL服务器版本   在'description =附近使用的语法?在哪里uid =?'在第1行编辑   行。

3 个答案:

答案 0 :(得分:15)

您只是在设置列之间缺少逗号:

UPDATE tblFacilityHrs SET title = ?, description = ? WHERE uid = ?
                                ^^^^^^

当MySQL报告错误之类的错误时,请查看手册以查看“某事附近使用的语法”,最常查看'某事之前的字符,因为是你的错误发生的地方。

注意:您可能需要在设置输入变量之后而不是之前调用bind_param()。我不记得MySQLi如何解析它们以及它们何时被绑定,但从逻辑上讲,在代码中首先设置它们然后绑定更有意义。

//Get params
$title=$_POST['title'];
$desc=$_POST['description'];
$uid2=$_GET['uid'];   

$stmt->bind_param('sss', $title, $desc, $uid2);

答案 1 :(得分:2)

您可能需要添加逗号:

$stmt = $mysqli->prepare("UPDATE tblFacilityHrs SET title = ?, description = ? WHERE uid = ?"

答案 2 :(得分:1)

在将参数分配给变量之前绑定参数:

$title=$_POST['title'];
$desc=$_POST['description'];
$uid2=$_GET['uid']; 

$stmt->bind_param('sss', $title, $desc, $uid2);

编辑:从头开始,在你定义变量之前或之后(无论你每天都学到新的东西),参数是否被绑定似乎没有区别,但是迈克尔说,从逻辑上讲,首先定义它们是有意义的。