7

您如何编写准备好的更新语句?参考: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);
    }

错误:

Prep 语句失败:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在 'description = ? 哪里 uid = ?在第 1 行编辑的行。

4

3 回答 3

16

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

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

当 MySQL 报告错误时,例如检查手册以了解在 'something 附近使用的语法,最常查看紧接在'something之前的字符,因为那是您的错误发生的地方。

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

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

$stmt->bind_param('sss', $title, $desc, $uid2);
于 2012-05-16T17:16:12.523 回答
2

您可能需要添加逗号:

$stmt = $mysqli->prepare("UPDATE tblFacilityHrs SET title = ?, description = ? WHERE uid = ?"
于 2012-05-16T17:17:30.353 回答
1

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

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

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

编辑:从头开始,在定义变量之前或之后是否绑定参数似乎没有区别(您每天都会学到新东西!),但就像迈克尔说的那样,从逻辑上讲,定义它们是有意义的第一的。

于 2012-05-16T17:18:01.023 回答