You are on page 1of 6

PHP Everywhere

Home

Browse archives
Su October 2008 Mo Tu We Th Fr 1 5 12 19 26 6 13 20 27 7 14 21 28 8 15 22 29 2 9 16 23 30 3 10 17 24 31 Sa 4 11 18 25

ADOdb Tutorial in French (Francais)


Submitted by johnlim on Sat, 26/06/2004 - 10:48am.

Thanks to Daniel Lucazeau daniel.lucazeau#ajornet.com for the translation

Exemple 1: Instruction Select


But: Se connecter la base Access Northwind par DSN, et visualiser les deux premires colonnes de chaque ligne. Dans cet exemple, nous crons un objet ADOConnection, qui reprsente la connection la base de donnes. La connexion est ralise par PConnect, qui est une connexion persistante. A chaque fois que nous devons activer une requte sur une base de donnes, nous devons appeler la fonction ADOConnection.Execute(). Celle-ci retourne un objet ADORecordSet qui est un curseur contenant la ligne courante dans le tableau fields[]. On utilise MoveNext() pour parcourir les lignes. NB: SelectLimit, fonction permettant de limiter le nombre de lignes renvoyes, n'est pas utilise dans cet exemple.
<? include('adodb.inc.php'); # charge le code deADOdb $conn = &ADONewConnection('access'); # cre une connexion $conn->PConnect('northwind'); # se connecte MS-Access, northwind DSN $recordSet = &$conn->Execute('select * from products'); if (!$recordSet) print $conn->ErrorMsg(); else while (!$recordSet->EOF) { print $recordSet->fields[0].' '.$ $recordSet->MoveNext(); }

PHP Stuff
Libraries and Code.
ADOdb DB Abstraction Library ADOdb Docs ADOdb Testimonials ADOdb Sessions Tutorial ADOdb & PEAR DB compared ADOdb Date Library Advanced Oracle Tutorial

PHP4 Installer for Windows


EasyWindows PHP4 installer

PHP Articles.
Optimizing PHP Tuning Apache & PHP Using PHP & ODBC PHP, FastCGI & IIS Enterprise PHP PHP Funnies The fine art of coding fat bums and thin waists Squeezing code with xdebug The discipline of PHP Rectal Probes and Benchmarking with WAST Building Rich DHTML Apps

$recordSet->Close(); # optionnel $conn->Close(); # optionnel ?>

L'objet $recordSet renvoy contient la ligne courante dans le tableau $recordSet->fields, tableau index par le numro de la colonne (commenant zro). On utilise la fonction pour aller de ligne en ligne. La prorit EOF est valorise true quand la fin du fichier est atteinte. Si une erreur survient dans Execute(), on retourne false au lieu d'un objet recordset. Le tableau $recordSet->fields[] est gnr par les extensions bases de donnes de PHP. Quelques extensions de bases de donnes indexent uniquement par des nombres et n'indexent pas le tableau par le nom des champs. Pour forcer l'indexation par les noms - c'est dire obtenir des tableaux associatifs - il faut utiliser la variable globale $ADODB_FETCH_MODE. Chaque recordset conserve et utilise la valeur du mode de renvoie qui a t slectionne lorts de la cration du recordset par les fonctions Execute() or SelectLimit().
$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')

Moving from ASP to PHP Part 1 Language Basics Part 2 Functions, Classes Part 3 ASP Objects and PHP SQL Articles
RDBMS & SQL links Portable SQL Tips Object-Relational Mania

General
Fine Art of Programming Unix Performance Tuning Securing Apache on Linux Flying with MySQL and Oracle Admin Notes - Windows/Linux

Interesting Software
PhpLens

This site runs

Drupal.

Malaysian PHP Users Group

Archives php.weblogs.com

2004 2003 2002 2001 2000 favorites

Pour obtenir le nombre de lignes d'une instruction select , il faut utiliser $recordSet->RecordCount(). Si le nombre de lignes ne peut tre dtermin, la valeur renvoye est -1.

John's Bio jlim # natsoft.com Juris Technologies

Exemple 2: Utilisation avance de l'objet Field dans une requte de slection


But : Faire un Select sur une table, renvoyer les deux premires colonnes. Et si la seconde est une date ou un timestamp, le mettre au foramt de date US.
<? include('adodb.inc.php'); # charge le code commun deADOdb $conn = &ADONewConnection('access'); # cre une connexion $conn->PConnect('northwind'); # se connecte MS-Access, northwind dsn $recordSet = &$conn->Execute('select CustomerID,OrderDate from Orders');

User login
Username:

1 sur 6

if (!$recordSet) print $conn->ErrorMsg(); else while (!$recordSet->EOF) { $fld = $recordSet->FetchField(1); $type = $recordSet->MetaType($fld->type);

Password:

if ( $type == 'D' || $type == 'T') print $recordSet->fields[0].' '. $recordSet->UserDate($recordSet->fields[1],'m/d/Y').'<BR>'; else print $recordSet->fields[0].' '.$recordSet->fields[1].'<BR>';

Create new account Request new password

$recordSet->MoveNext(); } $recordSet->Close(); # optionnel $conn->Close(); # optionnel ?>

Dans cet exemple, nous tudions le type de champ de la seconde colonne avec FetchField(). Cette fonction retourne un objet avec au moins trois champs. name: nom de la colonne type: Type natif du champ de la colonne max_length: longueur maximum du champ. Quelques bases de donnes, comme MySQL, ne retournent pas correctement la longueur maximum d'un champ. dans ce cas max_length est valorise -1. On utilise ensuite MetaType() pour convertir le type natif en type generique. actuellement les types generiques suivants sont dfinis : C: champs caractres qui peuvent tre restitus dans un <input type="text"> tag. X: TeXt, champs large text fields restitus dans un <textarea> B: Blobs, ou Binary Large Objects. des images typiquement. D: Champ date T: Champ timestamp L: Champ logique (boolen ou champ de bits) I: Champ entier N: Champ numrique. incluant autoincrement, numerique, valeur flottante, rel et entier. R: Champ serial. Incluant serial, entiers autoincrement. This works for selected databases. Si le metatype ets de type date ou timestamp, alors nous l'ditons en utilisant format utilisateur avec UserDate(), qui convertit la date au format PHP SQL dans un autre format, dfini par l'utilisateur. Une autre utilisation de MetaType() est la validation des donnes avant d'excuter une instruction SQL insert or update.

Exemple 3: Insertion
But : Insrer une ligne dans la table Orders contenant des dates et des chanes de caractres ncessitant d'tre quotes (backslashes) avant de pouvoir tre acceptes par la base de donnes, par exemple le guillemet simple dans le mot
<? include('adodb.inc.php'); # load code common toADOdb $conn = &ADONewConnection('access'); # create a connection

$conn->PConnect('northwind'); # connect to MS-Access, northwind dsn $shipto = $conn->qstr("John's Old Shoppe");

$sql = "insert into orders (customerID,EmployeeID,OrderDate,ShipName) "; $sql .= "values ('ANATR',2,".$conn->DBDate(time()).",$shipto)";

if ($conn->Execute($sql) === false) { print 'error inserting: '.$conn->ErrorMsg().'<BR>'; } ?>

Dans cet exemple, nous voyons la gestion volue des dates et des quotes fournie parADOdb. Le timestamp Unix (qui est un entier long) est de faon approprie prpar pour Access avec DBDate(), et le caractre d'chappement correct est utilis pour protger la chane de caractre John's Old Shoppe, qui est John''s Old Shoppe et non la valeur par dfaut de PHP John's Old Shoppe avec qstr(). Notez la gestion des erreurs dans l'instruction Execute. Execute() retourne false si une erreur survient. Le mesage d'erreur de la dernire erreur survenue est obtenu par ErrorMsg(). Note: il faut pour cela que php_track_errors soit vrai pour que les messages puissent tre sauvegards.

Exemple 4: Debugging

2 sur 6

<? include('adodb.inc.php'); # charge le code commun deADOdb $conn = &ADONewConnection('access'); # cre une connexion $conn->PConnect('northwind'); # se connecte to MS-Access, northwind dsn $shipto = $conn->qstr("John's Old Shoppe"); $sql = "insert into orders (customerID,EmployeeID,OrderDate,ShipName) "; $sql .= "values ('ANATR',2,".$conn->FormatDate(time()).",$shipto)"; $conn->debug = true; if ($conn->Execute($sql) === false) print 'error inserting'; ?>

Dns l'exemple ci-dessus, on a activ le debuggage par debug = true. Cela permet la visualisation de l'instruction SQL avant son excution, cela affiche aussi tous les messages d'erreurs ventuels. dans ce cas, il n'y a pas besoin d'appeler ErrorMsg(). Pour visualiser le recordset voir l'exemple d'utilisation de lafonction rs2html(). Voir aussi la section sur la Gestion Personnalise des erreurs.

Exemple 5: MySQL et les Menus


But : Se connecter la base MySQL agora, et gnrer un menu avec la balise <select> partir d'une requte SQL dans laquelle les libells des balises <option> sont dans la premire colonne , et les valeurs renvoyes au serveur sont la seconde.
<? include('adodb.inc.php'); # load code common toADOdb $conn = &ADONewConnection('mysql'); # create a connection $conn->PConnect('localhost','userid','','agora');# connect to MySQL, agora db $sql = 'select CustomerName, CustomerID from customers'; $rs = $conn->Execute($sql); print $rs->GetMenu('GetCust','Mary Rosli'); ?>

Nous dfinissons ici un menu nomm GetCust, avec l'option nomme 'Mary Rosli' pr-slectionne. Voir GetMenu(). Il ya aussi une fonction qui renvoie un recordset sous forme d'un tableau : GetArray(), ou comme un tableau associatif dont les cls sont dans la premire colonne : (). Depuis la version 1.50 deADOdb la variable globale $ADODB_FETCH_MODE permet de dfinir si l'on souhaite un tableau associatif ou index par des entiers.

Exemple 6: Se connecter simultanment deux bases de donnes


<? include('adodb.inc.php'); # load code common toADOdb $conn1 = &ADONewConnection('mysql'); # create a mysql connection $conn2 = &ADONewConnection('oracle'); # create a oracle connection

$conn1->PConnect($server, $userid, $password, $database); $conn2->PConnect(false, $ora_userid, $ora_pwd, $oraname);

$conn1->Execute('insert ...'); $conn2->Execute('update ...'); ?>

Exemple 7: Gnrer des requtes SQL de mise jour (Update) et d'insertion (Insert)
ADOdb 1.31 ou plus supporte deux nouvelles fonctions sur les recordset : GetUpdateSQL( ) et GetInsertSQL( ). Elles permettent partir de l'excution d'une requte "SELECT * FROM table query WHERE...", de faire une copie de $rs->fields, d'en modifier les champs, et ensuite de gnrer l'instruction SQL pour mettre jour ou insrer un nouvel enregistrement dans la table. On va montrer comment ces fonctions peuvent tre utilises en acdant la table avec les champs suivants : (ID, FirstName, LastName, Created). Avant de pouvoir utiliser ces fonctions, il faut initialiser le recordset par l'excution d'une requte de slection sur cette table. Ide et code de Jonathan Younger jyounger#unilab.com.
<? #============================================== # SAMPLE GetUpdateSQL() and GetInsertSQL() code #============================================== include('adodb.inc.php'); include('tohtml.inc.php');

#========================== # This code tests an insert

3 sur 6

$sql = "SELECT * FROM ADOXYZ WHERE id = -1"; # Select an empty record from the database

$conn = &ADONewConnection("mysql"); # create a connection $conn->debug=1; $conn->PConnect("localhost", "admin", "", "test"); # connect to MySQL, testdb $rs = $conn->Execute($sql); # Execute the query and get the empty recordset

$record = array(); # Initialize an array to hold the record data to insert

# Set the values for the fields in the record $record["firstname"] = "Bob"; $record["lastname"] = "Smith"; $record["created"] = time();

# Pass the empty recordset and the array containing the data to insert # into the GetInsertSQL function. The function will process the data and return # a fully formatted insert sql statement. $insertSQL = $conn->GetInsertSQL($rs, $record);

$conn->Execute($insertSQL); # Insert the record into the database

#========================== # This code tests an update

$sql = "SELECT * FROM ADOXYZ WHERE id = 1"; # Select a record to update

$rs = $conn->Execute($sql); # Execute the query and get the existing record to update

$record = array(); # Initialize an array to hold the record data to update

# Set the values for the fields in the record $record["firstname"] = "Caroline"; $record["lastname"] = "Smith"; # Update Caroline's lastname from Miranda to Smith

# Pass the single record recordset and the array containing the data to update # into the GetUpdateSQL function. The function will process the data and return # a fully formatted update sql statement with the correct WHERE clause. # If the data has not changed, no recordset is returned $updateSQL = $conn->GetUpdateSQL($rs, $record);

$conn->Execute($updateSQL); # Update the record in the database $conn->Close(); ?>

Exemple 8: Pagination avec Next et Previous


Le code suivant cre une pagination trs simple d'un recordset, ce qui permet de le visualiser de page en page.
include_once('../adodb.inc.php'); include_once('../adodb-pager.inc.php'); session_start();

$db = NewADOConnection('mysql');

$db->Connect('localhost','root','','xphplens');

$sql = "select * from adoxyz ";

$pager = new ADODB_Pager($db,$sql);

4 sur 6

$pager->Render($rows_per_page=5);

Ce code cre la pagination de base suivante qui ressemble ceci :


|< << >> >|

ID

First Name

Last Name Turing Williams Sun See Oey

Date Created Sat 06, Oct 2001 Sat 06, Oct 2001 Sat 06, Oct 2001 Sat 06, Oct 2001 Sat 06, Oct 2001

36 Alan 37 Serena 38 Yat Sun 39 Wai Hun 40 Steven Page 8/10

Le nombre de lignes de chaque page est dfini par la mthode Render($rows). La valeur par dfaut du nombre de lignes par page est fixe 10, obtenue par l'absence de paramtre passe la mthode. On contrle le titre des colonnes en modifiant la requte SQL(support par la plupart des bases de donnes) :
$sql = 'select id as "ID", firstname as "First Name", lastname as "Last Name", created as "Date Created" from adoxyz';

Le code ci-dessus est extrait de l'exemple adodb/tests/testpaging.php inclus avec cette version, et la classe ADODB_Pager est dans adodb/adodb-pager.inc.php. Le code de ADODB_Pager peut tre adapt par un programmeur afin de remplacer les liens textuels par des liens sur des images, et la triste couleur blanche du fond peut elle tre remplace par des couleurs plus attrayantes. Une partie du code utilis ici est issu de la contribution de Ivn Oliva and Cornel G

Exemple 9: Exportrer des donnes au format CSV ou dlimt par des tabulations
La librairie fourni des fonctions utils pour exporter au format CSV - dlimit par des point-virgules - ou au format dlimit par des tabulations:
include_once('/path/to/adodb/toexport.inc.php'); include_once('/path/to/adodb/adodb.inc.php'); $db = &NewADOConnection('mysql'); $db->Connect($server, $userid, $password, $database); $rs = $db->Execute('select fname as "First Name", surname as "Surname" from table');

print "<pre>"; print rs2csv($rs); # retourne une chane de caractres, au format CSV print '<hr>'; $rs->MoveFirst(); # attention, quelques SGBD ne supportent pas le MoveFirst print rs2tab($rs,false); # retourne une chane de caractres au format dlimit par des tabulations # false == supprime la premire ligne avec les nom des champs print '<hr>'; $rs->MoveFirst(); rs2tabout($rs); # envoie directement la chane vers la sortie standard (il y a aussi la fonction rs2csvout) print "</pre>";

$rs->MoveFirst(); $fp = fopen($path, "w"); if ($fp) { rs2csvfile($rs, $fp); # crit la chane dans un fichier (il ya aussi la fonction rs2tabfile) fclose($fp); }

Les retour-chariot el sauts de ligne sont convertis en espace. Les noms des champs sont restitus dans la premire ligne du text. Les chanes contenant le caractre dlimiteur sont restitues quotes par des guillemets doubles. Les guillemets doubles sont eux double-quoted. C'est conforme aux rgles d'importexport d'Excel. Toutes les fonctions ci-dessus ont un dernier paramtre optionnel, $addtitles qui vaut true par dfaut. Quand il est valoris false la premire ligne du fichier ne contient pas le nom des champs mais directement les donnes.
login or register to post comments

5 sur 6

PHP Everywhere.

(c)2000-2007 John Lim. All rights reserved. This is a personal web page. Things said here do not represent the position of my employer.

6 sur 6

You might also like