2014-12-06 117 views
2

當我執行我的代碼時出現此錯誤。 我知道這已經在這裏討論過好幾次了,但是我無法通過閱讀那裏提供的解決方案來解決我的問題。PDO錯誤:一般錯誤:2031

這是錯誤我得到: 致命錯誤:未捕獲的異常 'PDOException' 有消息「SQLSTATE [HY000]:常規錯誤:2031

這是我的代碼:

function insertMarker(){ 

    $lat = $_POST['lat']; 
    $long = $_POST['long']; 
    $street = $_POST['street']; 
    $city = $_POST['city']; 
    $zip = $_POST['zip']; 

    echo ("$lat, $long, $street, $city, $zip"); 
    global $dbconnect; 
    $query = $dbconnect->query("INSERT INTO address (latitude, longitude, street, city, zip) VALUES (?,?,?,?,?)"); 
     $query->bindParam(1, $lat); 
     $query->bindParam(2, $long); 
     $query->bindParam(3, $street); 
     $query->bindParam(4, $city); 
     $query->bindParam(5, $zip); 
     $query->execute(); 

     //$query->execute(array(":lat"=>$lat, ":long"=>$long,":street"=>$street,":city"=>$city,":zip"=>$zip)); 
} 
+3

如果'dbconnect'是'PDO'的一個實例,那麼查詢都會創建一個[prepared語句,然後一次執行它](http://php.net/manual/en/pdo .query.php)。所以它沒有得到最初綁定的參數。使用['PDO :: prepare'](http://php.net/manual/en/pdo.prepare.php)而不是'PDO :: query'。 – prodigitalson 2014-12-07 00:10:26

+2

@prodigitalson謝謝你! PDO ::準備是解決方案! – dan 2014-12-07 00:15:23

回答

0

嘗試

function insertMarker(){ 
    $lat = $_POST['lat']; 
    $long = $_POST['long']; 
    $street = $_POST['street']; 
    $city = $_POST['city']; 
    $zip = $_POST['zip']; 

    echo ("$lat, $long, $street, $city, $zip"); 
    global $dbconnect; 
    $query = $dbconnect->prepare("INSERT INTO address (latitude, longitude, street, city, zip) VALUES (?,?,?,?,?)"); 
    $query->bindParam(1, $lat); 
    $query->bindParam(2, $long); 
    $query->bindParam(3, $street); 
    $query->bindParam(4, $city); 
    $query->bindParam(5, $zip); 

    $query->execute(array(":lat"=>$lat, ":long"=>$long,":street"=>$street,":city"=>$city,":zip"=>$zip)); 

}

+0

你不應該使用'bindParam',然後也使用參數作爲參數來執行,你應該使用1或其他。 ['execute'中的參數優先於綁定了'bindParam'的參數,如果存在差異,可能會導致未綁定的參數](http://stackoverflow.com/a/17274928/215966)。 – prodigitalson 2014-12-07 01:18:53