<?xml 
version="1.0" encoding="utf-8"?>
<rss version="2.0" 
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
>

<channel xml:lang="fr">
	<title>Minimalteck.fr</title>
	<link>http://minimalteck.fr/</link>
	
	<language>fr</language>
	<generator>SPIP - www.spip.net</generator>

	<image>
		<title>Minimalteck.fr</title>
		<url>http://minimalteck.fr/local/cache-vignettes/L48xH48/siteon0-e5814.png</url>
		<link>http://minimalteck.fr/</link>
		<height>48</height>
		<width>48</width>
	</image>



<item xml:lang="fr">
		<title>Un PEAR Pager_Wrapper pour PDO</title>
		<link>http://minimalteck.fr/dev-web/un-pear-pager_wrapper-pour-pdo</link>
		<guid isPermaLink="true">http://minimalteck.fr/dev-web/un-pear-pager_wrapper-pour-pdo</guid>
		<dc:date>2008-10-31T17:32:13Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Minimalteck</dc:creator>


		<dc:subject>Code[s]</dc:subject>
		<dc:subject>PDO</dc:subject>
		<dc:subject>PHP</dc:subject>

		<description>Selon le PEAR ::Pager tutorials de Lorenzo Alberton, voici un Wrapper Pager/PDO, inspir&#233; largement du Pager_Wrapper contenu dans la doc du package. 'Sliding', // 'delta' =&gt; 2, // 'perPage' =&gt; 15, // ) ; // $paged_data = Pager_Wrapper_MDB2($db, $query, $pagerOptions) ; // //$paged_data['data'] ; //paged data // //$paged_data['links'] ; //xhtml links for page navigation // //$paged_data['page_numbers'] ; //array('current', 'total') ; // /** * Helper method - Rewrite the query into a &quot;SELECT (...)

-
&lt;a href="http://minimalteck.fr/dev-web/" rel="directory"&gt;D&#233;v. Web&lt;/a&gt;

/ 
&lt;a href="http://minimalteck.fr/code-s" rel="tag"&gt;Code[s]&lt;/a&gt;, 
&lt;a href="http://minimalteck.fr/pdo" rel="tag"&gt;PDO&lt;/a&gt;, 
&lt;a href="http://minimalteck.fr/php" rel="tag"&gt;PHP&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Selon le &lt;a href='http://www.alberton.info/pear_pager_tutorial_database_results.html' class='spip_out' rel='external'&gt;PEAR ::Pager tutorials&lt;/a&gt; de &lt;a href='http://www.alberton.info/' class='spip_out' rel='external'&gt;Lorenzo Alberton&lt;/a&gt;, voici un Wrapper Pager/PDO, inspir&#233; largement du &lt;a href='http://cvs.php.net/viewvc.cgi/pear/Pager/examples/Pager_Wrapper.php?view=markup' class='spip_out' rel='external'&gt;Pager_Wrapper&lt;/a&gt; contenu dans la doc du package.&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;?php&lt;br /&gt; // SAMPLE USAGE&lt;br /&gt; // ------------&lt;br /&gt; //&lt;br /&gt; // $query = 'SELECT this, that FROM mytable';&lt;br /&gt; // require_once 'Pager_Wrapper.php'; //this file&lt;br /&gt; // $pagerOptions = array(&lt;br /&gt; // 'mode' =&gt; 'Sliding',&lt;br /&gt; // 'delta' =&gt; 2,&lt;br /&gt; // 'perPage' =&gt; 15,&lt;br /&gt; // );&lt;br /&gt; // $paged_data = Pager_Wrapper_MDB2($db, $query, $pagerOptions);&lt;br /&gt; // //$paged_data['data']; //paged data&lt;br /&gt; // //$paged_data['links']; //xhtml links for page navigation&lt;br /&gt; // //$paged_data['page_numbers']; //array('current', 'total');&lt;br /&gt; //&lt;br /&gt; &lt;br /&gt; /**&lt;br /&gt; * Helper method - Rewrite the query into a &quot;SELECT COUNT(*)&quot; query.&lt;br /&gt; * @param string $sql query&lt;br /&gt; * @return string rewritten query OR false if the query can't be rewritten&lt;br /&gt; * @access private&lt;br /&gt; */&lt;br /&gt; function rewriteCountQuery($sql)&lt;br /&gt; {&lt;br /&gt; if (preg_match('/^\s*SELECT\s+\bDISTINCT\b/is', $sql) ||&lt;br /&gt; preg_match('/\s+GROUP\s+BY\s+/is', $sql) ||&lt;br /&gt; preg_match('/\s+UNION\s+/is', $sql)) {&lt;br /&gt; return false;&lt;br /&gt; }&lt;br /&gt; $open_parenthesis = '(?:\()';&lt;br /&gt; $close_parenthesis = '(?:\))';&lt;br /&gt; $subquery_in_select = $open_parenthesis.'.*\bFROM\b.*'.$close_parenthesis;&lt;br /&gt; $pattern = '/(?:.*'.$subquery_in_select.'.*)\bFROM\b\s+/Uims';&lt;br /&gt; if (preg_match($pattern, $sql)) {&lt;br /&gt; return false;&lt;br /&gt; }&lt;br /&gt; $subquery_with_limit_order = $open_parenthesis.'.*\b(LIMIT|ORDER)\b.*'.$close_parenthesis;&lt;br /&gt; $pattern = '/.*\bFROM\b.*(?:.*'.$subquery_with_limit_order.'.*).*/Uims';&lt;br /&gt; if (preg_match($pattern, $sql)) {&lt;br /&gt; return false;&lt;br /&gt; }&lt;br /&gt; $queryCount = preg_replace('/(?:.*)\bFROM\b\s+/Uims', 'SELECT COUNT(*) FROM ', $sql, 1);&lt;br /&gt; list($queryCount, ) = preg_split('/\s+ORDER\s+BY\s+/is', $queryCount);&lt;br /&gt; list($queryCount, ) = preg_split('/\bLIMIT\b/is', $queryCount);&lt;br /&gt; return trim($queryCount);&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; /**&lt;br /&gt; * PDO's version of Pager_Wrapper&lt;br /&gt; * @param object PDO instance&lt;br /&gt; * @param string db query&lt;br /&gt; * @param array PEAR::Pager options&lt;br /&gt; * @param boolean Disable pagination (get all results)&lt;br /&gt; * @param integer fetch mode constant&lt;br /&gt; * @return array with links and paged data&lt;br /&gt; */&lt;br /&gt; function Pager_Wrapper_PDO($db, $query, $pager_options = array(), $disabled = false, $fetchMode = PDO::FETCH_ASSOC){&lt;br /&gt; if (!array_key_exists('totalItems', $pager_options)) {&lt;br /&gt; if ($countQuery = rewriteCountQuery($query)) {&lt;br /&gt; $stmt = $db-&gt;prepare($countQuery);&lt;br /&gt; $stmt-&gt;execute();&lt;br /&gt; $totalItems = $stmt-&gt;fetchColumn();&lt;br /&gt; }else{&lt;br /&gt; $stmt = $db-&gt;prepare($query);&lt;br /&gt; if (!$stmt) {&lt;br /&gt; echo &quot;\nPDO::errorCode(): &quot;;&lt;br /&gt; print $db-&gt;errorCode();&lt;br /&gt; die();&lt;br /&gt; }&lt;br /&gt; $stmt-&gt;execute();&lt;br /&gt; if ($stmt-&gt;execute() === FALSE) {&lt;br /&gt; echo &quot;\nPDO::errorCode()toto: &quot;;&lt;br /&gt; print $db-&gt;errorCode();&lt;br /&gt; die();&lt;br /&gt; }&lt;br /&gt; $rows = $stmt-&gt;fetchAll(PDO::FETCH_COLUMN);&lt;br /&gt; $totalItems = count($rows);&lt;br /&gt; &lt;br /&gt; }&lt;br /&gt; $pager_options['totalItems'] = $totalItems;&lt;br /&gt; }&lt;br /&gt; require_once 'Pager/Pager.php';&lt;br /&gt; $pager = Pager::factory($pager_options);&lt;br /&gt; &lt;br /&gt; $page = array();&lt;br /&gt; $page['links'] = $pager-&gt;links;&lt;br /&gt; $page['totalItems'] = $pager_options['totalItems'];&lt;br /&gt; $page['page_numbers'] = array(&lt;br /&gt; 'current' =&gt; $pager-&gt;getCurrentPageID(),&lt;br /&gt; 'total' =&gt; $pager-&gt;numPages()&lt;br /&gt; );&lt;br /&gt; list($page['from'], $page['to']) = $pager-&gt;getOffsetByPageId();&lt;br /&gt; $page['limit'] = $page['to'] - $page['from'] +1;&lt;br /&gt; &lt;br /&gt; // fix offset&lt;br /&gt; // limit 1,10 can not retrive the first record of result set.&lt;br /&gt; $page['from'] = $page['from'] - 1;&lt;br /&gt; &lt;br /&gt; if (!$disabled) {&lt;br /&gt; $query .= ' LIMIT ' . $page['from'] . ', ' . $pager_options['perPage'];&lt;br /&gt; }&lt;br /&gt; // var_dump($query);&lt;br /&gt; $stmt = $db-&gt;prepare($query);&lt;br /&gt; if (!$stmt) {&lt;br /&gt; echo &quot;\nPDO::errorCode(): &quot;;&lt;br /&gt; print $db-&gt;errorCode();print_r($db-&gt;errorInfo());&lt;br /&gt; die();&lt;br /&gt; }&lt;br /&gt; $stmt-&gt;execute();&lt;br /&gt; $page['data'] = $stmt-&gt;fetchAll($fetchMode); &lt;br /&gt; if ($disabled) {&lt;br /&gt; $page['links'] = '';&lt;br /&gt; $page['page_numbers'] = array(&lt;br /&gt; 'current' =&gt; 1,&lt;br /&gt; 'total' =&gt; 1&lt;br /&gt; );&lt;br /&gt; } &lt;br /&gt; &lt;br /&gt; // var_dump($pager);&lt;br /&gt; return $page;&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt; ?&gt;&lt;/code&gt;&lt;/div&gt; &lt;p&gt;Bon le code est pas fignol&#233;&#8230; mais on peut d&#233;j&#224; l'utiliser &#224; des fins de tests :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;?php&lt;br /&gt; require_once('DatabaseConnection.class.php');&lt;br /&gt; //copy the Pager_Wrapper file where you can include it&lt;br /&gt; require_once './Pager_Wrapper.php';&lt;br /&gt; $db = DatabaseConnection::get()-&gt;handle();&lt;br /&gt; $db-&gt;setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);&lt;br /&gt; //skipped the db connection code...&lt;br /&gt; //let's just suppose we have a valid db connection in $db.&lt;br /&gt; &lt;br /&gt; $pager_options = array(&lt;br /&gt; 'mode' =&gt; 'Sliding',&lt;br /&gt; 'perPage' =&gt; 2,&lt;br /&gt; 'delta' =&gt; 2,&lt;br /&gt; );&lt;br /&gt; $query = 'SELECT * FROM person';&lt;br /&gt; $paged_data = Pager_Wrapper_PDO($db, $query, $pager_options);&lt;br /&gt; &lt;br /&gt; //show the results&lt;br /&gt; echo '&lt;ul&gt;';&lt;br /&gt; foreach ($paged_data['data'] as $product) {&lt;br /&gt; echo '&lt;li&gt;'.$product['id_person'].': '.$product['name'].'&lt;/li&gt;';&lt;br /&gt; }&lt;br /&gt; echo '&lt;/ul&gt;';&lt;br /&gt; &lt;br /&gt; //show the links&lt;br /&gt; echo $paged_data['links'];&lt;br /&gt; ?&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;
		&lt;div class='rss_ps'&gt;&lt;p&gt;le PDO ::MYSQL_ATTR_USE_BUFFERED_QUERY est mis &#224; TRUE pour permettre d'effectuer des requ&#234;tes multiples sur la m&#234;me connexion&#8230;
&lt;br /&gt;Sinon 'a marche p&#244; !!!
&lt;br /&gt;Du moins sur ma plateforme de test &#224; l'arrache&#8230;&lt;/p&gt; &lt;p&gt;Alors que dans la litt&#233;rature, j'eu appris que la fermeture du 'PDO cursor' r&#232;glait le pb, via la PDOStatement ::closeCursor&#8230; &lt;br /&gt;c'est m&#234;me indiqu&#233; dans &lt;a href='http://fr.php.net/manual/fr/pdostatement.closecursor.php' class='spip_out' rel='external'&gt;la doc PDO&lt;/a&gt; : &quot;&lt;cite&gt;PDOStatement-&gt;closeCursor &#8212; Ferme le curseur, permettant &#224; la requ&#234;te d'&#234;tre de nouveau ex&#233;cut&#233;e&quot;&lt;/cite&gt;&lt;/p&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>PDO vite dit...</title>
		<link>http://minimalteck.fr/dev-web/pdo-vite-dit</link>
		<guid isPermaLink="true">http://minimalteck.fr/dev-web/pdo-vite-dit</guid>
		<dc:date>2008-10-31T11:23:52Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Minimalteck</dc:creator>


		<dc:subject>Rapido Tuto</dc:subject>
		<dc:subject>PDO</dc:subject>
		<dc:subject>PHP</dc:subject>

		<description>PDO en bref : Introduit en PHP 5.1, cette extension PECL permet d'utiliser de fa&#231;on standardis&#233;e plusieurs types de SGBD via l'utilisation de drivers sp&#233;cifiques. Proche de PEAR DB dans son utilisation, PDO est beaucoup plus rapide car &#233;crite en C : ses performances sont proches des anciens drivers natifs. Les Classes de PDO : 3 principales : PDO, g&#233;rant la connexion entre PHP et un serveur de base de donn&#233;es ; PDOStatement, repr&#233;sentant une requ&#234;te pr&#233;par&#233;e et qui fournit une fois cette (...)

-
&lt;a href="http://minimalteck.fr/dev-web/" rel="directory"&gt;D&#233;v. Web&lt;/a&gt;

/ 
&lt;a href="http://minimalteck.fr/rapido-tuto" rel="tag"&gt;Rapido Tuto&lt;/a&gt;, 
&lt;a href="http://minimalteck.fr/pdo" rel="tag"&gt;PDO&lt;/a&gt;, 
&lt;a href="http://minimalteck.fr/php" rel="tag"&gt;PHP&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;div class=&quot;cs_sommaire cs_sommaire_avec_fond&quot; id=&quot;outil_sommaire&quot;&gt; &lt;div class=&quot;cs_sommaire_inner&quot;&gt; &lt;div class=&quot;cs_sommaire_titre_avec_fond&quot;&gt; Sommaire &lt;/div&gt; &lt;ul&gt; &lt;li&gt;&lt;a title=&quot;PDO en bref :&quot; href=&quot;http://minimalteck.fr/spip.php?page=backend&amp;id_mot=6#outil_sommaire_0&quot;&gt;PDO en bref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a title=&quot;Les Classes de PDO :&quot; href=&quot;http://minimalteck.fr/spip.php?page=backend&amp;id_mot=6#outil_sommaire_1&quot;&gt;Les Classes de PDO&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a title=&quot;M&#233;thodes pour ex&#233;cuter une requ&#234;te :&quot; href=&quot;http://minimalteck.fr/spip.php?page=backend&amp;id_mot=6#outil_sommaire_2&quot;&gt;M&#233;thodes pour ex&#233;cuter une (&#8230;)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a title=&quot;Requ&#234;te de selection, traitement des r&#233;sultats&quot; href=&quot;http://minimalteck.fr/spip.php?page=backend&amp;id_mot=6#outil_sommaire_3&quot;&gt;Requ&#234;te de selection, traitemen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a title=&quot;Traitements de tous les r&#233;sultats :&quot; href=&quot;http://minimalteck.fr/spip.php?page=backend&amp;id_mot=6#outil_sommaire_4&quot;&gt;Traitements de tous les (&#8230;)&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/div&gt; &lt;/div&gt;&lt;h3 class=&quot;spip&quot; id=&quot;outil_sommaire_0&quot;&gt;&lt;a title=&quot;Sommaire&quot; href=&quot;http://minimalteck.fr/spip.php?page=backend&amp;id_mot=6#outil_sommaire&quot; class=&quot;sommaire_ancre&quot;&gt; &lt;/a&gt;PDO en bref :&lt;/h3&gt; &lt;p&gt;Introduit en PHP 5.1, cette extension PECL permet d'utiliser de fa&#231;on standardis&#233;e plusieurs types de SGBD via l'utilisation de drivers sp&#233;cifiques. Proche de PEAR DB dans son utilisation, PDO est beaucoup plus rapide car &#233;crite en C : ses performances sont proches des anciens drivers natifs.&lt;/p&gt; &lt;h3 class=&quot;spip&quot; id=&quot;outil_sommaire_1&quot;&gt;&lt;a title=&quot;Sommaire&quot; href=&quot;http://minimalteck.fr/spip.php?page=backend&amp;id_mot=6#outil_sommaire&quot; class=&quot;sommaire_ancre&quot;&gt; &lt;/a&gt;Les Classes de PDO :&lt;/h3&gt; &lt;p&gt;&lt;img src=&quot;http://minimalteck.fr/local/cache-vignettes/L8xH11/puce-32883.gif&quot; width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; &lt;strong&gt;3 principales :&lt;/strong&gt;&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; PDO, g&#233;rant la connexion entre PHP et un serveur de base de donn&#233;es ;&lt;/li&gt;&lt;li&gt; PDOStatement, repr&#233;sentant une requ&#234;te pr&#233;par&#233;e et qui fournit une fois cette derni&#232;re ex&#233;cut&#233;e, le jeu de r&#233;sultats associ&#233; ;&lt;/li&gt;&lt;li&gt; PDOException, permettant le traitement des erreurs.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;img src=&quot;http://minimalteck.fr/local/cache-vignettes/L8xH11/puce-32883.gif&quot; width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; &lt;strong&gt;Connexion &#224; un SGDB :&lt;/strong&gt;
&lt;br /&gt;PDO utlise un DSN pour d&#233;crire la base de donn&#233;es &#224; laquelle on souhaite se connecter, comme pour PEAR DB&#8230;
&lt;br /&gt;Ce DSN va &#234;tre passer en param&#234;tre au moment de &lt;a href='http://fr.php.net/manual/fr/pdo.construct.php' class='spip_out' rel='external'&gt;l'instanciation de la classe PDO&lt;/a&gt; :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;PDO::__construct ( string $dsn [, string $username [, string $password [, array $driver_options ]]] )&lt;/code&gt;&lt;/div&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;$db = new PDO ('driver_type:host=hostname;dbname=name_of_db', 'user', 'user_password');&lt;/code&gt;&lt;/div&gt; &lt;p&gt;Mais attention, la syntaxe du DSN varie en fonction du SGDB utilis&#233; (cf. &lt;a href='http://fr.php.net/manual/fr/pdo.drivers.php' class='spip_out' rel='external'&gt;http://fr.php.net/manual/fr/pdo.dri&#8230;&lt;/a&gt;) !
&lt;br /&gt;Ainsi, pour Mysql (&lt;a href='http://fr.php.net/manual/fr/ref.pdo-mysql.php' class='spip_out' rel='external'&gt;driver : pdo_mysql&lt;/a&gt; et &lt;a href='http://fr.php.net/manual/fr/ref.pdo-mysql.connection.php' class='spip_out' rel='external'&gt;DSN&lt;/a&gt;) on peut avoir en DSN :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;mysql:host=hostname;dbname=name_of_database&lt;br /&gt; mysql:host=hostname;port=num_port;dbname=name_of_database&lt;br /&gt; mysql:unix_socket=/path/to/mysql.sock;dbname=name_of_database&lt;/code&gt;&lt;/div&gt; &lt;p&gt;&lt;img src=&quot;http://minimalteck.fr/local/cache-vignettes/L8xH11/puce-32883.gif&quot; width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; &lt;strong&gt;Gestion des erreurs et fermeture de connexions :&lt;/strong&gt;&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;?php&lt;br /&gt; $dsn = 'mysql:host=127.0.0.1;port=3306;dbname=dbtest';&lt;br /&gt; $user = 'user';&lt;br /&gt; $password = 'passwd';&lt;br /&gt; try {&lt;br /&gt; $db = new PDO ($dsn,$user,$password);&lt;br /&gt; } catch (PDOException $e) {&lt;br /&gt; var_dump($e-&gt;getMessage());&lt;br /&gt; die();&lt;br /&gt; }&lt;br /&gt; if ($db) {&lt;br /&gt; $db = NULL; //On ferme la connexion en assignant la valeur &quot;NULL&quot; &#224; la variable g&#233;rant l'instance PDO &lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; ?&gt;&lt;/code&gt;&lt;/div&gt;
&lt;h3 class=&quot;spip&quot; id=&quot;outil_sommaire_2&quot;&gt;&lt;a title=&quot;Sommaire&quot; href=&quot;http://minimalteck.fr/spip.php?page=backend&amp;id_mot=6#outil_sommaire&quot; class=&quot;sommaire_ancre&quot;&gt; &lt;/a&gt;- M&#233;thodes pour ex&#233;cuter une requ&#234;te :&lt;/h3&gt; &lt;p&gt;Il existe 2 m&#233;thodes : exec() et query().&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; query() : Pour les requ&#234;tes du type SELECT, EXPLAIN, SHOW, DESC, SET&#8230; Retourne une instance PDOStatement pour le traitement des r&#233;sultats&lt;/li&gt;&lt;li&gt; exec() : Pour les requ&#234;tes ne renvoyant pas de jeu de r&#233;sultats, comme INSERT, DELETE, UPDATE , REPLACE.
&lt;br /&gt;Cette m&#233;thode retourne le nombre de lignes affect&#233;es [&lt;a href='#nb_2A' class='spip_note' rel='footnote' title='2 dans le cas d'un REPLACE !!! petit rappel pour un d&#233;v fatigu&#233; qui se (...)' id='nh_2A'&gt;*&lt;/a&gt;]&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;En cas d'erreur ces 2 m&#233;thodes renvoient &lt;strong&gt;FALSE&lt;/strong&gt;.
&lt;br /&gt;Il est donc imp&#233;ratif d'utiliser le comparateur de valeur &quot;===&quot; et non le comparateur de type &quot;==&quot; si l'on veut effectuer un test sur la requ&#234;te&#8230; car une requ&#234;te valide peut retourner la valeur 0 (aucun r&#233;sultat) !&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;if ($db-&gt;query($request) === FALSE){&lt;br /&gt; echo 'Peste ! Une erreur inopin&#233;e est survenue !';&lt;br /&gt; die();&lt;br /&gt; }&lt;/code&gt;&lt;/div&gt;
&lt;h3 class=&quot;spip&quot; id=&quot;outil_sommaire_3&quot;&gt;&lt;a title=&quot;Sommaire&quot; href=&quot;http://minimalteck.fr/spip.php?page=backend&amp;id_mot=6#outil_sommaire&quot; class=&quot;sommaire_ancre&quot;&gt; &lt;/a&gt;- Requ&#234;te de selection, traitement des r&#233;sultats&lt;/h3&gt; &lt;p&gt;&lt;strong&gt;2 M&#233;thodes :&lt;/strong&gt;&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; &lt;a href='http://fr.php.net/manual/fr/pdostatement.fetch.php' class='spip_out' rel='external'&gt;PDOStatement ::fetch&lt;/a&gt; : &lt;strong&gt;r&#233;cup&#232;re une ligne&lt;/strong&gt; depuis un jeu de r&#233;sultats associ&#233; &#224; l'objet PDOStatement. &lt;a href='http://fr.php.net/manual/fr/pdostatement.closecursor.php' class='spip_out' rel='external'&gt;PDOStatement ::closeCursor()&lt;/a&gt; lib&#232;re la connexion du serveur, permettant ainsi &#224; d'autres requ&#234;tes SQL d'&#234;tre ex&#233;cut&#233;es, mais quitte la requ&#234;te, permettant ainsi qu'elle soit de nouveau ex&#233;cut&#233;e. &lt;/li&gt;&lt;li&gt; &lt;a href='http://fr.php.net/manual/fr/pdostatement.fetchall.php' class='spip_out' rel='external'&gt;PDOStatement ::fetchAll&lt;/a&gt; : retourne un tableau contenant toutes les lignes du jeu d'enregistrements.&lt;/li&gt;&lt;/ul&gt;
&lt;h3 class=&quot;spip&quot; id=&quot;outil_sommaire_4&quot;&gt;&lt;a title=&quot;Sommaire&quot; href=&quot;http://minimalteck.fr/spip.php?page=backend&amp;id_mot=6#outil_sommaire&quot; class=&quot;sommaire_ancre&quot;&gt; &lt;/a&gt;Traitements de tous les r&#233;sultats :&lt;/h3&gt; &lt;p&gt;&lt;img src=&quot;http://minimalteck.fr/local/cache-vignettes/L8xH11/puce-32883.gif&quot; width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; La &lt;strong&gt;m&#233;thode fetchAll()&lt;/strong&gt; renvoie un tableau contenant TOUS les r&#233;sultats de la requ&#234;te : il suffit donc de parcourir ce tableau pour extraire les r&#233;sultats :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;$sth = $db-&gt;query('SELECT id, name FROM person WHERE 1');&lt;br /&gt; $results = $sth-&gt;fetchAll(PDO::FECTH_ASSOC);&lt;br /&gt; foreach ($result as $row){&lt;br /&gt; echo $row['id']. ': '.$row['name'].'&lt;br /&gt;';&lt;br /&gt; }&lt;br /&gt; $db = NULL;&lt;/code&gt;&lt;/div&gt; &lt;p&gt;&lt;img src=&quot;http://minimalteck.fr/local/cache-vignettes/L8xH11/puce-32883.gif&quot; width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; La &lt;strong&gt;m&#233;thode s&#233;quentielle fetch()&lt;/strong&gt; retourne les r&#233;sultats ligne par ligne permettant ainsi de ne pas charger l'ensemble des r&#233;sultats en m&#233;moire, utile surtout pour un grand nombre d'enregistrements.&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;$sth = $db-&gt;query('SELECT id, name FROM person WHERE 1');&lt;br /&gt; while ($row = $sth-&gt;fetch(PDO::FECTH_ASSOC);){&lt;br /&gt; echo $row['id']. ': '.$row['name'].'&lt;br /&gt;';&lt;br /&gt; }&lt;br /&gt; /* L'appel suivant &#224; closeCursor() peut &#234;tre requis par quelques drivers, notamment Mysql */&lt;br /&gt; $sth-&gt;closeCursor();&lt;br /&gt; $db = NULL;&lt;/code&gt;&lt;/div&gt; &lt;p&gt;Bon, maintenant qu'on a appr&#233;hender la b&#234;te, Allez on code ! Voir comment se passe l'interfa&#231;age avec les autres packages PEAR, je pense &#224; PAGER notamment&#8230;&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;p&gt;&lt;span class=&quot;csfoo htmla&quot;&gt;&lt;/span&gt;[&lt;a href='#nh_2A' id='nb_2A' class='spip_note' title='Notes _2A' rev='footnote'&gt;*&lt;/a&gt;] &lt;span class=&quot;csfoo htmlb&quot;&gt;&lt;/span&gt;2 dans le cas d'un REPLACE !!! petit rappel pour un d&#233;v fatigu&#233; qui se reconna&#238;tra&#8230; &lt;img alt=&quot;:-p&quot; title=&quot;:-p&quot; class=&quot;no_image_filtrer format_png&quot; src=&quot;http://www.minimalteck.fr/plugins/couteau_suisse/img/smileys/tire_la_langue.png&quot; width=&quot;19&quot; height=&quot;19&quot;/&gt;&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_ps'&gt;&lt;p&gt;Plus d'infos : &lt;a href='http://fr.php.net/manual/fr/book.pdo.php' class='spip_out' rel='external'&gt;http://fr.php.net/manual/fr/book.pdo.php&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Singleton PDO</title>
		<link>http://minimalteck.fr/dev-web/singleton-pdo</link>
		<guid isPermaLink="true">http://minimalteck.fr/dev-web/singleton-pdo</guid>
		<dc:date>2008-10-31T09:58:21Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Minimalteck</dc:creator>


		<dc:subject>Code[s]</dc:subject>
		<dc:subject>PDO</dc:subject>
		<dc:subject>PHP</dc:subject>

		<description>La classe singleton : engine = 'mysql' ; $this-&gt;host = 'localhost' ; $this-&gt;database = 'nom_base' ; $this-&gt;user = 'user' ; $this-&gt;pass = 'user_password' ; $dns = $this-&gt;engine.':dbname='.$this-&gt;database.&quot; ;host=&quot;.$this-&gt;host ; try $this-&gt;_handle = new PDO( $dns, $this-&gt;user, $this-&gt;pass ) ; $this-&gt;_handle-&gt;query(&quot;SET NAMES utf8&quot;) ;//FOR USING UTF-8 $this-&gt;_handle-&gt;query(&quot;SET CHARACTER SET 'utf8'&quot;) ;//FOR USING UTF-8 return true ; catch (PDOException $e) print 'Erreur : (...)

-
&lt;a href="http://minimalteck.fr/dev-web/" rel="directory"&gt;D&#233;v. Web&lt;/a&gt;

/ 
&lt;a href="http://minimalteck.fr/code-s" rel="tag"&gt;Code[s]&lt;/a&gt;, 
&lt;a href="http://minimalteck.fr/pdo" rel="tag"&gt;PDO&lt;/a&gt;, 
&lt;a href="http://minimalteck.fr/php" rel="tag"&gt;PHP&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;div class=&quot;cs_sommaire cs_sommaire_avec_fond&quot; id=&quot;outil_sommaire&quot;&gt; &lt;div class=&quot;cs_sommaire_inner&quot;&gt; &lt;div class=&quot;cs_sommaire_titre_avec_fond&quot;&gt; Sommaire &lt;/div&gt; &lt;ul&gt; &lt;li&gt;&lt;a title=&quot;La classe singleton :&quot; href=&quot;http://minimalteck.fr/spip.php?page=backend&amp;id_mot=6#outil_sommaire_0&quot;&gt;La classe singleton&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a title=&quot;Son utilisation :&quot; href=&quot;http://minimalteck.fr/spip.php?page=backend&amp;id_mot=6#outil_sommaire_1&quot;&gt;Son utilisation&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/div&gt; &lt;/div&gt;&lt;h3 class=&quot;spip&quot; id=&quot;outil_sommaire_0&quot;&gt;&lt;a title=&quot;Sommaire&quot; href=&quot;http://minimalteck.fr/spip.php?page=backend&amp;id_mot=6#outil_sommaire&quot; class=&quot;sommaire_ancre&quot;&gt; &lt;/a&gt;La classe singleton :&lt;/h3&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;?php&lt;br /&gt; class DatabaseConnection {&lt;br /&gt; &lt;br /&gt; public static function get() {&lt;br /&gt; static $db = null;&lt;br /&gt; if ( $db == null ) {&lt;br /&gt; $db = new DatabaseConnection();&lt;br /&gt; }&lt;br /&gt; return $db;&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; private $_handle = null;&lt;br /&gt; &lt;br /&gt; private function __construct() {&lt;br /&gt; $this-&gt;engine = 'mysql';&lt;br /&gt; $this-&gt;host = 'localhost';&lt;br /&gt; $this-&gt;database = 'nom_base';&lt;br /&gt; $this-&gt;user = 'user';&lt;br /&gt; $this-&gt;pass = 'user_password';&lt;br /&gt; $dns = $this-&gt;engine.':dbname='.$this-&gt;database.&quot;;host=&quot;.$this-&gt;host;&lt;br /&gt; try {&lt;br /&gt; $this-&gt;_handle = new PDO( $dns, $this-&gt;user, $this-&gt;pass );&lt;br /&gt; $this-&gt;_handle-&gt;query(&quot;SET NAMES utf8&quot;);//FOR USING UTF-8&lt;br /&gt; $this-&gt;_handle-&gt;query(&quot;SET CHARACTER SET 'utf8'&quot;);//FOR USING UTF-8&lt;br /&gt; return true;&lt;br /&gt; } catch (PDOException $e){&lt;br /&gt; print 'Erreur : '.$e-&gt;getMessage().'&lt;br&gt;';&lt;br /&gt; die();&lt;br /&gt; }&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; public function handle() {&lt;br /&gt; return $this-&gt;_handle;&lt;br /&gt; }&lt;br /&gt; }&lt;br /&gt; ?&gt;&lt;/code&gt;&lt;/div&gt;
&lt;h3 class=&quot;spip&quot; id=&quot;outil_sommaire_1&quot;&gt;&lt;a title=&quot;Sommaire&quot; href=&quot;http://minimalteck.fr/spip.php?page=backend&amp;id_mot=6#outil_sommaire&quot; class=&quot;sommaire_ancre&quot;&gt; &lt;/a&gt;Son utilisation :&lt;/h3&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;?php&lt;br /&gt; $dbx = DatabaseConnection::get()-&gt;handle();&lt;br /&gt; $results=$dbx-&gt;query('SELECT * FROM bidule'); &lt;br /&gt; $results-&gt;setFetchMode(PDO::FETCH_OBJ); // retour d'un objet std&lt;br /&gt; while( $row = $resultats-&gt;fetch() ) {&lt;br /&gt; echo 'Utilisateur : '.$row-&gt;id.'&lt;br /&gt;'; // on affiche l'id des entr&#233;es de la table bidule&lt;br /&gt; }&lt;br /&gt; $results-&gt;closeCursor(); // on ferme le curseur des r&#233;sultats : n&#233;cessaire pour pouvoir r&#233;utiliser la connexion $dbx pour ex&#233;cuter une nouvelle requ&#234;te...&lt;br /&gt; ?&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>



</channel>

</rss>
