2014-06-28 111 views
-5

任何人都可以告訴我這段代碼有什麼問題嗎?我的php代碼有什麼問題?

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

其中

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

'$ sql'你想運行的'update'或'delete'? 'delete'是變量中唯一的一個。 –

+0

錯誤消息告訴你想要錯誤。看看你的查詢 - 怎麼可能??(參數佔位符)在那裏?你傳遞給'bind_parm'的參數有多少? –

+0

好吧,3!= 2.即使你把代碼複製到某個地方,你也應該試着理解它的作用。 IHMO,很明顯,你只是期望它能夠工作。 –

回答

0

首先,您需要刪除行DELETE,這只是覆蓋$sql的第一個定義。

然後,您應該將$bool替換爲UPDATE中的?

最後,您應該按照參數在查詢中出現的順序將參數傳遞給bind_param,所以$bool, $lat, $lng

1

你的SQL語句的結束是:

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

其中只有2個佔位符,和你傳遞4個值bind_param()。

+0

哦,我已經刪除了刪除語句。還是一樣的錯誤。 :( – dan

1

替換這個由

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