有人能告诉我这段代码有什么不对吗?
protected function update() {
if(@$_POST['lat'] == "" && @$_POST['lng'] == "" && @$_POST['bool'] == "")
return array("message"=>"lat, lng is missing");
$lat = $_POST['lat'];
$lng = $_POST['lng'];
$bool = $_POST['bool'];
$sql = "UPDATE markers SET bool='$bool' WHERE lat=? AND lng=?";
$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
$stmt = $mysqli->prepare($sql);
$stmt->bind_param("sss",$lat,$lng,$bool);
$stmt->execute();
$stmt->close();
$mysqli->close();
}
我收到此错误:
mysqli_stmt::bind_param():
Number of variables doesn't match number in prepared statement?
in line 96.($stmt->bind_param("sss",$lat,$lng,$bool);
但我不知道为什么?因为它看起来应该是正确的。
答案 0 :(得分:1)
您的SQL语句最终成为:
$sql = "DELETE FROM markers WHERE lat=? AND lng=?";
只有2个占位符,并且您将4个值传递给bind_param()。
答案 1 :(得分:1)
替换此
$stmt->bind_param("sss",$lat,$lng,$bool);
通过
$stmt->bind_param("ss",$lat,$lng);
答案 2 :(得分:0)
首先,您需要删除DELETE
的行,这就是覆盖$sql
的第一个定义。
然后,您应该将$bool
替换为?
中的UPDATE
。
最后,您应该以与查询中显示的顺序相同的顺序将参数传递给bind_param,因此$bool, $lat, $lng
。