<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="https://chierchia.fr/wp-content/plugins/pretty-rss-feeds/xslt/pretty-feed.xsl" type="text/xsl" media="screen" ?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>mysql - Ange Chierchia</title>
	<atom:link href="https://chierchia.fr/tag/mysql/feed/" rel="self" type="application/rss+xml" />
	<link>https://chierchia.fr/tag/mysql/</link>
	<description>Développeur Web full-stack</description>
	<lastBuildDate>Sun, 13 Oct 2024 11:01:49 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://chierchia.fr/wp-content/uploads/cropped-16350293-SSDKVqo3-32x32.jpg</url>
	<title>mysql - Ange Chierchia</title>
	<link>https://chierchia.fr/tag/mysql/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
					<title>Faire un str_replace() avec MySQL</title>
					<link>https://chierchia.fr/2014/08/faire-str_replace-mysql/</link>
					<comments>https://chierchia.fr/2014/08/faire-str_replace-mysql/#respond</comments>
		
		<dc:creator><![CDATA[<span class='p-author h-card'>Ange Chierchia</span>]]></dc:creator>
		<pubDate>Wed, 27 Aug 2014 07:46:49 +0000</pubDate>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[back-end]]></category>
		<category><![CDATA[mysql]]></category>
		<guid isPermaLink="false">https://nighcrawl.com/blog/2014/08/faire-str_replace-mysql</guid>

					<description><![CDATA[Lorsque je conçois les sites Web de nos clients, une fois mon travail terminé, je le met en ligne sur un domaine temporaire afin que le client puisse voir, utiliser et surtout alimenter le site Web en contenu avant de l’installer sur son domaine définitif. Une fois le client satisfait, il nous donne le « Go » pour la [&#8230;]]]></description>
										<content:encoded><![CDATA[<div class='e-content'>Lorsque je conçois les sites Web de nos clients, une fois mon travail terminé, je le met en ligne sur un domaine temporaire afin que le client puisse voir, utiliser et surtout alimenter le site Web en contenu avant de l’installer sur son domaine définitif.</p>
<p>Une fois le client satisfait, il nous donne le « Go » pour la mise en ligne, nous transférons alors les fichiers et la base de données sur le domaine final. Parfois, les URLs générées dans le contenu des pages sont erronées suite au transfert sur le domaine définitif, et bien entendu les liens foirent… En PHP, on pourrait faire un bête <code class="language-plaintext highlighter-rouge">str_replace()</code>, ou un <code class="language-plaintext highlighter-rouge">preg_match_all()</code>. Mais en MySQL ? C’est là que la requête qui suit va nous sauver :</p>
<div class="language-plaintext highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code>UPDATE pages SET contenu = REPLACE(contenu, 'http://ancienne.url', 'http://nouvelle.url') WHERE contenu LIKE '%ancienne.url%';
</code></pre>
</div>
</div>
<p>C’est bidon, mais j’ai toujours du mal à m’en souvenir. Le publier ici me permettra de retrouver ça facilement. Après tout, ce blog est avant tout pour moi et si ça peut aider quelqu’un d’autre… </p></div>
]]></content:encoded>
					
					<wfw:commentRss>https://chierchia.fr/2014/08/faire-str_replace-mysql/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
					<title>Expressions régulières avec MySQL</title>
					<link>https://chierchia.fr/2011/07/expressions-regulieres-avec-mysql/</link>
					<comments>https://chierchia.fr/2011/07/expressions-regulieres-avec-mysql/#respond</comments>
		
		<dc:creator><![CDATA[<span class='p-author h-card'>Ange Chierchia</span>]]></dc:creator>
		<pubDate>Fri, 22 Jul 2011 19:08:08 +0000</pubDate>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[back-end]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[regex]]></category>
		<guid isPermaLink="false">https://nighcrawl.com/blog/2011/07/expressions-regulieres-avec-mysql</guid>

					<description><![CDATA[Petite trouvaille du vendredi: Exécuter des requêtes MySQL pleine d’expressions régulières. Cette après midi, en faisant un petit tour dans la base de données des inscrits à la newsletter de CBC qui avait bien besoin d’un clean up afin de supprimer les adresses e-mails invalides. Du coup, je cherchais un moyen de supprimer les adresses mails [&#8230;]]]></description>
										<content:encoded><![CDATA[<div class='e-content'>Petite trouvaille du vendredi: Exécuter des requêtes MySQL pleine d’expressions régulières. Cette après midi, en faisant un petit tour dans la base de données des inscrits à la newsletter de CBC qui avait bien besoin d’un clean up afin de supprimer les adresses e-mails invalides.<span id="more-1374"></span></p>
<p>Du coup, je cherchais un moyen de supprimer les adresses mails mal formatées qu’on trimbale, et par la même occasion, récupérer seulement les adresses mails bien formatées lors de l’envoi de la newsletter, en attendant que l’on fasse un beau remodeling du site actuel.</p>
<p>Du coup, je m’suis demandé tout bêtement, si MySQL prenait en compte les expressions régulières, ce qui m’aurai facilité le travail. Et bien sachez le, c’est carrément possible (youpi!) et super simple à mettre en oeuvre en plus. Voilà comment :</p>
<h3 id="dans-un-select">Dans un SELECT</h3>
<p>Utile si vous voulez récupérer tous les champs validant l’expression régulière</p>
<div class="language-plaintext highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code>SELECT 'fofo' REGEXP '^fo' FROM table;
</code></pre>
</div>
</div>
<h3 id="dans-une-clause-where">Dans une clause WHERE</h3>
<p>En fait, ça ne change pas grand chose</p>
<div class="language-plaintext highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code>SELECT champ FROM table WHERE champ REGEXP '^([a-z0-9_.-]+)@([da-z.-]+).([a-z.]{2,6})$' AND champ2 REGEXP '(chouette|cool|super)'
</code></pre>
</div>
</div>
<p>Alors, heureux? </p></div>
]]></content:encoded>
					
					<wfw:commentRss>https://chierchia.fr/2011/07/expressions-regulieres-avec-mysql/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
					<title>Exécuter des requêtes SQL avec CodeIgniter</title>
					<link>https://chierchia.fr/2011/01/requetes-sql-avec-codeigniter/</link>
					<comments>https://chierchia.fr/2011/01/requetes-sql-avec-codeigniter/#respond</comments>
		
		<dc:creator><![CDATA[<span class='p-author h-card'>Ange Chierchia</span>]]></dc:creator>
		<pubDate>Fri, 14 Jan 2011 21:36:57 +0000</pubDate>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[back-end]]></category>
		<category><![CDATA[codeigniter]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<guid isPermaLink="false">https://nighcrawl.com/blog/2011/01/requetes-sql-avec-codeigniter</guid>

					<description><![CDATA[Pour continuer à parler CodeIgniter, on va aujourd’hui s’intéresser à la construction de requêtes SQL via les fonctions disponibles avec CodeIgniter et voir l’intêret d’utiliser ces fonctions lorsqu’on interroge une base de données. Ok, avant de voir comment utiliser CodeIgniter pour exécuter des requêtes SQL, on va voir comment déclarer plusieurs configuration de base de [&#8230;]]]></description>
										<content:encoded><![CDATA[<div class='e-content'>Pour continuer à parler CodeIgniter, on va aujourd’hui s’intéresser à la construction de requêtes SQL via les fonctions disponibles avec CodeIgniter et voir l’intêret d’utiliser ces fonctions lorsqu’on interroge une base de données.<span id="more-1384"></span></p>
<p>Ok, avant de voir comment utiliser CodeIgniter pour exécuter des requêtes SQL, on va voir comment déclarer plusieurs configuration de base de données, pour par exemple avoir une configuration différente selon si l’on travaille en local ou bien sur serveur.</p>
<h2 id="configurer-la-classe-database">Configurer la classe Database</h2>
<p>Afin de permettre à CodeIgniter de « discutailler » avec notre base de données, il faut lui donner les infos pour y accéder. Ouvrez le fichier database.php se trouvant dans le dossier config de l’application (application/config/database.php), vous trouverez les réglages de la base de données stockés dans un  tableau multidirectionnel <code class="language-plaintext highlighter-rouge">$db</code> comme ci-dessous.</p>
<div class="language-plaintext highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code>$dbconf['default']['hostname'] = "localhost";
$dbconf['default']['username'] = "root";
$dbconf['default']['password'] = "";
$dbconf['default']['database'] = "database_name";
$dbconf['default']['dbdriver'] = "mysql";
$dbconf['default']['dbprefix'] = "";
$dbconf['default']['pconnect'] = TRUE;
$dbconf['default']['db_debug'] = FALSE;
$dbconf['default']['cache_on'] = FALSE;
$dbconf['default']['cachedir'] = "";
$dbconf['default']['char_set'] = "utf8";
$dbconf['default']['dbcollat'] = "utf8_general_ci";
</code></pre>
</div>
</div>
<p>L’intérêt d’utiliser un tableau multidirectionnel pour enregistrer les infos relatives à la base de données, c’est de pouvoir définir un autre tableau  avec des informations différentes, pour ensuite choisir lequel de ces tableaux utiliser. Ainsi, si l’on souhaite déclarer deux configurations différentes, rien de plus simple :</p>
<div class="language-plaintext highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code>//config par défaut
$db['default']['hostname'] = "localhost";
$dbconf['default']['username'] = "root";
$dbconf['default']['password'] = "";
$dbconf['default']['database'] = "database_name";
$dbconf['default']['dbdriver'] = "mysql";
$dbconf['default']['dbprefix'] = "";
$dbconf['default']['pconnect'] = TRUE;
$dbconf['default']['db_debug'] = FALSE;
$dbconf['default']['cache_on'] = FALSE;
$dbconf['default']['cachedir'] = "";
$dbconf['default']['char_set'] = "utf8";
$dbconf['default']['dbcollat'] = "utf8_general_ci";

//config secondaire
$dbconf['test']['hostname'] = "host_name";
$dbconf['test']['username'] = "db_user";
$dbconf['test']['password'] = "db_pass";
$dbconf['test']['database'] = "database_name";
$dbconf['test']['dbdriver'] = "mysql";
$dbconf['test']['dbprefix'] = "";
$dbconf['test']['pconnect'] = TRUE;
$dbconf['test']['db_debug'] = FALSE;
$dbconf['test']['cache_on'] = FALSE;
$dbconf['test']['cachedir'] = "";
$dbconf['test']['char_set'] = "utf8";
$dbconf['test']['dbcollat'] = "utf8_general_ci";
</code></pre>
</div>
</div>
<p>Il suffira ensuite de définir la valeur de la variable $active_group à « test » pour utiliser notre configuration secondaire. Easy!</p>
<p>Pour établir la connexion à la base de données il faudra alors faire appelle à la librairie Database dans votre classe, grâce à la ligne suivante :</p>
<div class="language-plaintext highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code>$this-&gt;load-&gt;database($dbconf);
</code></pre>
</div>
</div>
<p>Il est aussi possible d’instancier deux connexion en faisant comme suit :</p>
<div class="language-plaintext highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code>$db1 = $this-&gt;load-&gt;database('default');
$db2 = $this-&gt;load-&gt;database('test');
</code></pre>
</div>
</div>
<h2 id="ma-première-requête-sql-avec-codeigniter">Ma première requête SQL avec CodeIgniter</h2>
<p>On y est, notre connexion à la base est active, on va pouvoir manipuler les données (j’adore ça, manipuler des données)!</p>
<p>Avec CodeIgniter, ce qu’il y a de bien c’est qu’on a vraiment le choix des armes pour construire nos requêtes : soit on les construit comme au bon vieux temps des <code class="language-plaintext highlighter-rouge">mysql_*()</code> soit on utilise la <a title="Utiliser PDO pour les connexions à une base de données" href="http://chierchia.fr/blog/utiliser-pdo-pour-les-connexion-a-une-bdd/">méthode objet (PDO)</a>, ou encore mieux on utilise les nombreuses fonctions du Framework!</p>
<p>Comme il y a toute une flopée de fonctions préexistantes je vais volontairement ne présenter que les plus courantes.</p>
<h3 id="mysql_query-à-la-sauce-ci">mysql_query() à la sauce CI</h3>
<p>C’est la fonction <code class="language-plaintext highlighter-rouge">query()</code> de la classe Database qui permet d’exécuter simplement des requêtes <code class="language-plaintext highlighter-rouge">SELECT</code> simple. La fonction s’utilise très simplement : <code class="language-plaintext highlighter-rouge">$this-&gt;db-&gt;query('SELECT * FROM table');</code></p>
<p>Si l’on souhaite construire des requêtes avec paramètres, il sera obligatoire de les échapper avec les fonction <code class="language-plaintext highlighter-rouge">escape()</code>, <code class="language-plaintext highlighter-rouge">escape_str()</code> ou <code class="language-plaintext highlighter-rouge">escape_like_str()</code>, équivalents de la fonction <code class="language-plaintext highlighter-rouge">mysql_real_escape_string()</code>.</p>
<p>La fonction <code class="language-plaintext highlighter-rouge">escape()</code> permet d’échapper les données quelque soit leur type (<code class="language-plaintext highlighter-rouge">string, int, float</code>, etc…), tandis que <code class="language-plaintext highlighter-rouge">escape_str()</code> n’accepte que des données de type <code class="language-plaintext highlighter-rouge">string</code>. <code class="language-plaintext highlighter-rouge">escape_like_str()</code> quant à elle, permet d’échapper des requêtes avec des conditions <code class="language-plaintext highlighter-rouge">LIKE</code>.</p>
<p>Query() peut aussi être utilisé avec des requêtes préparées, comme avec l’objet PDO. Ainsi pour exécuter une requête, rien de bien compliqué:</p>
<div class="language-plaintext highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code>$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?";
$this-&gt;db-&gt;query($sql, array(3, 'live', 'Rick'));
</code></pre>
</div>
</div>
<p>L’intérêt ici, comme avec PDO c’est que les valeurs passées en paramètre sont automatiquement échappées.</p>
<p>CodeIgniter pourrait s’arrêter là, mais dans ce cas qu’aurait-il de plus que le simple objet PDO ? La réponse : l’Active Record!</p>
<h2 id="la-classe-active-record">La classe Active Record</h2>
<p>Utiliser l’Active Record, c’est hype, branché et trop in the move!</p>
<p>Pourquoi? Parce que cela permet entre autre de laisser de côté l’histoire « Ma base est en MySQL, SQL Server, Postgre, … ? », en clair on ne s’occupe pas du SGBD utilisé, on lui pose juste les questions. Conséquence, notre appli a une meilleure portabilité.</p>
<p>CodeIgniter propose pas mal de fonctions permettant de construire des requêtes sans se fouler, j’irai même jusqu’à dire « sans même en connaître un radis en SQL ». Regardons ce qui nous est proposé.</p>
<h3 id="this-db-get">$this-&gt;db-&gt;get()</h3>
<p><code class="language-plaintext highlighter-rouge">get()</code> permet d’exécuter en un rien de temps un <code class="language-plaintext highlighter-rouge">SELECT</code> sur une table et ainsi retourner tout ses enregistrements</p>
<div class="language-plaintext highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code>$query = $this-&gt;db-&gt;get('mytable');
// équivalent: SELECT * FROM mytable
</code></pre>
</div>
</div>
<p>Si l’on veut limiter le nombre de résultats retournés, par exemple dans le cadre d’une pagination, rien de plus simple il suffit juste de passer deux autres paramètres à <code class="language-plaintext highlighter-rouge">get()</code> en plus de la table sur laquelle on travaille.</p>
<div class="language-plaintext highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code>$query = $this-&gt;db-&gt;get('mytable', 10, 20);
// équivalent : SELECT * FROM mytable LIMIT 20, 10
</code></pre>
</div>
</div>
<h3 id="this-db-get_where">$this-&gt;db-&gt;get_where()</h3>
<p>Vraiment besoin d’explications? <code class="language-plaintext highlighter-rouge">get_where()</code> permet tout simplement de faire un <code class="language-plaintext highlighter-rouge">get()</code> avec des conditions.</p>
<p>Les différentes condition seront à présenter sous forme d’un tableau (on vera ça ensuite dans la fonction <code class="language-plaintext highlighter-rouge">where()</code>) .</p>
<div class="language-plaintext highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code>$query = $this-&gt;db-&gt;get_where('mytable', $where, $limit, $offset);
</code></pre>
</div>
</div>
<p>Avec ces deux fonctions, c’est le Framework qui s’occupe de construire nos requêtes. Si l’on veut les générer nous même tout en utilisant l’Active Directory, c’est maintenant qu’on va retrouver une pelletée  de méthodes.</p>
<h3 id="select-from-where">SELECT, FROM, WHERE</h3>
<p>Ok, admettons que l’on veuille retourner le titre, le contenu et la date d’un article dans notre base.</p>
<p>Clairement ici <code class="language-plaintext highlighter-rouge">get_where()</code> boufferai de la ressource inutilement puisqu’il nous retournerai d’autres champs dont on aurait pu se passer. <code class="language-plaintext highlighter-rouge">select()</code> est là pour nous ravir les amis!</p>
<div class="language-plaintext highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code>$this-&gt;db-&gt;select('title, content, date');
$query = $this-&gt;db-&gt;get('articles');
// équivalent: SELECT title, content, date FROM articles
</code></pre>
</div>
</div>
<p>Attends voir, là on récupère le titre, le contenu et la date de tout les articles dans la base… Quel œil vif! C’est ici qu’interviennent nos amis <code class="language-plaintext highlighter-rouge">from()</code> et <code class="language-plaintext highlighter-rouge">where()</code> :</p>
<div class="language-plaintext highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code>$this-&gt;db-&gt;select('title, content, date');
$this-&gt;db-&gt;from('articles');
$this-&gt;db-&gt;where(array('id' =&gt; 7));
$query = $this-&gt;db-&gt;get();
</code></pre>
</div>
</div>
<p>C’est pas beautiful ? CodeIgniter a un sac plein de fonctions équivalentes aux fonction SQL comme <code class="language-plaintext highlighter-rouge">SUM()</code>, <code class="language-plaintext highlighter-rouge">AVG()</code>, <code class="language-plaintext highlighter-rouge">COUNT()</code>, etc.  Je ne les traiterai pas ici mais vous pourrez les retrouver sur dans le <a href="http://www.codeigniter.fr/user_guide/database/" target="_blank" rel="noopener">Guide Utilisateur de CodeIgniter</a>.</p>
<p>Chose pratique, on peut concaténer toutes ses fonctions, pour économiser en ligne de code. Ainsi, notre requête précédente pourrait s’écrire :</p>
<div class="language-plaintext highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code>$this-&gt;db-&gt;select('title, content, date')-&gt;from('articles')-&gt;where(array('id' =&gt; 7));
$query = $this-&gt;db-&gt;get();
</code></pre>
</div>
</div>
<h3 id="affichage-des-résultats">Affichage des résultats</h3>
<p>On finira ce billet très rapidement sur la façon d’afficher le résultat de nos différentes requêtes.</p>
<p>Ici on fera un simple <code class="language-plaintext highlighter-rouge">foreach()</code> comme on a l’habitude d’en faire quand on utilise PDO (pour moi en tout cas).</p>
<div class="language-plaintext highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code>$query = $this-&gt;db-&gt;get('mytable');
foreach ($query-&gt;result() as $row){
  echo $row-&gt;title;
}
</code></pre>
</div>
</div>
<h2 id="conclusion">Conclusion</h2>
<p>Ici on a donc vu pas mal de méthodes bien utile lorsqu’il s’agit d’interroger une base de donnée lorsqu’on développe dans le cadre d’une application Web sous CodeIgniter.</p>
<p>Petite parenthèse, je tiens à m’excuser pour l’attente interminable entre le moment ou j’ai annoncé faire cet article, et sa publication. J’ai eu deux bons gros mois de taff bien chargés, autant au boulot, qu’au niveau perso (notamment le site du WDFR sur lequel je travail avec <a href="http://twitter.com/Fran6">@Fran6</a>, <a href="http://twitter.com/Twikito">@Twikito</a>, <a href="http://twitter.com/ClementRoy">@ClementRoy</a> et <a href="http://twitter.com/C_Beghin">@C_Beghin</a>, et tout le workgroup WDFR), ce qui explique en partie ce petit retard.</p>
<p>J’en profite aussi pour souhaité avec du retard, une très bonne année 2011, pleine de bonnes choses et d’argent (surtout) ^^</p></div>
]]></content:encoded>
					
					<wfw:commentRss>https://chierchia.fr/2011/01/requetes-sql-avec-codeigniter/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
					<title>Comment utiliser l&#8217;objet PDO de PHP pour les connexions à une base de données?</title>
					<link>https://chierchia.fr/2009/08/utiliser-pdo-pour-les-connexion-a-une-bdd/</link>
					<comments>https://chierchia.fr/2009/08/utiliser-pdo-pour-les-connexion-a-une-bdd/#respond</comments>
		
		<dc:creator><![CDATA[<span class='p-author h-card'>Ange Chierchia</span>]]></dc:creator>
		<pubDate>Sat, 22 Aug 2009 17:12:21 +0000</pubDate>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[back-end]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[pdo]]></category>
		<category><![CDATA[php]]></category>
		<guid isPermaLink="false">https://nighcrawl.com/blog/2009/08/utiliser-pdo-pour-les-connexion-a-une-bdd</guid>

					<description><![CDATA[Aujourd’hui, je vais vous parler de ce qui va bientôt être la seule façon d’inititier une « discussion » entre un script PHP et une base de donnée, en effet la version 6 de PHP ne supportera plus des fonction comme mysql_select_db() , mysql_query() et autres fonctions du même genre permettant l’interation avec une base de donnée [&#8230;]]]></description>
										<content:encoded><![CDATA[<div class='e-content'>Aujourd’hui, je vais vous parler de ce qui va bientôt être la seule façon d’inititier une « discussion » entre un script PHP et une base de donnée, en effet la version 6 de PHP ne supportera plus des fonction comme mysql_select_db() , mysql_query() et autres fonctions du même genre permettant l’interation avec une base de donnée jusqu’à la version 5.x de PHP.<span id="more-1413"></span></p>
<h3 id="quest-ce-que-cest-un-objet-pdo">Qu’est-ce que c’est un objet PDO?</h3>
<p>PDO pour PHP Data Objects, pour faire simple donc, les discussions avec notre base de données se feront avec la notion d’Objet, pour ceux qui ne voient pas ce qu’est la programmation orientée objet, <a title="Programmation orientée objet sur Wikipédia" href="http://fr.wikipedia.org/wiki/PPO" target="_blank" rel="noopener">direction Wikipedia</a>.</p>
<h3 id="quest-ce-que-ça-change">Qu’est-ce que ça change?</h3>
<p>Tout! Avec PDO, on ne s’embête plus à faire un gros script qui gère le fait que l’on utilise une base de donnée MySQL, SQL Server, PostgreSQL, Oracle, etc… Ici, nous n’avons besoins de changer que quelques parametres, et zou! on utilise les même methodes partout dans notre projet PHP. PDO permet donc une meilleure portabilité d’un programme sur un autre environemment que celui pour lequel il a été développé.</p>
<h3 id="comment-utiliser-pdo-">Comment utiliser PDO ?</h3>
<p>Mieux qu’une explication à rallonge, on va voir ici un exemple de connexion simple à une base MySQL sans utiliser PDO, et ensuite en utilisant PDO, pour bien mettre en evidence l’avantage d’utiliser PDO pour nos prochains projets.</p>
<p>Imaginons qu’on est une base de données nommée « dbtest », contenant la table « tbltest » construite de la façon suivante :</p>
<pre class="brush:plain">CREATE TABLE tbltest (
id int NOT NULL auto_increment,
login varchar(50),
pass varchar(255),
email varchar(200),
PRIMARY KEY(id)
);</pre>
<p>En utilisant les fonctions mysql_* il nous faut écrire pas mal de code pour se connecter à la base et executer une requête :</p>
<pre class="brush:php">&lt;?php
$db = mysql_connect('localhost','login','password'); //connexion à  MySQL
mysql_select_db('dbtest',$db); //séléction de la base sur laquelle on va travailler
$strSQL = "SELECT login,pass,email FROM tbltest"; //notre requête
$result = mysql_query($strSQL) or die('Erreur '.mysql_error()); //execution de la requête
//affichage des résultats
while($row = mysql_fetch_assoc($result)){
echo $row['login']." ".$row['pass']." ".$row['email']."&lt;br/&gt;";
}
mysql_close();
?&gt;</pre>
<p>Maintenant, voyons comment executer cette même requête avec un objet PDO :</p>
<pre class="brush:php">&lt;?php
try {//creation de l'objet PDO
$db = new PDO('mysql:host=localhost;dbname=dbtest','login','password');
$strSQL = "SELECT login,pass,email FROM tbltest";
//execution de la requête et affichage des résultats
foreach($db-&gt;query($strSQL) as $row){
echo $row['login']." ".$row['pass']." ".$row['email']."&lt;br/&gt;";
}
} catch (PDOException $e){ //erreur de connexion à la basse
print "Erreur : ".$e-&gt;getMessage()
die();
}
$db = null; //on ferme la connexion
?&gt;</pre>
<h3 id="lavantage-de-pdo--les-requêtes-préparées">L’avantage de PDO : les requêtes préparées</h3>
<p>Bien que l’exemple plus haut soit un exemple basique, PDO permet d’exécuter des requêtes préparées et c’est tout l’interet de la chose. En effet, les requêtes préparées permettent un gain de temps puisque nous utilisons une espèce de « patron » pour construire notre requête, et lors de l’exécution de celle-ci, on passe un tableau de paramètres. Ainsi on peut executer la même requête plusieurs fois avec différents paramètres très facilement et rapidement.</p>
<h4 id="executer-une-requête-préparée">Executer une requête préparée</h4>
<p>Pour construire et executer une requête préparée nous aurons besoin de la fonction prepare() de l’objet PDO, cette fonction retournera un objet PDOStatment, qui nous permettra d’executer la requête en lui passant les paramètres avec la fonction execute().</p>
<p>Il est a noter que l’on peut préparer une requête de plusieurs manières : grâce à des marqueurs (?) ou des paramètres nommées (:nom_parametre)</p>
<pre class="brush:php">&lt;?php
//création de la requête avec la methode des marqueurs
$strSQL = "SELECT login,pass,email FROM tbltest WHERE login = ? AND pass = ? ";
//requête construite avec les paramètres nommés
//$strSQL = "SELECT login,pass,email FROM tbltest WHERE login = :login AND pass = :pwd ";

$stmt = $db-&gt;prepare($strSQL); // création de l'objet PDOStatment
$stmt-&gt;execute(array('mon_login','mon_password'));
//execution avec la methode des paramètres nommés
//$stmt-&gt;execute(array(':login' =&gt; 'mon_login', ':pwd' =&gt; 'mon_password'));

//affichage du résultat
while($row = $stmt-&gt;fetch(PDO::FETCH_OBJ)){
echo $row-&gt;login." ".$row-&gt;pass." ".$row-&gt;email."&lt;br/&gt;";
}
?&gt;</pre>
<p>Pour plus d’infos sur l’objet PDO rendez vous sur <a title="Comment utiliser PHP Data Objects" href="http://www.php.net/manual/fr/book.pdo.php" target="_blank" rel="noopener">le site du manuel PHP</a></div>
]]></content:encoded>
					
					<wfw:commentRss>https://chierchia.fr/2009/08/utiliser-pdo-pour-les-connexion-a-une-bdd/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
