# demo
<?php
ini_set("memory_limit", "-1");
$dsn = "mysql:host=127.0.0.1;port=3308;dbname=test;charset=utf8mb4";
$pdo = new PDO($dsn, 'root', '123456');
$fp = fopen("./export2.csv","w");
fputcsv($fp, ['ID','编号','用户名', '性别','邮箱', 'QQ','地址','手机号']);
// 先查询总数
$sql = "SELECT count(1) as counts FROM `user`";
$pdostatement = $pdo->query($sql);
$counts = $pdostatement->fetch(PDO::FETCH_ASSOC);
var_dump($counts['counts']);
$nums = 10000; // 每次导出数量
$step = ceil($counts["counts"]/$nums); // 循环次数
for($i = 0; $i < $step; $i++) {
$start = $i * $nums;
$sql = "SELECT id,user_sn,username,sex,email,qq,address,phone FROM `user` ORDER BY `id` LIMIT {$start},{$nums}";
$pdostatement = $pdo->query($sql);
$result = $pdostatement->fetchAll(PDO::FETCH_ASSOC);
foreach ($result as $item) {
fputcsv($fp,$item);
}
//每1万条数据就刷新缓冲区
ob_flush();
flush();
}
?>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36