日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

vb adodb mysql_PHP_ADODB类使用,MySQL的例子PHP中最通用的数据 - phpStudy

發布時間:2023/12/14 数据库 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 vb adodb mysql_PHP_ADODB类使用,MySQL的例子PHP中最通用的数据 - phpStudy 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MySQL的例子

PHP中最通用的數據庫是MySQL,所以我想你會喜歡下面的程序代碼,它連結到 localhost 的 MySQL 服務器,數據庫名稱是 mydab,并且執行一個 SQL 的 select 指令查詢,查詢結果會一列列地印出來。

$db = mysql_connect("localhost", "root", "password");

mysql_select_db("mydb",$db);

$result = mysql_query("SELECT * FROM employees",$db);

if ($result === false) die("failed");

while ($fields = mysql_fetch_row($result)) {

for ($i=0, $max=sizeof($fields); $i < $max; $i++) {

print $fields[$i].' ';

}

print "
n";

}

上列的程序代碼用顏色標出分段,第一段是連結的部分,第二段是執行SQL指令,最后一段則是顯示字段,while循環掃描結果的每一列,而for循環掃描到每列的字段。

接下來是以ADODB的程序代碼得到同樣的結果:

include("adodb.inc.php");

$db = NewADOConnection('mysql');

$db->Connect("localhost", "root", "password", "mydb");

$result = $db->Execute("SELECT * FROM employees");

if ($result === false) die("failed");

while (!$result->EOF) {

for ($i=0, $max=$result->FieldCount(); $i < $max; $i++)

print $result->fields[$i].' ';

$result->MoveNext();

print "
n";

}

現在改成指向Oracle數據庫,程序代碼只要修改第二行成為 NewADOConnection('oracle'),讓我們看一下完整的程序代碼...

與數據庫連結

include("adodb.inc.php");

$db = NewADOConnection('mysql');

$db->Connect("localhost", "root", "password", "mydb");

連結的程序代碼比起原來MySQL的程序代碼有老練一些,因為我們正是需要更老練些。在ADODB我們使用對象導向的方法來管理多樣數據庫的復雜性,我們用不同類(class)來控制不同數據庫。假如你不熟悉對象導向程序設計,別擔心!所有的復雜事情都隱藏在 NewADOConnection() 函數之后。

為了節省內存,我們只加載與你所連結數據庫相關的PHP程序代碼,我們通過調用NewADOConnection(databasedriver)來完成這件事,合法的數據庫驅動程序包含 mysql,mssql,oracle,oci8,postgres,sybase,vfp,access,ibase 以及許多其它的驅動程序。

接著我們通過調用 NewADOConnection() 來從連結類別產生一個新的對象實體,最后我們使用 $db->Connect() 來連結數據庫。

執行SQL指令

$result = $db->Execute("SELECT * FROM employees");

if ($result === false) die("failed");

直接傳送SQL指令到服務器,當成功執行之后,Execute()將傳回一個recordset對象,你可以如同上面所列來檢查$result。

一個初學者容易混淆的議題是,在ADODB有兩種類型的對象,連結對象以及recordset對象,我們何時用這些對象呢?

連結對象($db)是負責連結數據庫,格式化你的SQL查詢。而recordset對象($result)則是負責擷取結果并將響應數據規格化成文字或數組。

唯一我需要增加的事情是,ADODB提供許多有用的函數來讓INSERT及UPDATE指令更容易些,這點我們在進階的章節會提到。

擷取資料

while (!$result->EOF) {

for ($i=0, $max=$result->FieldCount(); $i < $max; $i++)

print $result->fields[$i].' ';

$result->MoveNext();

print "
n";

}

前面取得數據的范例很像從檔案讀數據,在每一行我們首先檢查是否到了檔案的結尾(EOF),若還沒到結尾,循環掃過每列中的字段,然后移到下一行(MoveNext)接著重復同樣的事情。

$result->fields[]數組是由PHP數據庫延伸系統所產生的,有些數據庫延伸系統并不會以字段名稱建立該數組的索引,要強迫以名稱排序索引該數組,使用$ADODB_FETCH_MODE的通用變量。

$ADODB_FETCH_MODE = ADODB_FETCH_NUM;

$rs1 = $db->Execute('select * from table');

$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;

$rs2 = $db->Execute('select * from table');

print_r($rs1->fields); // shows array([0]=>'v0',[1] =>'v1')

print_r($rs2->fields); // shows array(['col1']=>'v0',['col2'] =>'v1')

如同你所見的上面例子,兩個recordset儲存并使用不同的取用模式,當recordset由Execute()產生后再設定$ADODB_FETCH_MODE。

ADOConnection

連結到數據庫的對象,執行SQL指令并且有一組工具函數來標準格式化SQL指令,比如關聯與日期格式等指令。

其它有用的函數

$recordset->Move($pos)卷動目前的數據列,ADODB支持整個數據庫往前卷動,有一些數據庫并不支持往后的卷動,這倒不會是個問題,因為你能夠用暫存紀錄到快取來仿真往后卷動。

$recordset->RecordCount()傳回SQL指令存取到的紀錄筆數,有些數據庫會因為不支持而傳回-1。

$recordset->GetArray()以數組的方式傳回結果。

rs2html($recordset)函數將傳進的recordset轉為HTML的表格格式。下例中以粗體字顯示相關用法:

include('adodb.inc.php');

include('tohtml.inc.php'); /* includes the rs2html function */

$conn = &ADONewConnection('mysql');

$conn->PConnect('localhost','userid','password','database');

$rs = $conn->Execute('select * from table');

rs2html($rs); /* recordset to html table */

進階題材

新增及更新

假設你要新增下列數據到數據庫中。

ID = 3

TheDate=mktime(0,0,0,8,31,2001) /* 31st August 2001 */

Note= sugar why don't we call it off

當你改用別的數據庫,可能就沒辦法新增數據。

第一個問題是,每一個數據庫各自有不同的內定日期格式,MySQL使用 YYYY-MM-DD 格式,而其它數據庫則有不同的內定格式,ADODB提供DBDate()函數來轉換不同數據庫之間的日期內定格式。

次一個問題是單引號(don't)的表示法,在MySQL可以直接使用單引號(don't),但在其它數據庫如Sybase、Access、 Microsoft SQL Server,則用兩個單引號表示(don''t),qstr()函數可以解決此問題。

我們如何使用這些函數?就像這樣:

$sql = "INSERT INTO table (id, thedate,note) values ("

. $ID . ','

. $db->DBDate($TheDate) .','

. $db->qstr($Note).")";

$db->Execute($sql);

ADODB還有$connection->Affected_Rows()函數,傳回受最后update或delete指令影響的數據列數,及$recordset->Insert_ID()函數,傳回最后因insert指令而自動產生的數據列編號,預先提醒大家,沒有任何數據庫有提供這兩個函數。

MetaTypes

你可以得到關于字段的更多信息,透過recordset的方法FetchField($fieldoffset)傳回對象的3個屬性:name,type,max_length。

舉例說明:

$recordset = $conn->Execute("select adate from table");

$f0 = $recordset->FetchField(0);

結果$f0->name的內容是'adata',$f0->type將是'date',假如max_length不知道,其內容將會是-1。

處理不同數據庫的一個問題是,每一個數據庫對于相同的數據型態會有不同的稱呼,比如timestamp型態在某數據庫中稱為datetime,而另一個數據庫則稱為time,所以ADODB提供MetaType($type,$max_length)函數來標準化下列的數據型態:

C: character and varchar types

X: text or long character (eg. more than 255 bytes wide).

B: blob or binary image

D: date

T: timestamp

L: logical (boolean)

I: integer

N: numeric (float, double, money)

在前面的例子中,

$recordset = $conn->Execute("select adate from table");

$f0 = $recordset->FetchField(0);

$type = $recordset->MetaType($f0->type, $f0->max_length);

print $type; /* should print 'D' */

Select指令的Limit及Top支持

ADODB有個$connection->SelectLimit($sql,$nrows,$offset)函數讓你擷取recordset的部分集合,這是采用Microsoft產品中的SELECT TOP用法,及PostgreSQL與MySQL中的SELECT...LIMIT用法的優點,即使原來的數據庫并沒有提供此用法,本函數也仿真提供該使用方式。

快取支援

ADODB允許你在你的檔案系統中暫存recordset的數據,并且在$connection->CacheExecute($secs2cache,$sql)及 $connection->CacheSelectLimit($secs2cache,$sql,$nrows,$offset)等設定的時間間隔到達之后,才真正去做數據庫的查詢以節省時間。

PHP4 Session支持

ADODB也支持PHP4 session handler,你可以存放你的session變量在數據庫中,相關功能請參考 http://php.weblogs.com/adodb-sessions

鼓勵商業使用

假如你計劃寫商用的PHP應用軟件來銷售,你也可以使用ADODB,我們依據GPL來出版ADODB,也就是說你可以合法地在商用應用軟件中引用,并保有你程序代碼的所有權。強烈地鼓勵ADODB的商業應用,我們自己內部也正以這個理由如此使用中。

總結

以上是生活随笔為你收集整理的vb adodb mysql_PHP_ADODB类使用,MySQL的例子PHP中最通用的数据 - phpStudy的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。