思路:
成都創(chuàng)新互聯(lián)公司專注于企業(yè)營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、網(wǎng)站重做改版、東平網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5建站、電子商務(wù)商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)營(yíng)銷(xiāo)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為東平等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。
讀取csv文件,每讀取一行數(shù)據(jù),就插入數(shù)據(jù)庫(kù)
示例
文件夾結(jié)構(gòu)
/
file.csv????//csv大文件,這里只模擬三行數(shù)據(jù),不考慮運(yùn)行效率(PS:csv文件格式很簡(jiǎn)單,文件一般較小,解析很快,運(yùn)行效率的瓶頸主要在寫(xiě)入數(shù)據(jù)庫(kù)操作)
index.php????//php文件
file.csv
singi,20
lily,19
daming,23
index.php
/**
*?讀取csv文件,每讀取一行數(shù)據(jù),就插入數(shù)據(jù)庫(kù)
*/
//獲取數(shù)據(jù)庫(kù)實(shí)例
$dsn?=?'mysql:dbname=test;host=127.0.0.1';
$user?=?'root';
$password?=?'';
try?{
$db?=?new?PDO($dsn,?$user,?$password);
}?catch?(PDOException?$e)?{
echo?'Connection?failed:?'?.?$e-getMessage();
}
//讀取file.csv文件
if?(($handle?=?fopen("file.csv",?"r"))?!==?FALSE)?{
while?(($row?=?fgetcsv($handle,?1000,?","))?!==?FALSE)?{
//寫(xiě)入數(shù)據(jù)庫(kù)
$sth?=?$db-prepare('insert?into?test?set?name=:name,age=:age');
$sth-bindParam(':name',$row[0],PDO::PARAM_STR,255);
$sth-bindParam(':age',$row[1],PDO::PARAM_INT);
$sth-execute();
}
fclose($handle);
}
數(shù)據(jù)表
CREATE?TABLE?`test`?(
`id`?INT(10)?UNSIGNED?NOT?NULL?AUTO_INCREMENT,
`name`?VARCHAR(255)?NULL?DEFAULT?''?COLLATE?'utf8mb4_bin',
`age`?INT(10)?NULL?DEFAULT?'0',
PRIMARY?KEY?(`id`)
)
COLLATE='utf8mb4_bin'
ENGINE=InnoDB;
運(yùn)行結(jié)束后,數(shù)據(jù)庫(kù)中會(huì)插入csv中的三行數(shù)據(jù)
連接到一個(gè)?url?地址為localhost?、?端口為?3306?的mysql服務(wù)器上。mysql服務(wù)器的帳號(hào)是"root",密碼是"9999"。mysql?服務(wù)器上有一個(gè)數(shù)據(jù)庫(kù)?ok?,?數(shù)據(jù)庫(kù)里有一個(gè)表?abc。表?abc?一共為兩列,列名分別是?"id"?和?"name"?,將?abc?里的所有數(shù)據(jù)讀出來(lái)。
??
$dbh?=?@mysql_connect("localhost:3306","root","9999");?
/*?定義變量dbh?,?mysql_connect()函數(shù)的意思是連接mysql數(shù)據(jù)庫(kù),?"@"的意思是屏蔽報(bào)錯(cuò)?*/?
if(!$dbh){die("error");}?
/*?die()函數(shù)的意思是將括號(hào)里的字串送到瀏覽器并中斷PHP程式?(Script)。括號(hào)里的參數(shù)為欲送出的字串。?*/?
@mysql_select_db("ok",?$dbh);?
/*?選擇mysql服務(wù)器里的一個(gè)數(shù)據(jù)庫(kù),這里選的數(shù)據(jù)庫(kù)名為?ok?*/?
$q?=?"SELECT?*?FROM?abc";?
/*?定義變量q,?"SELECT?*?FROM?abc"是一個(gè)SQL語(yǔ)句,意思是讀取表abc中的數(shù)據(jù)?*/?
??
br?/?
!--=========?方法一?=========--?
br?/?
??
$rs?=?mysql_query($q,?$dbh);?
/*?定義變量?rs?,函數(shù)mysql_query()的意思是:送出?query?字串供?MySQL?做相關(guān)的處理或者執(zhí)行.由于php是從右往左執(zhí)行的,所以,rs的值是服務(wù)器運(yùn)行mysql_query()函數(shù)后返回的值?*/?
if(!$rs){die("Valid?result!");}?
echo?"table";?
echo?"trtdID/tdtdName/td/tr";?
while($row?=?mysql_fetch_row($rs))?echo?"trtd$row[0]/tdtd$row[1]/td/tr";?
/*?定義量變(數(shù)組)row,并利用while循環(huán),把數(shù)據(jù)一一寫(xiě)出來(lái).??
函數(shù)mysql_fetch_row()的意思是:將查詢結(jié)果$rs單列拆到陣列變數(shù)中.??
$row[0]?和?$row[1]?的位置可以換*/?
echo?"/table";?
??
br?/?
!--=========?方法二?=========--?
br?/?
??
$rs?=?mysql_query($q,?$dbh);?
while($row?=?mysql_fetch_object($rs))?echo?"$row-id?$row-name?br?/";?
/*?id和name可以換位置?*/?
??
br?/?
!--=========?方法三?=========--?
br?/?
??
$rs?=?mysql_query($q,?$dbh);?
while($row?=?mysql_fetch_array($rs))?echo?"$row[id]?$row[name]?br?/";?
/*?id和name可以換位置?*/?
??
!--=========?方法三最快?=========--?
??
@mysql_close($dbh);?
/*?關(guān)閉到mysql數(shù)據(jù)庫(kù)的連接?*/?
?
本文實(shí)例講述了PHP利用pdo_odbc實(shí)現(xiàn)連接數(shù)據(jù)庫(kù)。分享給大家供大家參考,具體如下:
目的:從sql
server數(shù)據(jù)庫(kù)里面把某個(gè)視圖文件調(diào)用出來(lái),以鍵值對(duì)的方式顯示在頁(yè)面上。
利用pdo
odbc來(lái)實(shí)現(xiàn)PHP連接數(shù)據(jù)庫(kù):
在PHP配置文件里面開(kāi)啟pdo_odbc.dll服務(wù)。重啟Apache服務(wù)器。
在ThinkPHP5.1的項(xiàng)目中在模塊里添加config添加規(guī)定好的樣式數(shù)據(jù)庫(kù):
代碼如下:
?php
return
[
//
數(shù)據(jù)庫(kù)類型
'type'
=
'sqlsrv',
//
服務(wù)器地址
'hostname'
=
'localhost',
//
數(shù)據(jù)庫(kù)名
'database'
=
'mysql',
//
用戶名
'username'
=
'sa',
//
密碼
'password'
=
'123456',
//
端口
'hostport'
=
'',
//
連接dsn
'dsn'
=
'odbc:Driver={SQL
Server};Server=localhost;Database=mysql',
//
數(shù)據(jù)庫(kù)連接參數(shù)
'params'
=
[],
//
數(shù)據(jù)庫(kù)編碼默認(rèn)采用utf8
'charset'
=
'utf8',
//
數(shù)據(jù)庫(kù)表前綴
'prefix'
=
'',
//
數(shù)據(jù)庫(kù)調(diào)試模式
'debug'
=
true,
//
數(shù)據(jù)庫(kù)部署方式:0
集中式(單一服務(wù)器),1
分布式(主從服務(wù)器)
'deploy'
=
0,
//
數(shù)據(jù)庫(kù)讀寫(xiě)是否分離
主從式有效
'rw_separate'
=
false,
//
讀寫(xiě)分離后
主服務(wù)器數(shù)量
'master_num'
=
1,
//
指定從服務(wù)器序號(hào)
'slave_no'
=
'',
//
是否嚴(yán)格檢查字段是否存在
'fields_strict'
=
true,
//
數(shù)據(jù)集返回類型
'resultset_type'
=
'array',
//
自動(dòng)寫(xiě)入時(shí)間戳字段
'auto_timestamp'
=
false,
//
時(shí)間字段取出后的默認(rèn)時(shí)間格式
'datetime_format'
=
'Y-m-d
H:i:s',
//
是否需要進(jìn)行SQL性能分析
'sql_explain'
=
false,
//
Builder類
'builder'
=
'',
//
Query類
'query'
=
'\\think\\db\\Query',
//
是否需要斷線重連
'break_reconnect'
=
false,
//
斷線標(biāo)識(shí)字符串
'break_match_str'
=
[],
];
?
在控制器controller里面建一個(gè)控制文件Test.php
代碼如下:
?php
namespace
app\index\controller;
use
think\Db;
use
think\Controller;
class
Test
extends
Controller
{
public
function
zz(){
$data=Db::view('View_2')-select();
echo
json_encode($data);
}
}
?
最后調(diào)用入口文件即可訪問(wèn)。
我的效果:
[{"111":"123","1112":"LLP","232":"1","ROW_NUMBER":"1"},{"111":"123","1112":"BB","232":"2","ROW_NUMBER":"2"}]
更多關(guān)于thinkPHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《ThinkPHP入門(mén)教程》、《thinkPHP模板操作技巧總結(jié)》、《ThinkPHP常用方法總結(jié)》、《codeigniter入門(mén)教程》、《CI(CodeIgniter)框架進(jìn)階教程》、《Zend
FrameWork框架入門(mén)教程》及《PHP模板技術(shù)總結(jié)》。
希望本文所述對(duì)大家基于ThinkPHP框架的PHP程序設(shè)計(jì)有所幫助。
您可能感興趣的文章:ThinkPHP實(shí)現(xiàn)多數(shù)據(jù)庫(kù)連接的解決方法tp5(thinkPHP5)框架實(shí)現(xiàn)多數(shù)據(jù)庫(kù)查詢的方法ThinkPHP3.1新特性之多數(shù)據(jù)庫(kù)操作更加完善tp5(thinkPHP5)框架連接數(shù)據(jù)庫(kù)的方法示例PHP7使用ODBC連接SQL
Server2008
R2數(shù)據(jù)庫(kù)示例【基于thinkPHP5.1框架】thinkPHP5實(shí)現(xiàn)的查詢數(shù)據(jù)庫(kù)并返回json數(shù)據(jù)實(shí)例tp5(thinkPHP5)操作mongoDB數(shù)據(jù)庫(kù)的方法tp5(thinkPHP5)框架數(shù)據(jù)庫(kù)Db增刪改查常見(jiàn)操作總結(jié)thinkPHP5框架實(shí)現(xiàn)多數(shù)據(jù)庫(kù)連接,跨數(shù)據(jù)連接查詢操作示例
是的,PHP可以對(duì)txt文件讀寫(xiě),相關(guān)函數(shù)如下:
fopen()打開(kāi)文件
格式如:fopen("文件路徑","r")
fopen()函數(shù)有參數(shù)第一個(gè)參數(shù)要指明文件,第二個(gè)參數(shù)可以是r,w等,讀文件時(shí)就可以是r,寫(xiě)文件時(shí)可以是w,具體查看一下手冊(cè)!
fwrite()和 fputs()寫(xiě)文件
具體參照手冊(cè),有簡(jiǎn)單的例子,應(yīng)該能看明白
fclose()關(guān)閉文件
這個(gè)應(yīng)該能理解到吧!
fgets()讀取記錄
當(dāng)然上面幾個(gè)是常用,參數(shù)就看情況應(yīng)用,還有其他函數(shù)請(qǐng)查看手冊(cè)!先暫位,今晚再繼續(xù)按你要求寫(xiě)段代碼,現(xiàn)在下班嘍```
研究了一整晚,現(xiàn)在23:47分,主要是你要求id累加,文本操作有局限,要是數(shù)據(jù)庫(kù)早就OK了!不過(guò)也終于研究出來(lái)!辛苦..
代碼如下:
--------------------------------------------
?php
//$name = $_POST['name'];
//$password = $_POST['password'];
$name = '0758jian';
$password = '123456';
$DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];
if (!file_exists("$DOCUMENT_ROOT/study/info.txt")) { //注意你的站點(diǎn)的實(shí)際路徑
$fp = fopen("$DOCUMENT_ROOT/study/info.txt",'ab'); //以二進(jìn)制追加方式打開(kāi)文件,沒(méi)文件就創(chuàng)建
$id = 1;
$col ="$id"."\t"."$name"."\t"."$password"."\n"; //記錄賦值
fwrite($fp, $col, strlen($col)); //插入第一條記錄
fclose($fp); //關(guān)閉文件
echo "創(chuàng)建文件成功并添加了一條記錄";
} else {
if (!$fp = fopen("$DOCUMENT_ROOT/study/info.txt",'r')) {
echo '文件訪問(wèn)出錯(cuò)';
exit;
}
while (!feof($fp))
{
$co[] = fgets($fp,4096);
}
$numco = count($co);
$strco = $co[$numco-2];
$exco = explode(' ',$strco);
$id = $exco[0]+1;
fclose($fp);
$fp = fopen("$DOCUMENT_ROOT/study/info.txt",'ab');
$col ="$id"."\t"."$name"."\t"."$password"."\n";
fwrite($fp, $col, strlen($col));
fclose($fp);
echo '總共有:'.$numco.'條記錄,記錄添加成功!!';
}
?
嘻嘻,不明白的地方可以留言給我~我親自測(cè)試OK,請(qǐng)注路徑問(wèn)題!至于提交表單和顯示我就沒(méi)寫(xiě)你能看明白上面那段代碼就應(yīng)該寫(xiě)出顯示沒(méi)問(wèn)題的!
我建議一下吧,文本數(shù)據(jù)庫(kù)的例子本來(lái)太多,但是為了邏輯簡(jiǎn)化,最好通過(guò)專門(mén)接口實(shí)現(xiàn)文件與數(shù)據(jù)的轉(zhuǎn)換,可以采用我下面的模板編寫(xiě):
?php
//文件最前面定義兩個(gè)全局變量,數(shù)據(jù)庫(kù)文件名和用戶數(shù)組
$pwd_db_file='db.txt';
$UserPassword=array();
//下面的pwd_db_read函數(shù),把文件內(nèi)容讀入到全局?jǐn)?shù)組中
function pwd_db_read(){
global $pwd_db_file, $UserPassword;
$fp=fopen($pwd_db_file,'r');
while ($s=fgets($fp)){
list($usr,$pwd)=explode('|', $s);
$UserPassword[$usr]=$pwd;
}
fclose($fp);
}
//下面的pwd_db_write函數(shù)保存數(shù)組內(nèi)容到文件中
function pwd_db_write(){
global $pwd_db_file, $UserPassword;
fp=fopen($pwd_db_file, 'w');
foreach ($UserPassword as $usr=$pwd)
fputs($fp,"$usr|$pwd\n");
fclose($fp);
}
//有了上面的全局變量和函數(shù),要寫(xiě)什么功能都簡(jiǎn)單
//下面假釋本腳本調(diào)用的時(shí)候通過(guò)reg.php?job=adduser=...pass=...
//的格式進(jìn)行調(diào)用,job為add表示添加用戶,del表示刪除,modi表示修改
//另外的user和pass表示用戶名或者密碼,job不是以上內(nèi)容表示登錄
//主程序一開(kāi)始就打開(kāi)數(shù)據(jù)庫(kù)
pwd_db_read();
//下面判斷功能
if ($jon=='add'){
if (array_key_exists($user,$UserPassword)) echo "用戶 $user 已經(jīng)存在!"
else $UserPassword[$user]=$pass;//就一句話,簡(jiǎn)單吧
}elseif (job=='del'){
unset($UserPassword[$user]);//你自己考慮編寫(xiě)是否確認(rèn)刪除的內(nèi)容
}elseif ($job=='modi'){
if (array_key_exists($user,$UserPassword)) $UserPassword[$user]=$pass;//和添加是不是有點(diǎn)類似
else echo "用戶 $user 不存在!"
}else{
if ($UserPassword[$user]==$pass){
echo '密碼正確。';
//接下來(lái)可能要做許多事情
}else echo '密碼錯(cuò)誤!';
}
//程序最后保存數(shù)據(jù)庫(kù)修改
pwd_db_write();
?
看得懂嗎,沒(méi)有上機(jī)調(diào)試,語(yǔ)法問(wèn)題可能難免,如果發(fā)現(xiàn)不明白的問(wèn)題請(qǐng)補(bǔ)充。
//第一種?
?php
$conn?=?mysql_connect("主機(jī)名","用戶名","密碼");
mysql_select_db("數(shù)據(jù)庫(kù)名",$conn);
$sql?=?"select?*?from?user";
$result?=?mysql_query($sql);
$data="";
while($row?=?mysql_fetch_row($result)){
foreach($row?as?$v){
$data?.=$v."|";??????//加個(gè)樹(shù)線隔開(kāi)字段
}
nl2br($data);????//讀完一行回車(chē)
}
file_put_contents("abc.txt",$data);
//第二種
?php
$filename?=?"abc.txt";
$res?=?fopen($filename,"r");
while(!feof($res)){
$buffer?=?fgets($res);
$buffer?=?str_replace('?',?'|',?$buffer);?
$array?=?explode('|',?$buffer);?
foreach($array?as?$v){
if(strlen($v)0){
$arr[]?=?$v;
}
}
}
fclose($res);
//組裝數(shù)組插入數(shù)據(jù)庫(kù)就可以了