站長資訊網
        最全最豐富的資訊網站

        php實現向mysql批量插入數據

        php實現向mysql批量插入數據

        現在有這樣一個表,我們想往這個表里面插入大量數據該如何實現呢?

        CREATE TABLE IF NOT EXISTS `user_info` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主鍵', `name` varchar(255) NOT NULL default '' COMMENT '姓名', `age` int(11) NOT NULL default '0' COMMENT '年齡', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用戶信息表';

        批量插入

        方法一、使用for循環插入

        在往mysql插入少量數據的時候,我們一般用for循環

        (相關視頻教程分享:php視頻教程)

        $arr = [  [ 'name' => 'testname1', 'age' => 18, ], [ 'name' => 'testname2', 'age' => 19, ], [ 'name' => 'testname3', 'age' => 18, ], ];  $servername = "localhost"; $port = 3306; $username = "username"; $password = "password"; $dbname = "mytestdb";  // 創建連接 $conn = new mysqli($servername, $username, $password, $dbname, $port);  // 檢測連接 if ($conn->connect_error) { die("connect failed: " . $conn->connect_error); }   $costBegin = microtime(true);  foreach($arr as $item) { $sql = sprintf("INSERT INTO user_info (name, age) VALUES ( '%s', %d);", $item['name'], (int)$item['age']);  if ($conn->query($sql) === TRUE) { echo "insert success"; } else { echo "Error: " . $sql . "<br>" . $conn->error; } }  $costEnd = microtime(true); $cost = round($costEnd - $costBegin, 3); var_dump($cost);  $conn->close();

        假如說要批量插入大量數據,如果還用for循環的辦法插入是沒有問題的,只是時間會比較長。對比一下插入少量數據與插入大量數據,使用上面的for循環插入耗費的時間:條數時間(單位:秒)

        php實現向mysql批量插入數據

        方法二、使用insert語句合并插入

        mysql里面是可以使用insert語句進行合并插入的,比如

        INSERT INTO user_info (name, age) VALUES ('name1', 18), ('name2', 19);表示一次插入兩條數據  $arr = [  [ 'name' => 'testname1', 'age' => 18, ], [ 'name' => 'testname2', 'age' => 19, ], [ 'name' => 'testname3', 'age' => 18, ], // 此處省略 …… …… ];  $servername = "localhost"; $port = 3306; $username = "username"; $password = "password"; $dbname = "mytestdb";  // 創建連接 $conn = new mysqli($servername, $username, $password, $dbname, $port);  // 檢測連接 if ($conn->connect_error) { die("connect failed: " . $conn->connect_error); }   $costBegin = microtime(true);  if (!empty($arr)) { $sql = sprintf("INSERT INTO user_info (name, age) VALUES ");  foreach($arr as $item) { $itemStr = '( '; $itemStr .= sprintf("'%s', %d", $item['name'], (int)$item['age']); $itemStr .= '),'; $sql .= $itemStr; }  // 去除最后一個逗號,并且加上結束分號 $sql = rtrim($sql, ','); $sql .= ';';  if ($conn->query($sql) === TRUE) { } else { echo "Error: " . $sql . "<br>" . $conn->error; } }  $costEnd = microtime(true); $cost = round($costEnd - $costBegin, 3); var_dump($cost);  $conn->close();

        下面看一下少量數據與大量數據的時間對比。從總體時間上,可以看出insert合并插入比剛才for循環插入節約了很多時間,效果很明顯條數時間(單位:秒)

        php實現向mysql批量插入數據

        如果你覺得數組太大,想要減少sql錯誤的風險,也可以使用array_chunk將數組切成指定大小的塊,然后對每個塊進行insert合并插入。

        相關文章教程推薦:php教程

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 四虎国产精品永免费| 亚洲精品无码专区久久久| 亚洲精品美女久久久久99小说| 国产亚洲精品观看91在线| 亚洲精品tv久久久久久久久久| 99精品国产一区二区| 国产人妖乱国产精品人妖| 免费精品视频在线| 91精品视频观看| freesexvideos精品老师毛多| 亚洲欧洲精品无码AV| 国内精品久久久久影院优| 日韩精品视频一区二区三区| 久久久精品波多野结衣| 国产农村妇女毛片精品久久| 国产精品国产三级在线高清观看| 青草国产精品视频。| 国产精品高清一区二区三区 | 国产成人精品高清在线观看99| 国模和精品嫩模私拍视频| 国产精品99久久精品| 欧美精品一区二区三区免费观看| 国产网红主播无码精品| 国产精品单位女同事在线| 亚洲精品无码MV在线观看| 蜜芽亚洲av无码精品色午夜| 久久精品国产精品亚洲人人| 久久精品国产亚洲av影院| 国产高清精品在线| 国产成人精品免费大全| 蜜臀AV无码国产精品色午夜麻豆| 黑巨人与欧美精品一区| 国产亚洲午夜高清国产拍精品| 国产成人精品久久综合| 欧美精品videosse精子| 久久久国产精品网站| 欧美成人精品第一区二区三区| 99re热视频这里只精品| 亚洲人午夜射精精品日韩| 久久国产精品国产自线拍免费| 亚洲精品午夜国产VA久久成人|