<?xml version="1.0" encoding="UTF-8"?><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/"
	
	xmlns:georss="http://www.georss.org/georss"
	xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
	>

<channel>
	<title>Archives des injection - La programmation sur le web</title>
	<atom:link href="https://programmation.surleweb-france.fr/tag/injection/feed/" rel="self" type="application/rss+xml" />
	<link>https://programmation.surleweb-france.fr/tag/injection/</link>
	<description>La programmation gratuite pour tous</description>
	<lastBuildDate>Sat, 08 May 2021 16:48:52 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.3</generator>

<image>
	<url>https://i0.wp.com/programmation.surleweb-france.fr/wp-content/uploads/2023/08/cropped-19518430-icone-de-programmation-pour-votre-site-web-mobile-presentation-et-conception-de-logo-gratuit-vectoriel.jpg?fit=32%2C32&#038;ssl=1</url>
	<title>Archives des injection - La programmation sur le web</title>
	<link>https://programmation.surleweb-france.fr/tag/injection/</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">176210735</site>	<item>
		<title>PHP, utiliser l&#8217;extension PDO</title>
		<link>https://programmation.surleweb-france.fr/php-utiliser-lextension-pdo/</link>
					<comments>https://programmation.surleweb-france.fr/php-utiliser-lextension-pdo/#respond</comments>
		
		<dc:creator><![CDATA[Zigomato]]></dc:creator>
		<pubDate>Wed, 12 May 2021 06:00:00 +0000</pubDate>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[connexion]]></category>
		<category><![CDATA[donnée]]></category>
		<category><![CDATA[injection]]></category>
		<category><![CDATA[mariadb]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[pdo]]></category>
		<category><![CDATA[php]]></category>
		<guid isPermaLink="false">https://programmation.surleweb-france.fr/?p=964</guid>

					<description><![CDATA[<p>L'extension PDO permet d'uniformiser la communication entre PHP et presque toutes les base de données. La mise en place est recommandée, rapide et facile</p>
<p class="continue-reading-button"> <a class="continue-reading-link" href="https://programmation.surleweb-france.fr/php-utiliser-lextension-pdo/">Continuer la lecture<i class="crycon-right-dir"></i></a></p>
<p>L’article <a href="https://programmation.surleweb-france.fr/php-utiliser-lextension-pdo/">PHP, utiliser l&rsquo;extension PDO</a> est apparu en premier sur <a href="https://programmation.surleweb-france.fr">La programmation sur le web</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Nous allons voir dans cette article l&rsquo;utilisation de l&rsquo;extension PDO de PHP afin de communiquer avec une base de données en effectuant des requêtes SQL.</p>



<p>Nous verrons également comment se protéger des attaques par injections SQL.</p>



<h2 class="wp-block-heading">Tester la présence de l&rsquo;extension PDO</h2>



<p>Avant de se lancer dans ce petit article, il est toujours bon de savoir comment tester l&rsquo;activation de l&rsquo;extension, dans un fichier php, y inscrire :</p>



<pre class="EnlighterJSRAW" data-enlighter-language="php" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;?php
if (extension_loaded ('PDO')) {
    echo 'PDO chargée';
} else {
    echo 'PDO non chargée, activée l\'extension';
}
?></pre>



<p>Si besoin de l&rsquo;activer, je vous invite à suivre ce lien qui vous guidera en fonction de votre système : <a href="https://www.php.net/manual/fr/pdo.installation.php" target="_blank" rel="noreferrer noopener">activer PDO</a>.</p>



<p>Pour cette article, j&rsquo;utilise une base de test, tu peux la télécharger en cliquant sur ce <a href="https://github.com/zigomato/ArticlePHP/blob/main/SQL/create-db-test" target="_blank" rel="noreferrer noopener">lien</a>. Pense à créer un utilisateur avec les droits dessus.</p>



<h2 class="wp-block-heading">Connexion à une base de données</h2>



<p>J&rsquo;utilise une base de données MariaDB, pour une base de données MySQL, ce sera la même chose.</p>



<p>Pour la connexion, tu auras besoin de l&#8217;emplacement de ta base de données avec le port (souvent 3306), le nom de la base de données, l&rsquo;identifiant et le mot de passe. Il est fortement conseiller d&rsquo;inclure le jeu de caractère (encodage).</p>



<p>Pour se connecter, la ligne dans le script ressemblera à ça :</p>



<pre class="EnlighterJSRAW" data-enlighter-language="php" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">$pdo = new PDO('mysql:host=localhost;dbname=NOM_BASE;port=3306','IDENTIFIANT','MOT_DE_PASSE');</pre>



<p>Cette ligne suffit mais pour être plus réactif en cas d&rsquo;apparition d&rsquo;erreur de connexion, on va tout de suite prendre l&rsquo;habitude de gérer les exceptions :</p>



<pre class="EnlighterJSRAW" data-enlighter-language="php" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">$dsn = 'mysql:host=localhost;dbname=test;port:3306'; //cela rends l'ouverture de l'instance PDO plus propre à lire
try {
	$pdo = new PDO($dsn,'IDENTIFIANT','MOT_DE_PASSE');
        $pdo->exec("SET NAMES 'UTF8'");
} catch (PDOException $exception) {
	echo $exception->getMessage();
	exit('Erreur de connexion');
}</pre>



<h2 class="wp-block-heading">Effectuer une requête</h2>



<p>Nous allons voir différentes requête (INSERT, UPDATE, SELECT, DELETE) et si tu te souviens, j&rsquo;ai parlé plus haut de se protéger contre les injections SQL. Je vais le faire dans cette partie. </p>



<h3 class="wp-block-heading">Requête SELECT</h3>



<p>Tout d&rsquo;abord, le cas où aucune données n&rsquo;est envoyé vers la base (que ce soit sur un filtre ou l&rsquo;insertion de données) :</p>



<pre class="EnlighterJSRAW" data-enlighter-language="php" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">$reqSelect = $pdo->query("SELECT * FROM `testBase`);
$resultat = $reqSelect->fetchAll(); // Cela récupère dans un tableau l'ensemble des résultats de la requête dans un array
print_r($resultat);</pre>



<p>Pour me protéger des injections SQL, à partir du moment où des données sont envoyées vers la base, j&rsquo;ai pris cette habitude de passer mes paramètres de cette façon :</p>



<pre class="EnlighterJSRAW" data-enlighter-language="php" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">$id = 1;
$nom = 'Nicolas';
$req = $pdo->prepare("SELECT * FROM `tabletest` WHERE `id` = :tagId AND `nom` = :tagNom;");
$req->bindParam('tagId', $id, PDO::PARAM_INT);
$req->bindParam('tagNom', $nom, PDO::PARAM_STR);
$req->execute();
$res = $req->fetch(); // récupère seulement le premier résultat.
print_r($res);</pre>



<p>Les paramètres PDO::PARAM_INT et PDO::PARAM_STR permettent de bloquer toutes les valeurs qui ne correspondent pas au type. Pour la liste des types, voir<a href="https://www.php.net/manual/fr/pdo.constants.php" target="_blank" rel="noreferrer noopener"> la documentation PHP</a>.</p>



<h3 class="wp-block-heading">Requête INSERT</h3>



<p>Tu peux passer par la méthode <strong><em>query</em></strong> de l&rsquo;instance PDO mais comme je l&rsquo;ai dit à l&rsquo;instant, à partir du moment où des données sont envoyées vers ma base, je me protège :</p>



<pre class="EnlighterJSRAW" data-enlighter-language="php" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">$nom = 'Noémie';
$req = $pdo->prepare("INSERT INTO `tabletest` (nom) VALUES (:tagNom);");
$req->bindParam('tagNom', $nom, PDO::PARAM_STR);
$req->execute();
$res = $req->rowCount(); // je récupère le nombre de ligne ajoutée
print_r($res); // j'affiche le nombre de ligne ajoutée</pre>



<h3 class="wp-block-heading">Requête UPDATE</h3>



<p>Même principe pour un UPDATE :</p>



<pre class="EnlighterJSRAW" data-enlighter-language="php" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">$nom = 'Raphaël';
$id = 11;
$req = $pdo->prepare("UPDATE `tabletest` SET `nom` = :tagNom WHERE `id` = :tagId ;");
$req->bindParam('tagNom', $nom, PDO::PARAM_STR);
$req->bindParam('tagId', $id, PDO::PARAM_INT);
$req->execute();
$res = $req->rowCount();
print_r($res);</pre>



<h3 class="wp-block-heading">Requête DELETE</h3>



<p>On finit cet article par un DELETE :</p>



<pre class="EnlighterJSRAW" data-enlighter-language="php" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">$id = 11;
$req = $pdo->prepare("DELETE FROM `tabletest` WHERE `id` = :tagId ;");
$req->bindParam('tagId', $id, PDO::PARAM_INT);
$req->execute();
$res = $req->rowCount();
print_r($res);</pre>



<h2 class="wp-block-heading">Conclusion</h2>



<p>Maintenant, tu es prêts à utiliser l&rsquo;extension PDO pour ta connexion à la base de données tout en protégeant un minimum le trafic des données.</p>
<p>L’article <a href="https://programmation.surleweb-france.fr/php-utiliser-lextension-pdo/">PHP, utiliser l&rsquo;extension PDO</a> est apparu en premier sur <a href="https://programmation.surleweb-france.fr">La programmation sur le web</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://programmation.surleweb-france.fr/php-utiliser-lextension-pdo/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">964</post-id>	</item>
	</channel>
</rss>
