2014-12-06 114 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