ADODB類(lèi)使用_PHP教程
Jul 21, 2016 pm 03:59 PM
MySQL的例子
PHP中最通用的數(shù)據(jù)庫(kù)是MySQL,所以我想你會(huì)喜歡下面的程序代碼,它連結(jié)到 localhost 的 MySQL 服務(wù)器,數(shù)據(jù)庫(kù)名稱(chēng)是 mydab,并且執(zhí)行一個(gè) SQL 的 select 指令查詢(xún),查詢(xún)結(jié)果會(huì)一列列地印出來(lái)。
$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 ??????? print $fields[$i].' ';
?}
?print "
n";
}
上列的程序代碼用顏色標(biāo)出分段,第一段是連結(jié)的部分,第二段是執(zhí)行SQL指令,最后一段則是顯示字段,while循環(huán)掃描結(jié)果的每一列,而for循環(huán)掃描到每列的字段。
接下來(lái)是以ADODB的程序代碼得到同樣的結(jié)果:
?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 ?????????? print $result->fields[$i].' ';
??? $result->MoveNext();
??? print "
n";
?}
現(xiàn)在改成指向Oracle數(shù)據(jù)庫(kù),程序代碼只要修改第二行成為 NewADOConnection('oracle'),讓我們看一下完整的程序代碼...
與數(shù)據(jù)庫(kù)連結(jié)
include("adodb.inc.php");
$db = NewADOConnection('mysql');
$db->Connect("localhost", "root", "password", "mydb");
連結(jié)的程序代碼比起原來(lái)MySQL的程序代碼有老練一些,因?yàn)槲覀冋切枰暇毿?。在ADODB我們使用對(duì)象導(dǎo)向的方法來(lái)管理多樣數(shù)據(jù)庫(kù)的復(fù)雜性,我們用不同類(lèi)(class)來(lái)控制不同數(shù)據(jù)庫(kù)。假如你不熟悉對(duì)象導(dǎo)向程序設(shè)計(jì),別擔(dān)心!所有的復(fù)雜事情都隱藏在 NewADOConnection() 函數(shù)之后。
為了節(jié)省內(nèi)存,我們只加載與你所連結(jié)數(shù)據(jù)庫(kù)相關(guān)的PHP程序代碼,我們通過(guò)調(diào)用NewADOConnection(databasedriver)來(lái)完成這件事,合法的數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序包含 mysql,mssql,oracle,oci8,postgres,sybase,vfp,access,ibase 以及許多其它的驅(qū)動(dòng)程序。
接著我們通過(guò)調(diào)用 NewADOConnection() 來(lái)從連結(jié)類(lèi)別產(chǎn)生一個(gè)新的對(duì)象實(shí)體,最后我們使用 $db->Connect() 來(lái)連結(jié)數(shù)據(jù)庫(kù)。
執(zhí)行SQL指令
$result = $db->Execute("SELECT * FROM employees");
if ($result === false) die("failed");
直接傳送SQL指令到服務(wù)器,當(dāng)成功執(zhí)行之后,Execute()將傳回一個(gè)recordset對(duì)象,你可以如同上面所列來(lái)檢查$result。
一個(gè)初學(xué)者容易混淆的議題是,在ADODB有兩種類(lèi)型的對(duì)象,連結(jié)對(duì)象以及recordset對(duì)象,我們何時(shí)用這些對(duì)象呢?
連結(jié)對(duì)象($db)是負(fù)責(zé)連結(jié)數(shù)據(jù)庫(kù),格式化你的SQL查詢(xún)。而recordset對(duì)象($result)則是負(fù)責(zé)擷取結(jié)果并將響應(yīng)數(shù)據(jù)規(guī)格化成文字或數(shù)組。
唯一我需要增加的事情是,ADODB提供許多有用的函數(shù)來(lái)讓INSERT及UPDATE指令更容易些,這點(diǎn)我們?cè)谶M(jìn)階的章節(jié)會(huì)提到。
擷取資料
while (!$result->EOF) {
?? for ($i=0, $max=$result->FieldCount(); $i ?????? print $result->fields[$i].' ';
?? $result->MoveNext();
?? print "
n";
}
前面取得數(shù)據(jù)的范例很像從檔案讀數(shù)據(jù),在每一行我們首先檢查是否到了檔案的結(jié)尾(EOF),若還沒(méi)到結(jié)尾,循環(huán)掃過(guò)每列中的字段,然后移到下一行(MoveNext)接著重復(fù)同樣的事情。
$result->fields[]數(shù)組是由PHP數(shù)據(jù)庫(kù)延伸系統(tǒng)所產(chǎn)生的,有些數(shù)據(jù)庫(kù)延伸系統(tǒng)并不會(huì)以字段名稱(chēng)建立該數(shù)組的索引,要強(qiáng)迫以名稱(chēng)排序索引該數(shù)組,使用$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')
如同你所見(jiàn)的上面例子,兩個(gè)recordset儲(chǔ)存并使用不同的取用模式,當(dāng)recordset由Execute()產(chǎn)生后再設(shè)定$ADODB_FETCH_MODE。
ADOConnection
連結(jié)到數(shù)據(jù)庫(kù)的對(duì)象,執(zhí)行SQL指令并且有一組工具函數(shù)來(lái)標(biāo)準(zhǔn)格式化SQL指令,比如關(guān)聯(lián)與日期格式等指令。
其它有用的函數(shù)
$recordset->Move($pos)卷動(dòng)目前的數(shù)據(jù)列,ADODB支持整個(gè)數(shù)據(jù)庫(kù)往前卷動(dòng),有一些數(shù)據(jù)庫(kù)并不支持往后的卷動(dòng),這倒不會(huì)是個(gè)問(wèn)題,因?yàn)槟隳軌蛴脮捍婕o(jì)錄到快取來(lái)仿真往后卷動(dòng)。
$recordset->RecordCount()傳回SQL指令存取到的紀(jì)錄筆數(shù),有些數(shù)據(jù)庫(kù)會(huì)因?yàn)椴恢С侄鴤骰?1。
$recordset->GetArray()以數(shù)組的方式傳回結(jié)果。
rs2html($recordset)函數(shù)將傳進(jìn)的recordset轉(zhuǎn)為HTML的表格格式。下例中以粗體字顯示相關(guān)用法:
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 */
還有許多其它有用的函數(shù)列示在文件之中,可從下列網(wǎng)址查得 http://php.weblogs.com/adodb_manual
進(jìn)階題材
新增及更新
假設(shè)你要新增下列數(shù)據(jù)到數(shù)據(jù)庫(kù)中。
ID = 3
TheDate=mktime(0,0,0,8,31,2001) /* 31st August 2001 */
Note= sugar why don't we call it off
當(dāng)你改用別的數(shù)據(jù)庫(kù),可能就沒(méi)辦法新增數(shù)據(jù)。
第一個(gè)問(wèn)題是,每一個(gè)數(shù)據(jù)庫(kù)各自有不同的內(nèi)定日期格式,MySQL使用 YYYY-MM-DD 格式,而其它數(shù)據(jù)庫(kù)則有不同的內(nèi)定格式,ADODB提供DBDate()函數(shù)來(lái)轉(zhuǎn)換不同數(shù)據(jù)庫(kù)之間的日期內(nèi)定格式。
次一個(gè)問(wèn)題是單引號(hào)(don't)的表示法,在MySQL可以直接使用單引號(hào)(don't),但在其它數(shù)據(jù)庫(kù)如Sybase、Access、 Microsoft SQL Server,則用兩個(gè)單引號(hào)表示(don''t),qstr()函數(shù)可以解決此問(wèn)題。
我們?nèi)绾问褂眠@些函數(shù)?就像這樣:
$sql = "INSERT INTO table (id, thedate,note) values ("
?? . $ID . ','
?? . $db->DBDate($TheDate) .','
?? . $db->qstr($Note).")";
$db->Execute($sql);
ADODB還有$connection->Affected_Rows()函數(shù),傳回受最后update或delete指令影響的數(shù)據(jù)列數(shù),及$recordset->Insert_ID()函數(shù),傳回最后因insert指令而自動(dòng)產(chǎn)生的數(shù)據(jù)列編號(hào),預(yù)先提醒大家,沒(méi)有任何數(shù)據(jù)庫(kù)有提供這兩個(gè)函數(shù)。
MetaTypes
你可以得到關(guān)于字段的更多信息,透過(guò)recordset的方法FetchField($fieldoffset)傳回對(duì)象的3個(gè)屬性:name,type,max_length。
舉例說(shuō)明:
$recordset = $conn->Execute("select adate from table");
$f0 = $recordset->FetchField(0);
結(jié)果$f0->name的內(nèi)容是'adata',$f0->type將是'date',假如max_length不知道,其內(nèi)容將會(huì)是-1。
處理不同數(shù)據(jù)庫(kù)的一個(gè)問(wèn)題是,每一個(gè)數(shù)據(jù)庫(kù)對(duì)于相同的數(shù)據(jù)型態(tài)會(huì)有不同的稱(chēng)呼,比如timestamp型態(tài)在某數(shù)據(jù)庫(kù)中稱(chēng)為datetime,而另一個(gè)數(shù)據(jù)庫(kù)則稱(chēng)為time,所以ADODB提供MetaType($type,$max_length)函數(shù)來(lái)標(biāo)準(zhǔn)化下列的數(shù)據(jù)型態(tài):
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有個(gè)$connection->SelectLimit($sql,$nrows,$offset)函數(shù)讓你擷取recordset的部分集合,這是采用Microsoft產(chǎn)品中的SELECT TOP用法,及PostgreSQL與MySQL中的SELECT...LIMIT用法的優(yōu)點(diǎn),即使原來(lái)的數(shù)據(jù)庫(kù)并沒(méi)有提供此用法,本函數(shù)也仿真提供該使用方式。
快取支援
ADODB允許你在你的檔案系統(tǒng)中暫存recordset的數(shù)據(jù),并且在$connection->CacheExecute($secs2cache,$sql)及 $connection->CacheSelectLimit($secs2cache,$sql,$nrows,$offset)等設(shè)定的時(shí)間間隔到達(dá)之后,才真正去做數(shù)據(jù)庫(kù)的查詢(xún)以節(jié)省時(shí)間。
PHP4 Session支持
ADODB也支持PHP4 session handler,你可以存放你的session變量在數(shù)據(jù)庫(kù)中,相關(guān)功能請(qǐng)參考 http://php.weblogs.com/adodb-sessions
鼓勵(lì)商業(yè)使用
假如你計(jì)劃寫(xiě)商用的PHP應(yīng)用軟件來(lái)銷(xiāo)售,你也可以使用ADODB,我們依據(jù)GPL來(lái)出版ADODB,也就是說(shuō)你可以合法地在商用應(yīng)用軟件中引用,并保有你程序代碼的所有權(quán)。強(qiáng)烈地鼓勵(lì)A(yù)DODB的商業(yè)應(yīng)用,我們自己內(nèi)部也正以這個(gè)理由如此使用中。

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

évitez N 1 Problèmes de requête, réduisez le nombre de requêtes de base de données en chargeant à l'avance des données associées; 2. Sélectionnez uniquement les champs requis pour éviter de charger des entités complètes pour enregistrer la mémoire et la bande passante; 3. Utilisez raisonnablement les stratégies de cache, telles que le cache secondaire de la doctrine ou les résultats de requête à haute fréquence de cache de Doctrine; 4. Optimisez le cycle de vie de l'entité et appelez régulièrement () pour libérer la mémoire pour empêcher le débordement de la mémoire; 5. Assurez-vous que l'indice de base de données existe et analysez les instructions SQL générées pour éviter les requêtes inefficaces; 6. Désactiver le suivi automatique des changements dans les scénarios où les modifications ne sont pas nécessaires et utilisez des tableaux ou des modes légers pour améliorer les performances. L'utilisation correcte de l'ORM nécessite de combiner la surveillance SQL, la mise en cache, le traitement par lots et l'optimisation appropriée pour garantir les performances de l'application tout en maintenant l'efficacité du développement.

Le fichier SetfitS.JSON est situé dans le chemin de niveau utilisateur ou au niveau de l'espace de travail et est utilisé pour personnaliser les paramètres VScode. 1. Chemin de niveau utilisateur: Windows est C: \ Users \\ AppData \ Roaming \ Code \ User \ Settings.json, macOS est /users//library/applicationsupport/code/user/settings.json, Linux est /home//.config/code/user/settings.json; 2. Chemin au niveau de l'espace de travail: .vscode / Paramètres dans le répertoire racine du projet

Le mécanisme de collecte des ordures de PHP est basé sur le comptage de référence, mais les références circulaires doivent être traitées par un collecteur de déchets circulaires périodique; 1. Le nombre de références libère la mémoire immédiatement lorsqu'il n'y a pas de référence à la variable; 2. Référence La référence fait que la mémoire ne peut pas être automatiquement libérée, et cela dépend de GC pour le détecter et le nettoyer; 3. GC est déclenché lorsque la "racine possible" Zval atteint le seuil ou appelle manuellement gc_collect_cycles (); 4. Les applications PHP à long terme devraient surveiller GC_Status () et appeler GC_COLLECT_CYCLES () à temps pour éviter la fuite de mémoire; 5. Les meilleures pratiques incluent d'éviter les références circulaires, en utilisant gc_disable () pour optimiser les zones clés de performance et les objets de déréférence via la méthode Clear () d'Orm.

BREF permet aux développeurs PHP de créer des applications évolutives et rentables sans gérer les serveurs. 1.BREF apporte PHP à Awslambda en fournissant une couche d'exécution PHP optimisée, prend en charge PHP8.3 et d'autres versions, et s'intègre de manière transparente à des frameworks tels que Laravel et Symfony; 2. Les étapes de déploiement incluent: l'installation de BREF à l'aide de composer, configurer Serverless.yml pour définir des fonctions et des événements, tels que les points de terminaison HTTP et les commandes artisanales; 3. Exécutez la commande ServerlessDeploy pour terminer le déploiement, configurez automatiquement Apigeway et générez des URL d'accès; 4. Pour les restrictions de lambda, BREF fournit des solutions.

ReadonlypropertiesInphp8.2CanlybeassignedonceinthestrustructoratDeclarationandcannotBemodifiedAfterward, applicationmutabilityaThelanguageLevel.2.Toachievedeep-immutability, webutableTypeSlikEarrayinArrayobjectorUSustomymutability, webutilletypeslikearraysinarrayobjectoruseseCustomMutabeColEctionSucha.

UseArestapitobridgePhpandmlModelsByrunningTheModelinpythonviaflaskorfastapiandCallingitfrompsingCurlorBuzzle.2.Runpythonscripts est ventilateur

Tout d'abord, utilisez JavaScript pour obtenir les préférences du système utilisateur et les paramètres de thème stockés localement et initialiser le thème de la page; 1. La structure HTML contient un bouton pour déclencher la commutation du sujet; 2. CSS utilise: Root pour définir des variables de thème brillantes, la classe de mode. Dark définit les variables de thème sombres et applique ces variables via var (); 3. JavaScript détecte préfère-Color-Scheme et lit LocalStorage pour déterminer le thème initial; 4. Communiquez la classe en mode noir sur l'élément HTML lorsque vous cliquez sur le bouton et enregistre l'état actuel vers LocalStorage; 5. Tous les changements de couleur sont accompagnés d'une animation de transition de 0,3 seconde pour améliorer l'utilisateur

Créer un fichier de semences: utilisez PhPartisanMake: SeeDerUserSederder pour générer la classe Seeder et insérer des données via la requête Model Factory ou Database dans la méthode d'exécution; 2. Appelez un autre Seeder dans DatabaseSeseder: enregistrez USERSEDEDER, POSTSEEDER, etc. dans l'ordre via $ this-> call () pour s'assurer que la dépendance est correcte; 3. Exécutez Seeder: Exécutez PHPARTISANDB: graines pour exécuter tous les semants enregistrés, ou utilisez du phpartisanMigrate: Fresh - Seed pour réinitialiser et remplir les données; 4
