RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 681399
Accepted
Александр
Александр
Asked:2020-06-20 16:14:57 +0000 UTC2020-06-20 16:14:57 +0000 UTC 2020-06-20 16:14:57 +0000 UTC

MySQL PHP写入问题

  • 772

在程序中,我得到一个包含arr1000 个值的数组,我想使用 PDO 写入数据库

输出:Warning: Error while sending QUERY packet. PID=8448

foreach ($arr as $v => $k){
    $sql = "INSERT INTO table (value, key) VALUES (:value, :key);
    $data = [
        ":value" => $v;
        ":key"   => $k
    ];
    $db->query($sql,$data);
};

我还尝试拆分 25 和 50 个请求:

$sql = "";
$i = 0;
foreach ($arr as $k => $v) {
    $i++;
    if ($i % 50 == 0){
        $db->query($sql);
        sleep(5);
        $sql = "";
    }
    $sql .= "INSERT INTO table(link,price) VALUES ('" . $k . "','" . $v . "'); ";
}
$db->query($sql);

输出:

Warning: PDOStatement::execute(): MySQL server has gone away in ....\Connection.php on line 53

连接类:

....
public function query(string $sql, array $data = [])
{
    51 set_time_limit(0);
    52 $sth = $this->link->prepare($sql);
    53 $sth->execute($data);
    54 $result = $sth->fetchAll();
    55 if (false === $result) {
        return [];
    }

    return $result;
}

结果,没有任何内容写入数据库。尝试使用较小的值(~70-80)一切正常,帮助解决问题。Openserver MySQL 5.5 PHP7

更新:错误已MySQL server has gone away in ...通过对连接类进行少量添加来解决:

$this->link = new \PDO($dns, $config['***'], $config['***']);
$this->link->query("SET wait_timeout=9999;");

query("SET wait_timeout=9999;");

php
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Daniil
    2020-06-20T17:23:03Z2020-06-20T17:23:03Z

    为了提高性能,您可以使用具有多个 VALUES 的单个 INSERT:

    INSERT INTO table (x,y,z) VALUES(1,2,3),(1,2,3),(1,2,3);
    

    这就是您如何形成与数组中的元素一样多的请求。

    INSERT和VALUES也必须分块!并且您不应向一个 INSERT 添加超过 1024 条记录

    function placeholders($text, $count=0, $separator=","){
        $result = array();
        if($count > 0){
            for($x=0; $x<$count; $x++){
                $result[] = $text;
            }
        }
    
        return implode($separator, $result);
    }
    

    通过@HerbertBalagtas

    foreach($arr as $k){
        $arrValues = array_merge($arrValues, array_values($k));
        $sumParams[] = '('.placeholders('?', sizeof($k)).')';
    }
    

    在 VALUE 的查询中,将问号替换为“?”。

    "INSERT INTO table(link,price) VALUES " . implode(',', $sumParams);
    

    之后将$arrValues代入execute($arrValues)

    • 2

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    Python 3.6 - 安装 MySQL (Windows)

    • 1 个回答
  • Marko Smith

    C++ 编写程序“计算单个岛屿”。填充一个二维数组 12x12 0 和 1

    • 2 个回答
  • Marko Smith

    返回指针的函数

    • 1 个回答
  • Marko Smith

    我使用 django 管理面板添加图像,但它没有显示

    • 1 个回答
  • Marko Smith

    这些条目是什么意思,它们的完整等效项是什么样的

    • 2 个回答
  • Marko Smith

    浏览器仍然缓存文件数据

    • 1 个回答
  • Marko Smith

    在 Excel VBA 中激活工作表的问题

    • 3 个回答
  • Marko Smith

    为什么内置类型中包含复数而小数不包含?

    • 2 个回答
  • Marko Smith

    获得唯一途径

    • 3 个回答
  • Marko Smith

    告诉我一个像幻灯片一样创建滚动的库

    • 1 个回答
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Алексей Шиманский 如何以及通过什么方式来查找 Javascript 代码中的错误? 2020-08-03 00:21:37 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5