Différences entre versions de « Php pdo »

De The Linux Craftsman
Aller à la navigation Aller à la recherche
Ligne 73 : Ligne 73 :
 
== Création des fonctions base ==
 
== Création des fonctions base ==
 
Pour s’affranchir du ''CRUD'' nous allons agrémenter le fichier ''db.php'' des fonction suivantes:
 
Pour s’affranchir du ''CRUD'' nous allons agrémenter le fichier ''db.php'' des fonction suivantes:
<pre>
+
<source lang="php" style="border:1px solid black;font-size:120%">
 
function getUsers(){
 
function getUsers(){
 
   global $db;
 
   global $db;
Ligne 90 : Ligne 90 :
 
       $insert=$db->prepare('INSERT INTO personnes (nom, prenom, email) VALUES(:nom, :prenom, :email)');
 
       $insert=$db->prepare('INSERT INTO personnes (nom, prenom, email) VALUES(:nom, :prenom, :email)');
 
       $insert->execute(array('nom' => $nom,'prenom' => $prenom,'email' => $email));
 
       $insert->execute(array('nom' => $nom,'prenom' => $prenom,'email' => $email));
 +
      return true;
 
   }catch(Exception $e){
 
   }catch(Exception $e){
 
       echo $sql . "</br>" . $e->getMessage();
 
       echo $sql . "</br>" . $e->getMessage();
 
   }
 
   }
 +
  return false;
 
}
 
}
 
function modifyUserById($nom, $prenom, $email, $id){
 
function modifyUserById($nom, $prenom, $email, $id){
Ligne 99 : Ligne 101 :
 
       $update=$db->prepare('UPDATE personnes SET nom=:nom, prenom=:prenom, email=:email WHERE id=:id');
 
       $update=$db->prepare('UPDATE personnes SET nom=:nom, prenom=:prenom, email=:email WHERE id=:id');
 
       $update->execute(array('nom' => $nom,'prenom' => $prenom,'email' => $email, 'id'=>$id));
 
       $update->execute(array('nom' => $nom,'prenom' => $prenom,'email' => $email, 'id'=>$id));
 +
      return true;
 
   }catch(Exception $e){
 
   }catch(Exception $e){
 
       echo $sql . "</br>" . $e->getMessage();
 
       echo $sql . "</br>" . $e->getMessage();
 
   }
 
   }
 +
  return false;
 
}
 
}
 
function delUserById($id){
 
function delUserById($id){
Ligne 108 : Ligne 112 :
 
       $sql = 'DELETE FROM personnes WHERE id='.$id.'';
 
       $sql = 'DELETE FROM personnes WHERE id='.$id.'';
 
       $db->exec($sql);
 
       $db->exec($sql);
 +
      return true;
 
   }catch(Exception $e){
 
   }catch(Exception $e){
 
       echo $sql . "</br>" . $e->getMessage();
 
       echo $sql . "</br>" . $e->getMessage();
 
   }
 
   }
 +
  return false;
 
}
 
}
</pre>
+
</source>
On peut remarquer que les fonction de modifications ''UPDATE'' et ''INSERT'' nécessite une préparation (''$db->prepare'') alors que ''DELETE'' et ''SELECT'' peuvent êtres exécutées directement (''$db->exec'').
+
On peut remarquer que les fonctions de modifications ''UPDATE'' et ''INSERT'' nécessite une préparation (''$db->prepare()'') alors que ''DELETE'' et ''SELECT'' peuvent êtres exécutées directement (''$db->exec()'').
 +
==Création d'un formulaire==
 +
Pour créer des personnes nous allons utiliser un formulaire de création. Nous allons le mettre dans le fichier ''php/form.php'':
 +
<source lang="php" style="border:1px solid black;font-size:120%">
 +
<?php
 +
  $id, $nom, $prenom, $email;
 +
  if(isset($_POST)){
 +
      $id=$_POST['id'];
 +
  $nom=$_POST['nom'];
 +
  $prenom=$_POST['prenom'];
 +
  $email=$_POST['email'];
 +
  }
 +
?>
 +
<form method="post">
 +
  <table>
 +
      <tr>
 +
        <td align="right">
 +
            Nom :
 +
        </td>
 +
        <td>
 +
            <input type="text" name="nom" <?php if(!empty($nom)){echo "value=".$nom} ?> />
 +
        </td>
 +
      </tr>
 +
      <tr>
 +
        <td align="right">
 +
            Prénom :
 +
        </td>
 +
        <td>
 +
            <input type="text" name="prenom" <?php if(!empty($prenom)){echo "value=".$prenom} ?> />
 +
        </td>
 +
      </tr>
 +
      <tr>
 +
        <td align="right">
 +
            Email :
 +
        </td>
 +
        <td>
 +
            <input type="text" name="email" <?php if(!empty($email)){echo "value=".$email} ?> />
 +
        </td>
 +
      </tr>
 +
      <tr>
 +
        <td colspan="2" align="center">
 +
<?php if(!empty($id)){echo "<input type=hidden name=id value=".$id." />"} ?>
 +
            <input type="submit" />
 +
        </td>
 +
      </tr>
 +
  </table>
 +
</form>
 +
</source>

Version du 2 novembre 2015 à 22:43

Installation

Les librairies

Pour développer en PHP et utiliser MySQL, il ne faut pas oublier d'installer les librairies suivantes :

# yum -y install php php-mysql mysql mysql-server httpd

Paramétrez votre base MySQL ainsi que votre serveur HTTPD.

Base de données exemple

Nous allons utiliser la base de données suivante:

--
-- Base de données: `exemple`
--
CREATE DATABASE IF NOT EXISTS `exemple` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
USE `exemple`;
-- --------------------------------------------------------
--
-- Structure de la table `personnes`
--
CREATE TABLE IF NOT EXISTS `personnes` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nom` varchar(100) NOT NULL,
  `prenom` varchar(100) NOT NULL,
  `email` varchar(100) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

Développement

Structure du site

Nous allons créer un site web qui va utiliser notre base de données. Pour faire les chose bien, il faut respecter une certaine structure à l'intérieur de /var/www/html:

  • php (dossier qui contient les fichiers php)
  • img (dossier qui contient les images)
  • index.php

Un peu de SQL

Pour chercher des données nous allons avoir besoin des requêtes suivantes:

  • SELECT : select * from personnes
  • INSERT : INSERT INTO personnes (id, nom, prenom, email) VALUES (NULL, :nom, :prenom, :email)
  • UPDATE : UPDATE personnes SET nom=:nom, prenom=:prenom, email=:email WHERE id=:id
  • DELETE : DELETE FROM personnes WHERE id=:id

Nous remplacerons les variables :id, :nom, :prenom et :email par les valeurs voulues plus tard.

Accès base avec PDO

Pour accéder à une base de données MySQL, on peut soit utiliser MySQLi soit utiliser PDO. Préférez PDO qui permet plus de souplesse. Voici le code qui permet de se connecter à une base MySQL:

<?php
try{
   $db = new PDO('mysql:host=localhost;dbname=exemple', 'root', 'password');
}catch(Exception $e){
   echo "Échec : " . $e->getMessage();
}
?>

La variable $db contient la connexion base de données et si l'instanciation réussie, vous êtes connecté !

Nous allons centraliser tout ce qui est en relation avec la base de données dans le fichier php/db.php. Copiez les lignes précédentes dans ce fichier et faite une inclusion dans le fichier index.php:

<html>
   <head>
      <title>Exemple d'utilisation de PDO</title>
   </head>
   <body>
      <?php
          include("php/db.php");
      ?>
   <body>
<html>

Si vous ne voyez pas de message d'erreur, la connexion s'est correctement effectuée !

Création des fonctions base

Pour s’affranchir du CRUD nous allons agrémenter le fichier db.php des fonction suivantes:

function getUsers(){
   global $db;
   $select = $db->prepare('SELECT id, nom, prenom, email FROM personnes');
   $select->execute();
   return $select->fetchAll();
}
function getUserById($id){
   $select = $db->prepare('SELECT id, nom, prenom, email FROM personnes WHERE id='.$id);
   $select->execute();
   return $select->fetchAll()[0];
}
function addUser($nom, $prenom, $email){
   global $db;
   try{
      $insert=$db->prepare('INSERT INTO personnes (nom, prenom, email) VALUES(:nom, :prenom, :email)');
      $insert->execute(array('nom' => $nom,'prenom' => $prenom,'email' => $email));
      return true;
   }catch(Exception $e){
      echo $sql . "</br>" . $e->getMessage();
   }
   return false;
}
function modifyUserById($nom, $prenom, $email, $id){
   global $db;
   try{
      $update=$db->prepare('UPDATE personnes SET nom=:nom, prenom=:prenom, email=:email WHERE id=:id');
      $update->execute(array('nom' => $nom,'prenom' => $prenom,'email' => $email, 'id'=>$id));
      return true;
   }catch(Exception $e){
      echo $sql . "</br>" . $e->getMessage();
   }
   return false;
}
function delUserById($id){
   global $db;
   try{
      $sql = 'DELETE FROM personnes WHERE id='.$id.'';
      $db->exec($sql);
      return true;
   }catch(Exception $e){
      echo $sql . "</br>" . $e->getMessage();
   }
   return false;
}

On peut remarquer que les fonctions de modifications UPDATE et INSERT nécessite une préparation ($db->prepare()) alors que DELETE et SELECT peuvent êtres exécutées directement ($db->exec()).

Création d'un formulaire

Pour créer des personnes nous allons utiliser un formulaire de création. Nous allons le mettre dans le fichier php/form.php:

<?php
   $id, $nom, $prenom, $email;
   if(isset($_POST)){
      $id=$_POST['id'];
	  $nom=$_POST['nom'];
	  $prenom=$_POST['prenom'];
	  $email=$_POST['email'];
   }
?>
<form method="post">
   <table>
      <tr>
         <td align="right">
            Nom : 
         </td>
         <td>
            <input type="text" name="nom" <?php if(!empty($nom)){echo "value=".$nom} ?> /> 
         </td>
      </tr>
      <tr>
         <td align="right">
            Prénom : 
         </td>
         <td>
            <input type="text" name="prenom" <?php if(!empty($prenom)){echo "value=".$prenom} ?> />
         </td>
      </tr>
      <tr>
         <td align="right">
            Email : 
         </td>
         <td>
            <input type="text" name="email" <?php if(!empty($email)){echo "value=".$email} ?> />
         </td>
      </tr>
      <tr>
         <td colspan="2" align="center">
			<?php if(!empty($id)){echo "<input type=hidden name=id value=".$id." />"} ?>
            <input type="submit" />
         </td>
      </tr>
   </table>
</form>