如何在pdo批处理插入中捕获失败

问题描述 投票:0回答:1

我有这段代码可将数据从CSV文件插入数据库。由于CSV可能有成千上万的记录,因此我尝试按以下方式实现批量插入。

$this->_connection->beginTransaction();
$sql = "INSERT INTO dbtable (col1,col2) VALUES (:value1,:value2)";
$stmt = $this->_connection->prepare($sql);

foreach ($requestArray['csv'] as $data) {
    $stmt->bindParam(':value1', $data['csvCol1']);
    $stmt->bindParam(':value2', $data['csvCol2']);
    $stmt->execute();
}
$this->_connection->commit();

变量$ requestArray ['csv'],保存CSV发布请求的所有记录。该代码似乎可以正常工作。但是,我正在尝试改进它,因为我想让用户知道在数据库中插入了多少条记录失败,以及是否有可能显示哪些记录失败。假定重复的密钥,或无效的数据,或通常可能由此过程引起的任何错误。

mysql pdo mysql-error-1064 batch-insert
1个回答
0
投票

[PDOStatement::execute()将在失败时返回false

$this->_connection->beginTransaction();
$sql = "INSERT INTO dbtable (col1,col2) VALUES (:value1,:value2)";
$stmt = $this->_connection->prepare($sql);

foreach ($requestArray['csv'] as $data) {
    $stmt->bindParam(':value1', $data['csvCol1']);
    $stmt->bindParam(':value2', $data['csvCol2']);
    if (!$stmt->execute()) {
      // error processing goes here.
    }
}
$this->_connection->commit();
© www.soinside.com 2019 - 2024. All rights reserved.