我的PHP代码有什么问题?

时间:2014-06-28 14:14:59

标签: php mysql

有人能告诉我这段代码有什么不对吗?

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

但我不知道为什么?因为它看起来应该是正确的。

3 个答案:

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