PHP et MySQL

Created with Sketch.

PHP et MySQL

Connexion avec PDO

Grâce au PHP, nous pouvons manipuler des données en base de données. Nous utiliserons une classe PHP définie sous le nom de « PDO », « PHP Data Object ». Dans un premier temps, nous devons nous connecter à la base de données en créant une instance de la classe « PDO ».

Exemple 1 

// Localisation de la BDD
define('HOST', 'localhost');

// Nom d'utilisateur
define('USER', 'root');

// Mot de passe
define('PASSWD', '');

// Nom de la base de donnée
define('DBNAME', 'exercice_12');

try {
	$db = new PDO("mysql:host=". HOST .";dbname=". DBNAME, USER, PASSWD, [
		// Gestion des erreurs PHP/SQL
		PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING,
		// Gestion du jeu de caractères
		PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
		// Choix du retours des résultats
		PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
	]);

}
catch (Exception $error) {
	// Attrape une exception
	echo 'Erreur lors de la connexion à la base de données : '. $error->getMessage();
}

Exemple 2

$host="localhost";
$name="traitement";
$user="root";
$pass="";

$bdd = null;
try { 
    $bdd = new PDO("mysql:host=$host; dbname=$name;charset=utf8;",
    $user, $pass, array( 
        PDO::ATTR_PERSISTENT => true,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
        ));
} catch(Exception $e) {
    die('Erreur : '.$e->getMessage()); 
}

Connexion dans une fonction

 
<?php

/**
 * Fonctions
 */


/**
 * Connexion à la BDD
 *
 * @return bool|PDO
 */
function connect()
{
	// Localisation de la BDD
	define('HOST', 'localhost');

	// Nom d'utilisateur
	define('USER', 'root');

	// Mot de passe
	define('PASSWD', '');

	// Nom de la base de donnée
	define('DBNAME', 'exercice_12');

	try {
		$db = new PDO("mysql:host=". HOST .";dbname=". DBNAME, USER, PASSWD, [
			// Gestion des erreurs PHP/SQL
			PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING,
			// Gestion du jeu de caractères
			PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
			// Choix du retours des résultats
			PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
		]);

		// NE PAS OUBLIER DE RETOURNER LA VALEUR DE $db !!!
		return $db;
	}
	catch (Exception $error) {
		// Attrape une exception
		echo 'Erreur lors de la connexion à la base de données : '. $error->getMessage();
	}

	return false;
}


/**
 * Insertion des données en BDD
 *
 * @param $article
 * @param $quantite
 * @return bool
 */
function insert($article, $quantite)
{
	// Connexion à la base de données
	$db = connect();

	// Vérifie que l'objet $db est bien chargé et soit différent de "false"
	if ($db !== false) {
		// Insertion en base de données
		$requete = $db->prepare("INSERT INTO stock (article, quantite, date_stock) VALUES (:article, :quantite, NOW())");
		$requete->bindValue(':article', $article, PDO::PARAM_STR);
		$requete->bindValue(':quantite', $quantite, PDO::PARAM_INT);

		// Si l'exécution se passe bien, retourne "true"
		if ($requete->execute()) {
			return true;
		}
	}

	// Sinon retourne "false"
	return false;
}
?>

Requête SQL query

L’exécution d’une requête SQL en « PDO » utilise une méthode. Après la connexion, on récupère l’objet « $db » et on utilise la méthode « query() ».

<?php
    $requete = $bd->query('SELECT * FROM ma_table');
    $requete->execute();
?>
<?php
    $requete = 'SELECT * FROM ma_table';
    $reponse = $bd->query($requete);
    $reponse->execute();
?>

Requête SQL prepare

« prepare() » n’exécute pas la requête SQL contrairement à « query() ». Elle permet de préparer une requête SQL pour le passage d’informations en utilisant des variables internes commençant par deux points « : »

<?php
    $requete = $bd->prepare('SELECT * FROM ma_table WHERE nom = :nom AND id = :id ');
    $requete->bindValue(':nom', $nom, PDO::PARAM_STR);
    $requete->bindValue(':id', $id, PDO::PARAM_INT);
    $requete->execute();
?>
<?php
    $requete = $bd->prepare('SELECT * FROM ma_table WHERE nom = ? AND id = ? ');
    $requete->bindValue( 1, $nom, PDO::PARAM_STR);
    $requete->bindValue( 2, $id, PDO::PARAM_INT);
    $requete->execute();
?>
<?php
	$reqMail2 = $bdd->prepare('SELECT * FROM table_hash_fr WHERE email_hash_fr = ? ');
	$reqMail2->execute(array($hashLeMail));
?>

Récupérer les résultats d’une requête

Après l’exécution de notre requête SQL, on récupère les résultats avec La méthode « fetch() » ou « fetchAll() » au besoin.

<?php

//Retourne le premier résultat trouvé
    $result = $requete->fetch();
    
// Retourne un tableau associatif contenent tous les résultats
    $results = $requete->fetchAll();
    
?>

Lire le résultat de « fetch() »

« fetch() » retourne le premier résultat trouvé par la requête SQL sous forme de tableau associatif.

<?php
    $requete->execute();
    $result = $requete->fetch();

    echo $result['champ'];
?>

Lire le résultat de « fetchAll() »

« fetchAll() » retourne tous les résultats trouvés par la requête SQL sous forme de tableau associatif.

<?php
    $requete->execute();
    
    $results = $requete->fetchAll();

// Boucle foreach pour lire le tableau associatif
    foreach($results as $result) {
        echo $result['champ'];
    }
?>

Requête INNER JOIN

Requête de jointure de table par clef étrangère

<?php
// Requête de sélection des commentaires liés à l'article
$query = $pdo->prepare('
    SELECT comments.id, comments.content, comments.created_at, users.username FROM comments 
    INNER JOIN users ON users.id = comments.user_id 
    WHERE comments.post_id = :id'
    );
$query->bindValue(':id', $_GET['id'], PDO::PARAM_INT);
$query->execute();

// Récupère les commentaires dans une variable
$comments = $query->fetchAll();

?>

Aide mémoire SQL

<?php
// Jointures de 2 tables
'SELECT * FROM table 
INNER JOIN table2 ON table.id = table2.id'

// Retourne l'ID du dernier INSERT
'SELECT LAST_INSERT_ID() as new FROM table'

// Insérer un enregistrement
"INSERT INTO table ('valeur 1' ,'valeur 2' , ... ) VALUES ('valeur 1' ,'valeur 2' , ... )"

//Retourne le nombre de lignes
'SELECT COUNT(*) FROM table'

// Modifier  un enregistrement
"UPDATE table SET nom_colonne = 'nouvelle valeur' , nom_colonne2 = 'valeur 2'
WHERE condition"

// Supprimer un enregistrement
'DELETE FROM table WHERE condition'
?>

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *