Az ADOdb használata
Ez a jegyzet az ADOdb használatát mutatja be. Nem etalon az ADOdb programozásához, csupán egy jegyzettömb, amit használhat minden ADOdb iránt érdeklődő.
Az ADOdb egy köztes réteg a programunk és az adatbázist elérő függvények között. A közvetlen adatbázist kezelő függvényeket elrejti előlünk és objektum orientáltan teszi elérhetővé az adatbázisokat, függetlenül azok típusától. Egyszerre kezelhetünk MySQL, PostgreSQL, SQLite, Interbase, Firebird, Informix, LDAP, DB2, Oracle, MS-SQL, Sybase és ODBC adatbázisokat. Session kezelésben is segít, ha adatbázis alapú session kezelésen gondolkodunk. A session adatok titkosításról is gondoskodhatunk.
Használat előtt szükségünk lesz a PEAR csomagra, amit WAMP-on a
c:\wamp\bin\php\php5.2.5\go-pear.bat
parancs kiadásával telepíthetünk. Érdemes a Name of configuration file értékét módosítanunk c:\wamp\bin\php\php5.2.5\pear.ini -re. A telepítés automatikusan letölti a szükséges fájlokat, és módosítja a php.ini fájlt. Másoljuk a c:\wamp\bin\php\php5.2.5\php.ini módosítását a c:\wamp\bin\apache\apache2.2.6\bin\php.ini fájlba, és ne felejtsük el újraindítani az Apache szervert, hogy újratöltse a php beállításokat.
Egy egyszerű lekérdezéshez az alábbi forráskód elegendő:
<?php
include 'adodb5/adodb-pear.inc.php';
include('adodb5/adodb.inc.php');
$username = 'root';
$password = '';
$hostname = 'localhost';
$database = 'test';
$driver = 'mysql';
$dsn = "$driver://$username:$password@$hostname/$database";
$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
$db = DB::Connect($dsn);
$db->EXECUTE("SET NAMES 'utf-8'");//UTF-8 karakterkészletes adatbázishoz
$db->EXECUTE("SET CHARACTER SET 'utf8'");
$db->EXECUTE("SET COLLATION_CONNECTION='utf8_general_ci'");
$db->EXECUTE("SET character_set_results = 'utf8'");
$db->EXECUTE("SET character_set_server = 'utf8'");
$db->EXECUTE("SET character_set_client = 'utf8'");
$rs = $db->Execute('select * from user');
$cnt = 0;
if ($rs)
while (!$rs->EOF) {
print_r($rs->fields);
print "<br>";
$rs->MoveNext();
}
?>
Ügyeljünk arra, hogy ne használjuk együtt a MoveNext és a FetchRow metódusokat.
<?php
while ($arr = $rs->FetchRow()) {
print_r($arr);
print "<br>";
}
?>
Az ADOdb-hez mellékelt dokumentációban szépen le van írva az LDAP használata is.
Most nézzünk példát a session kezelésre:
<?php
include 'adodb5/adodb-pear.inc.php';
include('adodb5/adodb.inc.php');
include_once("adodb5/session/adodb-session2.php");
$username = 'root';
$password = '';
$hostname = 'localhost';
$database = 'test';
$driver = 'mysql';
$options['table'] = 'sessions2';
ADOdb_Session::config($driver, $host, $user, $password, $database,$options);
ADOdb_session::Persist($connectMode=false); //non persistent connections
$ADODB_SESSION_EXPIRE_NOTIFY = array('USERID','NotifyFn');
function
NotifyFn($expireref, $sesskey)
{
global $ADODB_SESS_CONN; # the session connection object
$user = $ADODB_SESS_CONN->qstr($expireref);
print "user expired = {$user};";
//$ADODB_SESS_CONN->Execute("delete from shopping_cart where user=$user");
//system("rm /work/tmpfiles/$expireref/*");
}
session_name('Private');
session_start();
print_r($_SESSION);
if (!isset($_SESSION['USERID']) || ($_SESSION['USERID']=='')) {
$dsn = "$driver://$username:$password@$hostname/$database";
$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
$db = DB::Connect($dsn); //also works if you include 'adodb/adodb-pear.inc.php' at the top
$rs = $db->Execute("select id from user where firstname = 'Zoltán' and lastname='Papp'");
if ($rs && ($arr = $rs->FetchRow())) {
$_SESSION['USERID'] = $arr['id'];
print "UserId set to ".$arr['id'];
}
}
session_write_close();
?>
MySQL adatbázis esetén az alábbi SQL utasítással hozható létre a session-t tároló táblázat:
CREATE TABLE sessions2( sesskey VARCHAR( 64 ) NOT NULL DEFAULT '', expiry DATETIME NOT NULL , expireref VARCHAR( 250 ) DEFAULT '', created DATETIME NOT NULL , modified DATETIME NOT NULL , sessdata LONGTEXT, PRIMARY KEY ( sesskey ) , INDEX sess2_expiry( expiry ), INDEX sess2_expireref( expireref ) )
Ez a session kezelés megkönnyíti objektum orientált programok írását, és a session adatbázisba szerializált rögzítését. A szerializáció és vissza alakítás automatikusan megtörténik a sessoin bezárásakor és megnyitásakor, és automatikusan törlődik session megszünésekor. Így közel áll a ZOPE és a Java EE session megvalósításokhoz, habár az ADOdb adatbázisból tölti be és oda menti el az egyébként memóriában tárolt objektumokat.
A korábban készült XML/XSLT alapú CRM pilot programot ADOdb alapú session kezeléssel egészítettem ki, és XTemplate sablonkezelőt használtam (működés közben itt tekinthető meg"). Ezt ehhez az oldalhoz csatoltan megtalálod, habár még nem építettem OOPHP elemeket bele. Ezt majd egy másik könyvlapon tárgyalom.
Csatolmány | Méret |
---|---|
crm5xtpl_adodb.zip | 296.69 KB |
- A hozzászóláshoz be kell jelentkezni