PHP:PDO 抛出 SQL 绑定参数的语法错误
PHP: PDO throws SQL Syntax Error with bound params
我已经阅读了许多与此问题相关的其他问题,但我就是找不到我的错误。这是我的声明:
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
根据我的阅读,当您使用保留字作为列时可能会发生这种情况,但我的情况并非如此(除非我错过了一个但我不这么认为)。 table 和所有列都是正确的。
是否有任何其他原因可能导致此错误?我几乎可以肯定这不是语法错误。几个小时以来我一直在努力解决这个问题,我认为这可能是我遗漏了一件愚蠢的事情。
这是我的 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;
}
这一行:
$stmt = $db->query($sql);
应该是:
$stmt = $db->prepare($sql);
我已经阅读了许多与此问题相关的其他问题,但我就是找不到我的错误。这是我的声明:
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
根据我的阅读,当您使用保留字作为列时可能会发生这种情况,但我的情况并非如此(除非我错过了一个但我不这么认为)。 table 和所有列都是正确的。
是否有任何其他原因可能导致此错误?我几乎可以肯定这不是语法错误。几个小时以来我一直在努力解决这个问题,我认为这可能是我遗漏了一件愚蠢的事情。
这是我的 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;
}
这一行:
$stmt = $db->query($sql);
应该是:
$stmt = $db->prepare($sql);