Catégories : PHP

PHP : se connecter à une base de données MySQL

La base de données est la mémoire de votre site internet. Mais ça, vous le savez déjà. En effet, dans ce tutoriel, nous estimons que vous savez déjà ce qu’est une base de données, que MySQL est installé et que vous avez des notions de base en PHP. Alors sans plus attendre, voyons comment se connecter à une base de données MySQL.

Par ailleurs, nous considèrerons que vos identifiants de connexion sont déjà créés et disposés dans des constantes :

define('DB_HOST', '...');
define('DB_USER', '...');
define('DB_PSWD', '...');
define('DB_PORT', 3306);
define('DB_NAME', '...');

À noter également que tous les exemples de ce cours se font sur une base de données contenant une table article avec deux entrées.

Pensez à faire appel à un développeur PHP freelance pour vous faire accompagner dans vos projets de développement web.

 

Méthode basique pour lier PHP et MySQL

La première méthode n’est pas sécurisée, mais permet de se connecter très rapidement en cas de besoin. Nous allons utiliser la classe mysqli.

Lier PHP et MySQL grâce à mysqli

La classe mysqli a besoin d’être instanciée avec plusieurs paramètres :

  1. l’adresse (hôte) de la base de données (obligatoire) ;
  2. le nom d’utilisateur (obligatoire) ;
  3. le mot de passe de l’utilisateur (obligatoire) ;
  4. le nom de la base de données ;
  5. le port utilisé ;
  6. la clé socket.

Si la connexion avec la base de données a échoué, cela ne va pas exécuter d’erreur PHP. La conséquence sera uniquement le message d’erreur envoyé à un attribut connect_error. Nous allons donc le tester.

Dans l’exemple, nous allons enregistrer la connexion dans la variable $conn (comme « connection », ou « connexion » en français).

$conn = new mysqli(DB_HOST, DB_USER, DB_PSWD, DB_NAME, DB_PORT);
if( $conn->connect_error ) {
    die("Erreur : 1conn->connect_error");
}

Effectuer une requête avec mysqli

Maintenant que l’on est connecté, on va pouvoir exécuter nos requêtes. Pour ce faire, nous allons devoir appeler l’instance de mysqli que l’on a créé (ici $conn) et appeler sa méthode query dans laquelle on va passer la requête SQL en paramètres.

$res = $conn->query("...");

Le résultat de la requête n’est pas lisible directement comme ça. La façon de le traiter dépend du nombre de données demandée(s).

Si vous n’avez demandé qu’un seul résultat, vous pouvez utiliser la méthode fetch_assoc.

$sql = "SELECT COUNT(`id`) as 'count' FROM `article`";
$res = $conn->query($sql);
$row = $res->fetch_assoc();
echo $row['count'];
// => 2

Si en revanche vous attendez plus retours, alors il faudra boucler la réponse avec un foreach.

$sql = "SELECT * FROM `article`";
$res = $conn->query($sql);
foreach( $res as $row ) {
    echo $row['title'] . "<br />";
}
// => Article 1
// => Article 2

 

Utiliser PDO pour plus de sécurité

Une autre méthode plus moderne et qui permet une meilleure sécurité est d’utiliser la classe PDO.

Attention, ce n’est pas faire d’utiliser PDO qui rend la connection avec la base de données plus sécurité ; cela permet de faire des injections SQL sécurisée. Ce sera l’objet du tutoriel du prochain tutoriel PHP.

Lier PHP et MySQL avec PDO

Là encore, il va s’agir d’une classe à instancier. Seulement, le premier paramètre est un peu plus long. Il s’agit en réalité de l’adresse complète vers la base de données, tout comme on saisit une adresse vers un site internet.

$connString = "mysql:host=".DB_HOST.";dbname=".DB_NAME.";port=".DB_PORT.";charset=utf8";
$conn = new PDO($connString, DB_USER, DB_PSWD);

Cette fois-ci, une erreur lors de la connexion à la base de données va provoquer une erreur PHP. On va donc gérer cela avec un try ... catch.

try {
    $connString = "mysql:host=".DB_HOST.";dbname=".DB_NAME.";port=".DB_PORT.";charset=utf8";
    $conn = new PDO($connString, DB_USER, DB_PSWD);
}
catch(PDOException $e){
    die("Erreur : " . $e->getMessage());
}

Effectuer une requête avec PDO

Il y a deux méthodes pour effectuer une requête avec PDO :

  • query que l’on appelle pour lire des données et retourne les résultats de la requête ;
  • exec pour appliquer des modifications (mise à jour, ajout, suppression) et qui retourne le nombre de lignes affectées.

Appeler la mauvaise méthode pour l’action que l’on souhaite effectuer n’a pas d’incident sur l’action en elle-même, mais le résultat reçu sera corrompu.

Quand vous effectuez une requête query, il y a deux types de résultats : une seule et plusieurs lignes, tout comme avec mysqli.

Quand vous n’attendez qu’une seule donnée, vous pouvez la récupérer avec la méthode fetch.

$sql = "SELECT COUNT(`id`) as 'count' FROM `article`";
$res = $conn->query($sql);
$row = $res->fetch();
echo $row['count'];
// => 2

Pour un résultat avec plusieurs lignes, il y a plusieurs façon de faire, mais on va en voir qu’une seule car elle reste la plus optimisée et la plus courte en nombre de caractères : faire une boucle foreach.

$sql = "SELECT * FROM `article`";
$res = $conn->query($sql);
foreach( $res as $row ) {
    echo $row['title'] . "<br />";
}
// => Article 1
// => Article 2

 

Notre astuce pour se connecter à une base de données MySQL avec PHP

Grâce à ces quelques lignes, vous savez maintenant comment connecter PHP à une base de données MySQL. Cependant, il n’existe pas que ces deux méthodes pour lier votre site internet en PHP avec MySQL. Il existe aussi des librairies avancées, comme Eloquent (illuminate) ou idiORM qui demandent une bonne connaissance en PHP Objet et savoir utiliser composer.

Pour tout problème à votre base de données, la liaison entre votre PHP et votre MySQL, ou pour aller plus loi, demandez des conseils à un expert. Sur Codeur.com, vous pouvez déposer gratuitement votre demande et recevoir très rapidement des devis de freelances spécialisés.

Partager