来自多维数组的PHP PDO批量插入无法插入MySQL

AdRock

我有一个像这样的数组,其中包含很多行,我需要使用PDO将其插入到MySQL数据库中

array(3067) {
  [0]=>
  array(2) {
    ["order"]=>
    string(7) "2854811"
    ["consignment"]=>
    string(0) ""
  }
  [1]=>
  array(2) {
    ["blah"]=>
    string(7) "2854811"
    ["whatever"]=>
    string(2) "someval"
  }
  [4]=>
  array(2) {
    ["blah"]=>
    string(7) "2864412"
    ["whatever"]=>
    string(0) ""
  }

我已经尝试过对此处提出的建议进行各种组合,但是每个建议都会收到不同的错误消息

PHP PDO使用占位符插入批处理多行

PDO MySQL:在一个查询中插入多行

我试过了

$db->beginTransaction();

$stmt = $db->prepare("INSERT INTO mytable (column1, column2) VALUES (:blah, :whatever)");

foreach($test as $insertRow){

    // now loop through each inner array to match binded values
    foreach($insertRow as $column => $value){
        $stmt->bindParam(":{$column}", $value);
        $stmt->execute();
    }
}

$db->commit();

但我收到此错误信息

消息为“ SQLSTATE [HY093]”的未捕获异常“ PDOException”:无效的参数编号:绑定变量的数量与令牌的数量不匹配

而且我也尝试过

$sql = 'INSERT INTO mytable (blah, whatever) VALUES ';
$insertQuery = array();
$insertData = array();
$n = 0;
foreach ($input as $row) {
    $insertQuery[] = '(:blah' . $n . ', :whatever' . $n . ')';
    $insertData['blah' . $n] = $row['blah'];
    $insertData['whatever' . $n] = $row['whatever'];
    $n++;
}

if (!empty($insertQuery)) {
    $sql .= implode(', ', $insertQuery);
    $stmt = $db->prepare($sql);
    $stmt->execute($insertData);
}

但我收到此错误消息,因为“ blah”的每个长度都相同,这没有任何意义

消息“ SQLSTATE [22001]”的未捕获异常“ PDOException”:字符串数据,右截断:1406行1625的列“ order_number”的数据太长

我怎样才能将数组插入数据库?如果我必须执行很多次或者只要能插入一次,我就不会太挑剔。

编辑

我想做的是在一个文本文件中读取并将其插入一个工作正常的数组中,所以我只剩下一个具有约3000行的关联数组,它们每个都包含一个名为“ blah”和“ whatever”的字段。

获取数组后,需要将其插入到MySQL数据库中

CREATE TABLE IF NOT EXISTS `tracker` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `blah` varchar(8) NOT NULL,
  `whatever` varchar(25) NOT NULL,
  `input_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB

我应该从数组中插入大约3000行。

我希望这是有道理的。如果没有,我会再添加一些

杰里米·哈里斯(Jeremy Harris)

我相信您在此示例中几乎可以做到:

$db->beginTransaction();

$stmt = $db->prepare("INSERT INTO mytable (column1, column2) VALUES (:blah, :whatever)");

foreach($test as $insertRow){

   // now loop through each inner array to match binded values
   foreach($insertRow as $column => $value){
      $stmt->bindParam(":{$column}", $value);
      $stmt->execute();
   }
}

$db->commit();

您遇到的问题是execute()在绑定适当数量的参数之前正在调用相反,您需要首先绑定所有参数,然后调用execute()

$db->beginTransaction();

$stmt = $db->prepare("INSERT INTO mytable (column1, column2) VALUES (:blah, :whatever)");

foreach($test as $insertRow){

   // now loop through each inner array to match binded values
   foreach($insertRow as $column => $value){
      $stmt->bindParam(":{$column}", $value);
   }

}

// NOW DO EXECUTE
$stmt->execute();

$db->commit();

编辑

根据您的评论,很难准确说明您要完成的工作,但是如果您只收到一条记录,那么正是由于Gerald提出的问题,这些都是单独的查询,可以一次全部处理。看一下这个修订:

// Start Transaction
$db->beginTransaction();

// Insert each record
foreach($test as $insertRow){

   // Prepare statement
   $stmt = $db->prepare("INSERT INTO mytable (column1, column2) VALUES (:blah, :whatever)");

   // now loop through each inner array to match binded values
   foreach($insertRow as $column => $value){
      $stmt->bindValue(":{$column}", $value);
   }

   // Execute statement to add to transaction
   $stmt->execute();

   // Clear statement for next record (not necessary, but good practice)
   $stmt = null;
}

// Commit all inserts
$db->commit();

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

来自多维数组的PHP PDO批量插入无法插入MySQL

来自分类Dev

来自多维数组的PHP动态表

来自分类Dev

来自多维数组的 PHP Echo

来自分类Dev

PHP / MySQL无法插入

来自分类Dev

PHP / MySQL无法插入

来自分类Dev

批量数据插入php mysql速度

来自分类Dev

使用PHP向mysql插入多维数组

来自分类Dev

PHP PDO插入批量记录或更新(如果存在)

来自分类Dev

使用MySQL和PDO插入INTO数组

来自分类Dev

在PHP中将多维数组插入多维json

来自分类Dev

在PHP中将多维数组插入多维json

来自分类Dev

PHP:多维数组插入故障

来自分类Dev

php-mysql-pdo:插入后准备执行后无法执行

来自分类Dev

从php执行时,mssql批量插入无法正常工作

来自分类Dev

带有快速数组参数的节点mysql批量插入

来自分类Dev

最快批量插入javascript数组

来自分类Dev

最快批量插入javascript数组

来自分类Dev

PHP数组的MySQL插入

来自分类Dev

将值插入PHP多维数组

来自分类Dev

在php的关联多维数组中插入键值对

来自分类Dev

在PHP的多维数组中插入值

来自分类Dev

将数据插入php中的多维数组

来自分类Dev

PHP在csv中插入多维数组值

来自分类Dev

来自多维数组的mongodb pull元素

来自分类Dev

无法从MySQL中的帖子数组插入数据

来自分类Dev

PDO:使用增量键在MySQL中插入数组

来自分类Dev

PDO:使用增量键在MySQL中插入数组

来自分类Dev

在PHP PDO MYSQL中插入多行的最佳方法是什么?

来自分类Dev

插入使用相同的行(相同的主键)mysql php pdo