我的php代码有什么问题?

我的php代码有什么问题?,php,mysql,Php,Mysql,有人能告诉我这个密码有什么问题吗 protected function update() { if(@$_POST['lat'] == "" && @$_POST['lng'] == "" && @$_POST['bool'] == "") return array("message"=>"lat, lng is missing"); $lat =

有人能告诉我这个密码有什么问题吗

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

但我不知道为什么?因为看起来这句话应该是对的

您的SQL语句最终是:

$sql = "DELETE FROM markers WHERE lat=? AND lng=?";

它只有2个占位符,您要传递4个值来绑定_param()。

首先,您需要删除带有
DELETE
的行,这只是覆盖
$sql
的第一个定义

然后,您应该在
更新中用
替换
$bool

最后,您应该按照参数在查询中出现的顺序将参数传递给bind_param,因此
$bool,$lat,$lng

替换此参数

  $stmt->bind_param("sss",$lat,$lng,$bool);


您想运行哪个
$sql
更新
还是
删除
delete
是变量中唯一的一个。错误消息告诉您想要的是错误的。看看您的查询--
(参数占位符)是如何存在的?您要将多少个参数传递给
bind\u parm
?嗯,3!=2.即使您将代码复制到了某个地方,也应该尝试理解它的作用。IHMO,很明显,您只是希望它能够工作。“我的php代码有什么问题?”-这总是一开始就很好。哦,我已经删除了Delete语句。还是同样的错误(
  $stmt->bind_param("ss",$lat,$lng);