PHP:PDO使用绑定参数抛出SQL语法错误

时间:2015-01-30 15:48:37

标签: php pdo

我已经阅读了许多与此问题相关的其他问题,但我无法找到我的错误。这是我的发言:

INSERT INTO ventas (`bodegaid`, `clienteid`, `usuarioid`, `tipodepagoid`, `fecha`, `numfact`, `serie`)
VALUES (:bodegaid, :clienteid, :usuarioid, :tipodepagoid, :fecha, :numfact, :serie)

然后我收到以下错误

SQLSTATE[42000]: Syntax error or access violation: 1064
You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax
to use near ':bodegaid, :clienteid, :usuarioid, :tipodepagoid,
:fecha, :numfact, :serie)' at line 1

从我读过的内容来看,这可能发生在你使用保留字作为专栏时,但这不是我的情况(除非我错过了一个,但我不这么认为)。表格和所有列都是正确的。

是否还有其他可能导致此错误的原因?我几乎可以肯定这不是语法错误。我一直试图解决这个问题几个小时,我认为这可能是我错过的一个愚蠢的事情。

这是我的PHP函数,我从POST参数中获取$ new_item。我还检查过它们是从表格中正确发送的:

function doVenta(){
    $app = \Slim\Slim::getInstance();
    $new_item = $app->request->post();
    $sql = "INSERT INTO ventas (`bodegaid`, `clienteid`, `usuarioid`, `tipodepagoid`, `fecha`, `numfact`, `serie`)
            VALUES (:bodegaid, :clienteid, :usuarioid, :tipodepagoid, :fecha, :numfact, :serie)";

    try {
        $db = getConnection();
        $db->beginTransaction();
        $stmt = $db->query($sql); 

        $columns = getColumns('ventas');

        foreach($new_item as $col => $val){
            $paramN = ":".$col;
            $stmt->bindValue($paramN, $val);
        }
        $stmt->execute();
        $db->lastInsertId();

        $db->commit();
    } catch(PDOException $e){
        echo errorMsg($e->getMessage());
    }

    //echo json_encode($new_item);
}

这是连接方法,我使用的是PDO:

function getConnection() {
    $dbhost="localhost";
    $dbuser="root";
    $dbpass="root";
    $dbname="inventarios";

    $dbh = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass);  
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    return $dbh;
}

1 个答案:

答案 0 :(得分:3)

这一行:

$stmt = $db->query($sql);

应该是:

$stmt = $db->prepare($sql);
相关问题