欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

php往mysql中批量插入數(shù)據(jù)實(shí)例教程

 更新時(shí)間:2018年12月12日 10:15:01   作者:nemo  
這篇文章主要給大家介紹了關(guān)于php往mysql中批量插入數(shù)據(jù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧

前言

假如說我有這樣一個(gè)表,我想往這個(gè)表里面插入大量數(shù)據(jù)

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循環(huán)插入

在往mysql插入少量數(shù)據(jù)的時(shí)候,我們一般用for循環(huán)

$arr = [	
	[
		'name' => 'testname1',
		'age' => 18,
	],
	[
		'name' => 'testname2',
		'age' => 19,
	],
	[
		'name' => 'testname3',
		'age' => 18,
	],
];

$servername = "localhost";
$port = 3306;
$username = "username";
$password = "password";
$dbname = "mytestdb";

// 創(chuàng)建連接
$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();

假如說要批量插入大量數(shù)據(jù),如果還用for循環(huán)的辦法插入是沒有問題的,只是時(shí)間會(huì)比較長。

對(duì)比一下插入少量數(shù)據(jù)與插入大量數(shù)據(jù),使用上面的for循環(huán)插入耗費(fèi)的時(shí)間:

條數(shù) 時(shí)間 (單位:秒)
10 0.011
1000 0.585
10000 5.733
100000 60.587

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

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

INSERT INTO user_info (name, age) VALUES ('name1', 18), ('name2', 19);表示一次插入兩條數(shù)據(jù)

下面看示例代碼,看看不同數(shù)據(jù)條數(shù)下

$arr = [	
	[
		'name' => 'testname1',
		'age' => 18,
	],
	[
		'name' => 'testname2',
		'age' => 19,
	],
	[
		'name' => 'testname3',
		'age' => 18,
	],
	// 此處省略
	……
	……
];

$servername = "localhost";
$port = 3306;
$username = "username";
$password = "password";
$dbname = "mytestdb";

// 創(chuàng)建連接
$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;
  }

 // 去除最后一個(gè)逗號(hào),并且加上結(jié)束分號(hào)
 $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();

下面看一下少量數(shù)據(jù)與大量數(shù)據(jù)的時(shí)間對(duì)比。從總體時(shí)間上,可以看出insert合并插入比剛才for循環(huán)插入節(jié)約了很多時(shí)間

條數(shù) 時(shí)間 (單位:秒)
10 0.006
1000 0.025
10000 0.131
100000 1.23

當(dāng)然,如果你覺得數(shù)組太大,想要減少sql錯(cuò)誤的風(fēng)險(xiǎn),也可以使用array_chunk將數(shù)組切成指定大小的塊,然后對(duì)每個(gè)塊進(jìn)行insert合并插入

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • ThinkPHP自動(dòng)驗(yàn)證失敗的解決方法

    ThinkPHP自動(dòng)驗(yàn)證失敗的解決方法

    引用ThinkPHP2.0開發(fā)手冊(cè):ThinkPHP手冊(cè)類型檢查只是針對(duì)數(shù)據(jù)庫級(jí)別的驗(yàn)證,所以系統(tǒng)還內(nèi)置了數(shù)據(jù)對(duì)象的自動(dòng)驗(yàn)證功能來完成模型的業(yè)務(wù)規(guī)則驗(yàn)證,而大多數(shù)情況下面,數(shù)據(jù)對(duì)象是由表單提交的$_POST數(shù)據(jù)創(chuàng)建。
    2011-06-06
  • PHP中的cookie不用刷新就生效的方法

    PHP中的cookie不用刷新就生效的方法

    PHP的COOKIE在設(shè)定之后,必須要刷新一下網(wǎng)頁才能生效,至于是什么原因,有人說是為了安全考慮,至于你信不信,反正我信了
    2012-02-02
  • 控制PHP的輸出:緩存并壓縮動(dòng)態(tài)頁面

    控制PHP的輸出:緩存并壓縮動(dòng)態(tài)頁面

    PHP4中最令人滿意的事是——你可以讓PHP緩存所有由腳本生成的輸出,在你決定把它們送出之前,瀏覽器方是不會(huì)收到任何內(nèi)容的
    2013-06-06
  • php實(shí)現(xiàn)xml數(shù)據(jù)轉(zhuǎn)數(shù)組兩種方式

    php實(shí)現(xiàn)xml數(shù)據(jù)轉(zhuǎn)數(shù)組兩種方式

    這篇文章主要為大家詳細(xì)介紹了php實(shí)現(xiàn)xml數(shù)據(jù)轉(zhuǎn)數(shù)組兩種方式的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以參考下
    2023-11-11
  • PHP 時(shí)間日期操作實(shí)戰(zhàn)

    PHP 時(shí)間日期操作實(shí)戰(zhàn)

    PHP 時(shí)間日期操作實(shí)戰(zhàn),學(xué)習(xí)php的朋友可以參考下。
    2011-08-08
  • PHP EOT定界符的使用詳解

    PHP EOT定界符的使用詳解

    定界符 另一種給字符串定界的方法使用定界符語法(“<<<”)。應(yīng)該在 <<< 之后提供一個(gè)標(biāo)識(shí)符,然后是字符串,然后是同樣的標(biāo)識(shí)符結(jié)束字符串。
    2008-09-09
  • 一家之言的經(jīng)驗(yàn)之談php+mysql扎實(shí)個(gè)人基本功

    一家之言的經(jīng)驗(yàn)之談php+mysql扎實(shí)個(gè)人基本功

    在學(xué)習(xí)php的過程中,我們開始就需要注意的問題
    2008-03-03
  • php正則刪除img標(biāo)簽的方法示例

    php正則刪除img標(biāo)簽的方法示例

    這篇文章主要介紹了php正則刪除img標(biāo)簽的方法,結(jié)合具體實(shí)例形式分析了php針對(duì)img標(biāo)簽正則匹配相關(guān)操作技巧,需要的朋友可以參考下
    2017-05-05
  • Thinkphp6 配置并使用redis圖文詳解

    Thinkphp6 配置并使用redis圖文詳解

    這篇文章主要介紹了Thinkphp6 配置并使用redis的方法,結(jié)合實(shí)例形式詳細(xì)分析了Redis的安裝、配置以及thinkphp6操作Redis的基本技巧,需要的朋友可以參考下
    2023-06-06
  • 初識(shí)php MVC

    初識(shí)php MVC

    MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫,一種軟件設(shè)計(jì)典范,用一種業(yè)務(wù)邏輯、數(shù)據(jù)、界面顯示分離的方法組織代碼,將業(yè)務(wù)邏輯聚集到一個(gè)部件里面,在改進(jìn)和個(gè)性化定制界面及用戶交互的同時(shí),不需要重新編寫業(yè)務(wù)邏輯。
    2014-09-09

最新評(píng)論