| 
<?php/**
 * EXEMPLES UTILISATION aDB
 *
 */
 define ('HOST', '****');
 define ('LOGIN', '****');
 define ('PWD', '****');
 define ('DB', '****');
 
 define ('HOST2', '*****');
 define ('LOGIN2', '*****');
 define ('PWD2', '*****');
 define ('DB2', '*****');
 
 define ('HOST3', '***');
 define ('LOGIN3', '***');
 define ('PWD3', '***');
 define ('DB3', '***');
 
 require_once 'class.aDB.php';
 
 try {
 
 /**
 * instanciation with mssql db server via aDBFactory
 */
 $test = aDBFactory::getInstance ('mssql', array ('HOST' => HOST, 'LOGIN' => LOGIN, 'PWD' => PWD, 'DB' => DB));
 /**
 * query prepared
 * :iId is an integer (aDB::PARAM_INT) and has the value 6
 * Query is executed
 * results are fetched in an associative array if query returns something
 */
 $sQuery = 'SELECT dest_id FROM destinataires WHERE dest_id = :iId';
 $test -> prepare ($sQuery);
 $test -> bindValue (':iId', 6, aDB::PARAM_INT );
 $test -> execute ();
 if ($test -> count () > 0 ) {
 echo '<pre>', print_r ($test -> fetchAll(aDB::FETCH_ASSOC)), '</pre>';
 echo '<hr />';
 }
 /**
 * query prepared
 * :iId has value 1, and type is automatically chosen from the value (so : integer)
 * Query is executed
 * results are fetched in an associative array  if query returns something
 */
 $sQuery = 'SELECT dest_id FROM destinataires WHERE dest_id = :iId';
 $test -> prepare ($sQuery);
 $test -> bindValue (':iId', 1);
 $test -> execute ();
 if ($test -> count () > 0 ) {
 echo '<pre>', print_r ($test -> fetchAll(aDB::FETCH_ASSOC)), '</pre>';
 echo '<hr />';
 }
 
 /**
 * query prepared
 * :sRS is a string (aDB::PARAM_STR) and has the value 'CUSTOM PROMO'
 * Query is executed
 * results are fetched in an associative array
 */
 $sQuery = 'SELECT dest_id, dest_raison FROM destinataires WHERE dest_raison = :sRS';
 $test -> prepare ($sQuery);
 $test -> bindValue (':sRS', 'CUSTOM PROMO', aDB::PARAM_STR);
 $test -> execute ();
 echo '<pre>', print_r ($test -> fetchAll(aDB::FETCH_ASSOC)), '</pre>';
 echo '<hr />';
 
 /**
 * Query is executed
 * Limitation is set to : staring offset = 0, length = 10
 * results are fetched in an associative array
 * Limitation is updated to the next set of results
 * results are fetched
 */
 $sQuery = 'SELECT dest_id, dest_raison FROM destinataires where dest_id < 25';
 $test -> query ($sQuery);
 $test -> set_limit (0, 10);
 echo '<pre>', print_r ($test -> fetchAll(aDB::FETCH_ASSOC)), '</pre>';
 echo '<p>NEXT PAGE</p>';
 $test -> next_limit ();
 echo '<pre>', print_r ($test -> fetchAll(aDB::FETCH_ASSOC)), '</pre>';
 echo '<hr />';
 /**
 * Query is executed
 * Limitation is set to : staring offset = 0, length = 10
 * results are fetched in a grouped array : index is the dest_id, and it points to an associative array with dest_raison
 * Limitation is canceled for the next query
 */
 $test -> query ($sQuery);
 $test -> set_limit (0, 10);
 echo '<pre>', print_r ($test -> fetchAll(aDB::FETCH_GROUP|aDB::FETCH_ASSOC)), '</pre>';
 echo '<hr />';
 $test -> set_limit ();
 
 /**
 * Query is executed
 * first dest_raison value is retrieved (column 1; column 0 being dest_id)
 */
 $sQuery2 = 'SELECT top 1 dest_id, dest_raison FROM destinataires';
 $test -> query ($sQuery2);
 echo $test -> fetchColumn (1);
 echo '<hr />';
 
 /**
 * Staring a transaction
 * INSERT query is executed
 * Inserted ID is retrieved
 * We roll the transaction back : insertion is canceled
 */
 $test -> startTransaction ();
 $sQuery3 = 'INSERT INTO transporteurs (tp_libelle) values (\'tp_test\')';
 $test -> query ($sQuery3);
 echo $test -> lastInsertId ();
 $test -> rollbackTransaction ();
 
 /**
 * Limitation is set : starting offset is 3, length is 3
 * Query is execute
 * Results are fetched in a numeric array
 */
 $test -> set_limit (3, 3);
 $test -> query ($sQuery);
 echo '<pre>', print_r ($test -> fetchAll (aDB::FETCH_NUM)), '</pre>';
 echo '<hr />';
 
 /**
 * Query is executed
 * Limitation is set : starting offset is 10, no length limit
 * results are fetched in an array both associative and numeric
 * Limitations is canceled for the next query
 */
 $test -> query ($sQuery);
 $test -> set_limit (10);
 echo '<pre>', print_r ($test -> fetchAll()), '</pre>';
 $test -> set_limit ();
 echo '<hr />';
 
 /**
 * Query is executed
 * results are fetched through an iterator wich returns both an associative and numeric array
 */
 $test -> query ($sQuery);
 $it = $test -> fetch();
 foreach ($it as $aVal) {
 echo '<pre>', print_r ($aVal), '</pre>';
 }
 
 /**
 * Query is executed
 * results are fetched through an iterator wich is grouped and associative
 */
 echo '<hr />';
 $test -> query ($sQuery);
 $it = $test -> fetch(aDB::FETCH_GROUP|aDB::FETCH_ASSOC);
 foreach ($it as $aVal) {
 echo '<pre>', print_r ($aVal), '</pre>';
 }
 /**
 * Limitation is set : Starting offset is 1, length is 3
 * Query has already been executed
 * results are fetched through an iterator wich returns variables corresponding to columns name (just like an extract)
 */
 echo '<hr />';
 $test -> set_limit (1, 3);
 $it = $test -> fetch(aDB::FETCH_EXTRACT);
 foreach ($it as $aVal) {
 echo $dest_id, ' => ', $dest_raison, '<br />';
 }
 $test -> set_limit ();
 
 /**
 * Query is executed
 * results are fetched through an iterator via a while loop
 */
 echo '<hr />';
 $sQuery = 'SELECT dest_id FROM destinataires WHERE dest_id < 25';
 $test -> query ($sQuery);
 $it = $test -> fetch (aDB::FETCH_ASSOC);
 $it -> next ();
 while ($it -> valid ()) {
 echo '<pre>', print_r ($it -> current ()), '</pre>';
 $it -> next ();
 }
 echo '<hr />';
 /**
 * retrieving the same instance of mssql but with a new connection!
 */
 $test = aDBFactory::getInstance ('mssql', array ('HOST' => HOST2, 'LOGIN' => LOGIN2, 'PWD' => PWD2, 'DB' => DB2));
 
 $sQuery = 'SELECT dest_id, dest_raison FROM destinataires where comt_id = 38 and ent_id = 46';
 $test -> query ($sQuery);
 $test -> set_limit (0, 10);
 echo '<pre>', print_r ($test -> fetchAll(aDB::FETCH_ASSOC)), '</pre>';
 echo '<hr />';
 $test -> set_limit ();
 
 /**
 * retrieving a new instance of mysql this time
 */
 $test = aDBFactory::getInstance ('mysql', array ('HOST' => HOST3, 'LOGIN' => LOGIN3, 'PWD' => PWD3, 'DB' => DB3));
 
 $sQuery = 'SELECT * FROM csv';
 $test -> query ($sQuery);
 $test -> set_limit (0, 10);
 echo '<pre>', print_r ($test -> fetchAll(aDB::FETCH_ASSOC)), '</pre>';
 echo '<hr />';
 $test -> set_limit ();
 
 /**
 * back to the instance of mysql with last connection used
 */
 $test = aDBFactory::getInstance ('mssql');
 
 $sQuery = 'SELECT dest_id, dest_raison FROM destinataires where comt_id = 38 and ent_id = 46';
 $test -> query ($sQuery);
 $test -> set_limit (0, 10);
 echo '<pre>', print_r ($test -> fetchAll(aDB::FETCH_ASSOC)), '</pre>';
 echo '<hr />';
 $test -> set_limit ();
 
 /**
 * Fetch server infos if available (an exception is thrown if not and if Exceptions are active)
 */
 //echo $test -> server_info();
 } catch (aDBException $e) {
 echo $e;
 }
 /**
 * Basic Exemple of how to use aDB Exceptions
 * First, HOST is wrong, an aDBExceptionDbConnectorErrors will be caught. So, we modify the host (correct one this time)
 */
 $aCon = array ('HOST' => 'fake', 'LOGIN' => LOGIN3, 'PWD' => PWD3, 'DB' => DB3);
 $iOffset = 2;
 goDB ($aCon, $iOffset);
 
 function goDB (& $aCon, & $iOffset) {
 try {
 
 $myDb = aDBFactory::getInstance ('mysql', $aCon);
 $myDb -> set_limit ($iOffset, 10);
 $sQuery = 'SELECT * FROM csv WHERE id = :fake';
 $myDb -> bindValue (':fake', 1, aDB::PARAM_INT);
 $myDb -> execute ();
 echo '<pre>', print_r ($myDb -> fetchAll(aDB::FETCH_ASSOC)), '</pre>';
 echo '<hr />';
 $myDb -> set_limit ();
 
 } catch (aDBExceptionIllegalClass $e) {
 echo $e, '<br />';
 
 } catch (aDBExceptionDbConnectorErrors $e) {
 /**
 * First error: HOST was a wrong host, so aDB could not connect.
 * Let's change it and rty again :-)
 */
 echo $e, '<br />';
 if ($e -> getCode () === aDBExceptionDbConnectorErrors::CODE_CONNEXION_FAILED) {
 $aCon['HOST'] = HOST3;
 goDB ($aCon, $iOffset);
 }
 /**
 * Third error : Offset is not rood because this query retrieves only 1 row.
 * Set the offset correctly and try again
 */
 if ($e -> getCode () ===aDBExceptionDbConnectorErrors::CODE_INVALID_SEEK_POSITION) {
 $iOffset = 0;
 goDB ($aCon, $iOffset);
 }
 
 } catch (aDBExceptionInvalidClassCalls $e) {
 /**
 * Second error : we tried to bind a value but we forgot to prepare the query first! Let's prepare it and try again.
 */
 echo $e, '<br />';
 if ($e -> getCode() === aDBExceptionInvalidClassCalls::CODE_NO_QUERY_TO_PREPARE) {
 $myDb -> prepare ($sQuery);
 goDB ($aCon, $iOffset);
 }
 if ($e -> getCode() === aDBExceptionInvalidClassCalls::CODE_NEEDLE_NOT_FOUND) {
 /**
 * Fourth error : as we have already bound the :fake, it cannot be bound another time!
 * So, here, we must go to the end : just execute and fetch. It's over :-)
 */
 $myDb -> execute ();
 echo '<pre>', print_r ($myDb -> fetchAll(aDB::FETCH_ASSOC)), '</pre>';
 echo '<hr />';
 $myDb -> set_limit ();
 }
 
 } catch (aDBExceptionTypesError $e) {
 echo $e, '<br />';
 
 } catch (Exception $e) {
 echo $e, '<br />';
 }
 }
 ?>
 |