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

2024-01-28

你好,我正在制作一个类,用于在 pdo 中进行多次插入。

是这样的

INSERT INTO $table (key1,key2,key3,etc) VALUE (value1,value2,value3,etc), (value1,value2,value3,etc), (value1,value2,value3,etc)

搜索后我发现我必须构建类似的东西

INSERT INTO $table (key1,key2,key3,etc) VALUE (:key1,:key2,:key3,etc), (:key1,:key2,:key3,etc), (:key1,:key2,:key3,etc)

然后用这个执行$this->execute($data); where $data is

 0 => 
    array
      'key1' => 'value1'
      'key2' => 'value2'
      'key3' => 'value3'
 1 => 
    array
      'key1' => 'value1'
      'key2' => 'value2'
      'key3' => 'value3'

 etc

问题是我仍然收到错误Array to string conversion on $insert->execute($data);我该如何解决这个问题?

这是我正在制作的片段。

public function multipleInsert($table, $data = array()) 
{

    # INSERT (name) VALUE (value),(value)
    if (count($data) > 1) 
    {
        $fieldnames = array_keys($data[0]);
        $count_inserts = count(array_values($data));
        $count_values = count(array_values($data[0]));

        # array(????) untill x from first data
        for($i = 0; $i < $count_values; $i++)
        {
            $placeholder[] = '?';
        }

        # array((????),(????),(????)) for query
        for ($i=0; $i < $count_inserts; $i++) 
        { 
            $placeholders[] = '('. implode(',',$placeholder) . ')';
        }

        $query  = 'INSERT INTO '. $table;
        $query .= '(`'. implode('`, `', $fieldnames) .'`)';
        $query .= ' VALUES '. implode(', ', $placeholders);

        $insert = $this->start->prepare($query);

        $i = 1;
        foreach($data as $item) 
        {
            foreach ($item as $key => $value) 
            {
               $insert->bindParam($i++, $item[$key]);
            }
        }

        echo $query;
        $insert->execute();

        $return['status'] = true;
        $return['lastid'] = $this->start->lastInsertId();

        return $return;
    } 
    else 
    {
        die('$data is less then two array, use single insert instead.');
    }
}

避免并发症的一个简单方法是这样的

$stmt = $pdo->prepare('INSERT INTO foo VALUES(:a, :b, :c)');
foreach($data as $item)
{
    $stmt->bindValue(':a', $item[0]);
    $stmt->bindValue(':b', $item[1]);
    $stmt->bindValue(':c', $item[2]);
    $stmt->execute();
}

但是,这会多次执行该语句。因此,最好创建一个长的单个查询来执行此操作。

以下是我们如何做到这一点的示例。

$query = "INSERT INTO foo (key1, key2) VALUES "; //Prequery
$qPart = array_fill(0, count($data), "(?, ?)");
$query .=  implode(",",$qPart);
$stmt = $dbh -> prepare($query); 
$i = 1;
foreach($data as $item) { //bind the values one by one
   $stmt->bindValue($i++, $item['key1']);
   $stmt->bindValue($i++, $item['key2']);
}
$stmt -> execute(); //execute
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PDO MySQL:在一个查询中插入多行 的相关文章

  • 如何转换为在视图上使用 Yii CDataProvider?

    我正在尝试学习 Yii 并查看了 Yii 文档 但仍然没有真正理解 我仍然不知道如何在控制器和视图上使用 CDataProvider 来显示视图上可用的所有博客文章 任何人都可以根据以下内容提供建议或举例 我的 PostController
  • 如何通过 API 平台使用“paramconverter”?

    如何通过 Symfony API 平台实现或使用 paramconverter 我想在路线上使用实体 ID 并立即生成一个对象 准备在控制器中使用 我没有在这个项目上使用注释 路由配置位于 YAML 文件中 resources App Me
  • 需要有关使用 PHP 在 mysql 数据库中插入逗号分隔数据的帮助

    数据库表中已有的演示数据 INSERT INTO csvtbl ID SKU Product Name Model Make Year From Year To VALUES 1 C2AZ 3B584 AR Power Steering P
  • PHP 中的异步数据库/服务调用:Gearman 与 pthreads

    在我们的 LAMP 站点上 我们遇到一些服务必须多次调用数据库才能提取数据的问题 通常在 PHP 中完成此操作的方式 至少我的经验 是串行的 这显然是低效的 我们可以通过使用缓存和聚合一些查询来缓解一些低效率的问题 但在某些情况下我们仍然需
  • 验证数据库匹配中的 $_GET id 是否足够安全?

    我的网站上有 2 个页面 一个是 index php 索引页面列出了数据库中存在的所有帖子 另一个页面是 post php 当单击索引页面上的特定帖子时 帖子页面显示单个帖子 现在我用来列出 index php 上所有帖子的代码是 post
  • 如何在MySQL中查找上周的数据

    我想显示来自 Q1 每个学生只有最后一周 Q2 每个学生只有最后一个月 我怎样才能实现这个目标 一周演示 http sqlfiddle com 2 f1fbb 3 当月演示 http sqlfiddle com 2 f1fbb 4 CREA
  • Kohana_Exception [ 0 ]:需要有效的 cookie salt。请设置 Cookie::$salt

    我正在学习本教程 http kowsercse com 2011 09 04 kohana tutorial beginners http kowsercse com 2011 09 04 kohana tutorial beginners
  • Yii 框架:控制器/操作 url 和参数

    在我的申请中 我有ApiController with actionUsers 所以在 YII 中路径变成api users 现在为了获取某些用户信息 我使用以下路径api users id 10其中 10 是用户 ID id路径的一部分基
  • Blueimp jQuery 文件上传,传递额外的表单数据

    我可以使用一些帮助 我已经设法使 blueimp jQuery 文件上传为我工作 但我仍然绝对是一个新手 我对 jQuery 等知之甚少 所以请尝试将其清晰明了地提供给我尽可能简单 我会尝试具体一点 好的 我想实现的是人们可以上传照片 并为
  • 代码点火器 JSON

    你好 我使用 codeigniter 然后我从控制器中的数据库中回显输出 然后在我的视图文件中执行以下操作 但它没有显示任何内容 S 我的模型文件 function forumList this gt db gt select oversk
  • 基本的 simpleXML 工作示例?

    看起来 PHP 中的 simpleXML 有很多问题 我在 Windows 上运行最新版本的 php 但无法让 simpleXML 的基本示例按照文档中的方式工作 我的 xml 文件是
  • 是否可以使用“WHERE”子句来选择SQL语句中的所有记录?

    晚上好 我很好奇是否可以在 SQL 语句中创建一个 WHERE 子句来显示所有记录 下面一些解释 随机 SQL 语句 Java JSP示例 正常情况 String SqlStatement SELECT FROM table example
  • PHP 5 的 SQLite 编译设置是什么?

    SQLite 3 7 附带了新的预写日志记录 WAL http www sqlite org wal html并且有很多设置可以被配置 http www sqlite org compile html 但是 似乎没有任何方法可以改变任何事情
  • Zend Framework 2 将变量传递给模型

    我目前正在开发一个多语言网站 对于多语言部分 我使用翻译器 poedit 我将所选语言存储在会话中 效果很好 模块 php public function onBootstrap MvcEvent e session new Contain
  • 为 SimpleXMLElements 数组编写 foreach 循环

    我正在使用 PHP 5 中的 XPath 来解析 XML 文档 我遇到的问题是写一个foreach正确显示以下数组 XML 文档示例 值1 值2 xmlfile link to file xml xmlRaw file get conten
  • 学说“没有命名的协会”

    将我添加到无法找出其学说映射出了什么问题的人列表中 我正在模拟国际象棋Game与一对多Halfmoves 有任何想法吗 DDL create table game game id int primary key create table h
  • 更改Docker容器中的mysql密码

    我如何更改 docker 容器中的 root 密码 因为一旦我停止 mysql 服务 容器就会自动停止 我应该停止 mysql 容器并部署一个新容器吗 您可以使用正在运行的容器更改它docker exec session https doc
  • ejabberd 16.06 + mysql 5.5.50,消息历史记录不保存

    我使用ejabberd 16 06 mysql 5 5 50 消息历史记录没有保存 我的 ejabberd yml MySQL server odbc type mysql odbc server freldo odbc port 3306
  • MySQL“选择更新”行为

    根据 MySql 文档 MySql 支持多粒度锁定 MGL case 1 开放航站楼 1 连接到mysql mysql gt start transaction Query OK 0 rows affected 0 00 sec mysql
  • Laravel 集合 .each() + array_push

    需要有关 Laravel 上 each 方法内的 array push 的帮助 我无法在此代码上获取容器数组 imagesData array collect data images gt each function v k use ima

随机推荐

  • 如何在 python 中转义正斜杠,以便 open() 将我的文件视为要写入的文件名,而不是要读取的文件路径?

    让我先说我是不太确定我的代码发生了什么 我对编程相当陌生 我一直在为我的 python CS 课程创建一个单独的最终项目 该项目每天检查我老师的网站 并确定自上次程序运行以来他是否更改了他网站上的任何网页 我现在正在执行的步骤如下 def
  • 如何解决Sonar错误:无法加载组件类org.sonar.scanner.scan.ProjectLock

    我在 netbeans 项目上运行 Sonar 时遇到一些问题 它不起作用 我有以下错误 C Users remy fischer Desktop NetBeansProjects NetBeansProjects BinPacking s
  • Xcode 项目在文档大纲中显示为灰色

    我一直在使用 iCloud 将我正在处理的 Xcode 项目从笔记本电脑 同步 到桌面 不幸的是 它似乎运作得不太好 我今天在台式机上打开了一个昨天在笔记本电脑上工作的项目 If I open the file on the desktop
  • 使用 jQuery 获取 ListBox 中选定项目的数量

    如主题中所述 当用户选择新项目时 如何使用 jQuery 获取 ListBox 中选定项目的计数 我有这些代码 Html ListBoxFor x gt Model StatesID Model States new class chzn
  • 十进制小时变成时间?

    我在数据库中有一个小时字段 例如 1 4 1 5 1 7 我需要将其转换回 HH MM 做到这一点最简单的方法是什么 TimeSpan FromHours http msdn microsoft com en us library syst
  • HttpSessionListener 不起作用

    我已经实现了 HttpSessionListiner 但它不起作用 用调试器检查 输入 servlet 后创建新会话 登录后 JSESSION ID 发生变化 但 session getCreateTime 保持不变 会话保持不变 使用注释
  • Erlang集群

    我正在尝试使用 Erlang 作为将所有组件粘合在一起的粘合剂来实现一个集群 我喜欢它创建一个完全连接的节点图的想法 但在在线阅读不同的文章后 似乎这不能很好地扩展 最多有 50 100 个节点 OTP 的开发者是否故意施加此限制 我确实知
  • 调用未定义函数curl_file_create() [文件处理]

    我正在尝试使用curl上传文件 在PHP文档中它说 要发布文件 请在文件名前面添加 并使用完整路径 可以通过在文件名后面加上格式为 type mimetype 的类型来显式指定文件类型 此参数可以作为 urlencoded 字符串 如 pa
  • FBSDK 登录错误代码:Objective-C 中的 308

    我不断得到 Error Domain com facebook sdk login Code 308 操作无法 完成 com facebook sdk login 错误 308 尝试从我的设备登录 Facebook 时 我的代码可以在模拟器
  • WebKit 及其遗留前缀

    我正在尝试编译特性前缀为 apple and khtml WebKit 支持哪些and since 哪个版本它们最终被放弃或引入 他们受到什么限制 例如 您可以在以下位置找到它们吗 document body style 我猜只有像记者这样
  • 共同好友数量最多的好友

    我想找到我与他们共同好友数量最多的朋友 我尝试使用 FQL 和图形 API 按以下方式执行此操作 获取当前登录用户的好友列表 FQL SELECT uid1 FROM friend WHERE uid2 MY USER ID and uid
  • Cin 无需等待输入?

    对于我正在开发的项目 我需要程序能够接收用户的输入 但是当他们输入某些内容时 程序可以继续循环 For example while true if userInput true cin gt gt input DO SOMETHING 这意
  • 标记数据和未标记数据有什么区别? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 In this http www youtube com watch v qkcFRr7LqAw在 Sebastian Thrum 的视频
  • 我可以在以后的版本中更改 Android 应用程序图标和名称吗?

    这在某种程度上听起来很愚蠢 但我想知道是否可以在后续版本中更改应用程序徽标 图标 和 Android 名称 比如说 今天我在 Android 市场上推送我的应用程序 明天我想更改徽标 图标 我知道我 不应该 这样做 但是可以这样做吗 另外
  • 使用 OpenVPN 创建 VPN

    我在 Android 10 上连接 VPN 时遇到问题 并在 logcat 中收到以下消息 这是权限错误 寻找解决方案 还在 Mainfest 中添加了 android requestLegacyExternalStorage true 但
  • 在 XSLT 中,在使用时计算设置为 name(..) 之类的变量是否正常?

    我的 XML 中有几棵树 想要根据另一棵树的名称来访问其中一棵树 这里被称为tab name它是当前节点的父标签 所以我使用 name 如果我在设置变量的同一位置进行测试 这会给我正确的值 然而 我遇到的问题是 当我引用 tab name
  • 在单个查询中为每个 DISTINCT 记录选择多条记录

    我需要为每个不同的记录选择几行 几乎就像这里问的那样在 SQL Server 2008 中为每个不同 ID 选择前 n 条记录 https stackoverflow com questions 3364224 select first n
  • 我可以使用同一个套接字进行多个连接吗?

    我正在尝试创建一个扫描一系列地址的 python 函数 我启动了一个套接字并将该套接字作为参数传递给连接到它的函数 def scan socket address port c socket connect ex address port
  • 在 React 中使用 setState 更新对象

    是否有可能更新对象的属性setState 就像是 this state jasper name jasper age 28 我努力了 this setState jasper name someOtherName 和这个 this setS
  • PDO MySQL:在一个查询中插入多行

    你好 我正在制作一个类 用于在 pdo 中进行多次插入 是这样的 INSERT INTO table key1 key2 key3 etc VALUE value1 value2 value3 etc value1 value2 value