Vous êtes sur la page 1sur 21

Université IBN ZOHR

Faculté des Sciences Agadir

PHP(pt.3)
PHP MySQL Database

Meryem SOUAIDI
Department of Computer Science
Faculty of Sciences-Agadir

1
PHP MySQL Database
● Avec PHP, vous pouvez vous connecter et manipuler des bases de données.
● MySQL est le système de base de données le plus utilisé avec PHP.
● MySQL est:
● un système de base de données utilisé sur le Web
❖ un système de base de données qui s'exécute sur un serveur
❖ idéal pour les petites et grandes applications
❖ est très rapide, fiable et facile à utiliser
❖ utilise le SQL standard
❖ compile sur un certain nombre de plates-formes
❖ est gratuit à télécharger et à utiliser
❖ est développé, distribué et pris en charge par Oracle Corporation

Faculté des Sciences Agadir Université Ibn Zohr 2


PHP MySQL Database
● Les données d'une base de données MySQL sont stockées dans des tables. Une
table est une collection de données associées et se compose de colonnes et de
lignes.
● Les bases de données sont utiles pour stocker des informations de manière
catégorique. Une entreprise peut avoir une base de données avec les tables
suivantes:
• Employés
• Des produits
• Les clients
• Ordres
● PHP combiné avec MySQL sont multiplateformes (vous pouvez développer sous
Windows et servir sur une plateforme Unix)

Faculté des Sciences Agadir Université Ibn Zohr 3


Database Queries

● Une requête est une question ou une demande.

● Nous pouvons interroger une base de données pour obtenir des informations
spécifiques et renvoyer un jeu d'enregistrements.

● Regardez la requête suivante (en utilisant SQL standard): SELECT LastName FROM Employees

● La requête ci-dessus sélectionne toutes les données de la colonne "LastName" de la


table "Employees".

Faculté des Sciences Agadir Université Ibn Zohr 4


PHP Connect to MySQL
● PHP 5 et versions ultérieures peuvent fonctionner avec une base de données MySQL en
utilisant:
• Extension MySQLi (le «i» signifie improved)
• PDO (PHP Data Objects)
● MySQLi et PDO ont tous deux leurs avantages:
● PDO fonctionnera sur 12 systèmes de bases de données différents, MySQLi ne fonctionnera
qu'avec des bases de données MySQL.

● Ainsi, si vous devez changer votre projet pour utiliser une autre base de données, PDO
facilite le processus. Il vous suffit de modifier la chaîne de connexion et quelques requêtes.
Avec MySQLi, vous devrez réécrire tout le code - requêtes incluses.

● Les deux prennent en charge les déclarations préparées. Les instructions préparées
protègent de l'injection SQL et sont très importantes pour la sécurité des applications Web.
Faculté des Sciences Agadir Université Ibn Zohr 5
Open a Connection to MySQL
● Avant de pouvoir accéder aux données de la base de données MySQL, nous devons pouvoir
<?php
nous connecter au serveur: $servername = "localhost";
<?php
$servername = "localhost"; $username = "username";
$username = "username"; $password = "password";
$password = "password";
try {
// Create connection $conn = new
$conn = new mysqli($servername, $username, PDO("mysql:host=$servername;dbname=myDB", $username,
$password); $password);
// set the PDO error mode to exception
// Check connection $conn->setAttribute(PDO::ATTR_ERRMODE,
if ($conn->connect_error) { PDO::ERRMODE_EXCEPTION);
die("Connection failed: " . echo "Connected successfully";
$conn->connect_error); } catch(PDOException $e) {
} echo "Connection failed: " . $e->getMessage();
echo "Connected successfully"; }
?> ?>
● Dans l'exemple PDO ci-dessus, nous avons également spécifié une base de données (myDB). PDO nécessite
une base de données valide pour se connecter. Si aucune base de données n'est spécifiée, une exception est
levée.
● La connexion sera fermée automatiquement à la fin du script. Pour fermer la connexion avant, utilisez ce qui
suit:
MySQLi $conn->close(); PDO $conn = null;
Faculté des Sciences Agadir Université Ibn Zohr 6
PHP Create a MySQL Database
● Une base de données se compose d'une ou plusieurs tables.
● Vous aurez besoin de privilèges CREATE spéciaux pour créer ou supprimer une base de données
MySQL.
● L'instruction CREATE DATABASE est utilisée pour créer une base de données dans MySQL.
● Les exemples suivants créent une base de données nommée "myDB":
<?php
$servername = "localhost"; <?php
$username = "username"; $servername = "localhost";
$password = "password"; $username = "username";
// Create connection $password = "password";
$conn = new mysqli($servername, $username, $password); try {
// Check connection $conn = new PDO("mysql:host=$servername", $username, $password);
if ($conn->connect_error) { // set the PDO error mode to exception
die("Connection failed: " . $conn->connect_error); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} $sql = "CREATE DATABASE myDBPDO";
// Create database // use exec() because no results are returned
$sql = "CREATE DATABASE myDB"; $conn->exec($sql);
if ($conn->query($sql) === TRUE) { echo "Database created successfully<br>";
echo "Database created successfully"; } catch(PDOException $e) {
} else { echo $sql . "<br>" . $e->getMessage();
echo "Error creating database: " . $conn->error; }
} $conn = null;
$conn->close(); ?>
?>
Faculté des Sciences Agadir Université Ibn Zohr 7
PHP MySQL Create Table
● Une table de base de données a son propre nom unique et se compose de colonnes et de
lignes.
● L'instruction CREATE TABLE est utilisée pour créer une table dans MySQL.
● Nous allons créer une table nommée "MyGuests", avec cinq colonnes: "id", "firstname",
"lastname", "email" et "reg_date":
CREATE TABLE MyGuests (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)

● Chaque table doit avoir une colonne de clé primaire (dans ce cas: la colonne "id"). Sa valeur
doit être unique pour chaque enregistrement de la table.

Faculté des Sciences Agadir Université Ibn Zohr 8


PHP MySQL Create Table <?php
$servername = "localhost";
<?php
MySQLi $username = "username";
PDO
$servername = "localhost"; $password = "password";
$username = "username"; $dbname = "myDBPDO";
$password = "password"; try {
$dbname = "myDB"; $conn = new PDO("mysql:host=$servername;dbname=$dbname",
// Create connection $username, $password);
$conn = new mysqli($servername, $username, $password, $dbname); // set the PDO error mode to exception
// Check connection $conn->setAttribute(PDO::ATTR_ERRMODE,
if ($conn->connect_error) { PDO::ERRMODE_EXCEPTION);
die("Connection failed: " . $conn->connect_error); // sql to create table
} $sql = "CREATE TABLE MyGuests (
// sql to create table id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
$sql = "CREATE TABLE MyGuests ( firstname VARCHAR(30) NOT NULL,
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, lastname VARCHAR(30) NOT NULL,
firstname VARCHAR(30) NOT NULL, email VARCHAR(50),
lastname VARCHAR(30) NOT NULL, reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON
email VARCHAR(50), UPDATE CURRENT_TIMESTAMP
reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE )";
CURRENT_TIMESTAMP)"; // use exec() because no results are returned
if ($conn->query($sql) === TRUE) { $conn->exec($sql);
echo "Table MyGuests created successfully"; echo "Table MyGuests created successfully";
} else { } catch(PDOException $e) {
echo "Error creating table: " . $conn->error; echo $sql . "<br>" . $e->getMessage();
} }
$conn->close(); $conn = null;
?> ?>
Faculté des Sciences Agadir Université Ibn Zohr 9
PHP MySQL Insert Data
● Une fois qu'une base de données et une table ont été créées, nous pouvons commencer à
y ajouter des données.

● Voici quelques règles de syntaxe à suivre:


• La requête SQL doit être citée en PHP
• Les valeurs de chaîne à l'intérieur de la requête SQL doivent être entre guillemets
• Les valeurs numériques ne doivent pas être entre guillemets
• Le mot NULL ne doit pas être entre guillemets

● L'instruction INSERT INTO est utilisée pour ajouter de nouveaux enregistrements à une
table MySQL:

INSERT INTO table_name (column1, column2, column3,...)


VALUES (value1, value2, value3,...)

Faculté des Sciences Agadir Université Ibn Zohr 10


<?php PHP MySQL Insert Data
$servername = "localhost";
$username = "username"; <?php
$password = "password"; $servername = "localhost";
$dbname = "myDB"; $username = "username";
$password = "password";
// Create connection $dbname = "myDBPDO";
$conn = new mysqli($servername, $username,
$password, $dbname); try {
// Check connection $conn = new PDO("mysql:host=$servername;dbname=$dbname",
if ($conn->connect_error) { $username, $password);
die("Connection failed: " . $conn->connect_error); // set the PDO error mode to exception
} $conn->setAttribute(PDO::ATTR_ERRMODE,
PDO::ERRMODE_EXCEPTION);
$sql = "INSERT INTO MyGuests (firstname, lastname, $sql = "INSERT INTO MyGuests (firstname, lastname, email)
email) VALUES ('John', 'Doe', 'john@example.com')";
VALUES ('John', 'Doe', 'john@example.com')"; // use exec() because no results are returned
$conn->exec($sql);
if ($conn->query($sql) === TRUE) { echo "New record created successfully";
echo "New record created successfully"; } catch(PDOException $e) {
} else { echo $sql . "<br>" . $e->getMessage();
echo "Error: " . $sql . "<br>" . $conn->error; }
}
$conn->close(); $conn = null;
?> ?>

Faculté des Sciences Agadir Université Ibn Zohr 11


PHP MySQL Insert Multiple Records
● Plusieurs instructions SQL doivent être exécutées avec la fonction mysqli_multi_query ().
● Les exemples suivants ajoutent trois nouveaux enregistrements à la table "MyGuests":
<?php
<?php $servername = "localhost";
$servername = "localhost"; $username = "username";
$username = "username"; $password = "password";
$password = "password"; $dbname = "myDBPDO";
$dbname = "myDB"; try {
// Create connection $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn = new mysqli($servername, $username, $password, // set the PDO error mode to exception
$dbname); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Check connection // begin the transaction
if ($conn->connect_error) { $conn->beginTransaction();
die("Connection failed: " . $conn->connect_error); } // our SQL statements
$sql = "INSERT INTO MyGuests (firstname, lastname, email) $conn->exec("INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe', 'john@example.com');"; VALUES ('John', 'Doe', 'john@example.com')");
$sql .= "INSERT INTO MyGuests (firstname, lastname, email) $conn->exec("INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Mary', 'Moe', 'mary@example.com');"; VALUES ('Mary', 'Moe', 'mary@example.com')");
$sql .= "INSERT INTO MyGuests (firstname, lastname, email) $conn->exec("INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Julie', 'Dooley', 'julie@example.com')"; VALUES ('Julie', 'Dooley', 'julie@example.com')");
// commit the transaction
if ($conn->multi_query($sql) === TRUE) { $conn->commit();
echo "New records created successfully"; echo "New records created successfully";
} else { } catch(PDOException $e) {
echo "Error: " . $sql . "<br>" . $conn->error; // roll back the transaction if something failed
} $conn->rollback();
$conn->close(); echo "Error: " . $e->getMessage(); }
?> $conn = null;
?>
Faculté des Sciences Agadir Université Ibn Zohr 12
PHP MySQL Prepared Statements
● Une instruction préparée est une fonctionnalité utilisée pour exécuter les mêmes
instructions SQL (ou similaires) à plusieurs reprises avec une grande efficacité.
● Préparation: un modèle d'instruction SQL est créé et envoyé à la base de données.
Certaines valeurs ne sont pas spécifiées, appelées paramètres (étiquetés "?"). Exemple:
INSÉRER DANS LES VALEURS MyGuests (?,?,?)
● La base de données analyse, compile et effectue l'optimisation des requêtes sur le modèle
d'instruction SQL, et stocke le résultat sans l'exécuter
● Exécuter: ultérieurement, l'application lie les valeurs aux paramètres et la base de données
exécute l'instruction. L'application peut exécuter l'instruction autant de fois qu'elle le
souhaite avec des valeurs différentes

"INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)"


$stmt->bind_param("sss", $firstname, $lastname, $email);

Faculté des Sciences Agadir Université Ibn Zohr 13


Prepared Statements // prepare sql and bind parameters
$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname,
// prepare and bind email)
$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, VALUES (:firstname, :lastname, :email)");
lastname, email) VALUES (?, ?, ?)"); $stmt->bindParam(':firstname', $firstname);
$stmt->bind_param("sss", $firstname, $lastname, $email); $stmt->bindParam(':lastname', $lastname);
$stmt->bindParam(':email', $email);
// set parameters and execute // insert a row
$firstname = "John"; $firstname = "John";
$lastname = "Doe"; $lastname = "Doe";
$email = "john@example.com"; $email = "john@example.com";
$stmt->execute(); $stmt->execute();
// insert another row
$firstname = "Mary"; $firstname = "Mary";
$lastname = "Moe"; $lastname = "Moe";
$email = "mary@example.com"; $email = "mary@example.com";
$stmt->execute(); $stmt->execute();
// insert another row
$firstname = "Julie"; $firstname = "Julie";
$lastname = "Dooley"; $lastname = "Dooley";
$email = "julie@example.com"; $email = "julie@example.com";
$stmt->execute(); $stmt->execute();
echo "New records created successfully";
} catch(PDOException $e) {
echo "Error: " . $e->getMessage();
}

Faculté des Sciences Agadir Université Ibn Zohr 14


PHP MySQL Select Data
● L'instruction SELECT est utilisée pour sélectionner des données dans une ou plusieurs tables:
SELECT column_name(s) FROM table_name
● ou nous pouvons utiliser le caractère * pour sélectionner TOUTES les colonnes d'une table
SELECT * FROM table_name
try {
// Create connection
$conn = new PDO("mysql:host=$servername;dbname=$dbname",
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection $username, $password);
if ($conn->connect_error) { $conn->setAttribute(PDO::ATTR_ERRMODE,
die("Connection failed: " . $conn->connect_error); PDO::ERRMODE_EXCEPTION);
} $stmt = $conn->prepare("SELECT id, firstname, lastname FROM
$sql = "SELECT id, firstname, lastname FROM MyGuests"; MyGuests");
$result = $conn->query($sql); $stmt->execute();
if ($result->num_rows > 0) {
// output data of each row // set the resulting array to associative
while($row = $result->fetch_assoc()) { $result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . foreach(new TableRows(new
$row["lastname"]. "<br>";
RecursiveArrayIterator($stmt->fetchAll())) as $k=>$v) {
}
} else { echo $v;
echo "0 results"; }
} catch(PDOException $e) {
}
$conn->close(); MySQLi echo "Error: " . $e->getMessage(); PDO
}
Faculté des Sciences Agadir Université Ibn Zohr 15
PHP MySQL Use The WHERE Clause
● La clause WHERE est utilisée pour filtrer les enregistrements.
● La clause WHERE est utilisée pour extraire uniquement les enregistrements qui remplissent
une condition spécifiée.
SELECT column_name(s) FROM table_name WHERE column_name operator value
try {
$sql = "SELECT id, firstname, lastname FROM
$conn = new PDO("mysql:host=$servername;dbname=$dbname",
MyGuests WHERE lastname='Doe'"; $username, $password);
$result = $conn->query($sql); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare("SELECT id, firstname, lastname FROM MyGuests
if ($result->num_rows > 0) { WHERE lastname='Doe'");
// output data of each row $stmt->execute();
while($row = $result->fetch_assoc()) { // set the resulting array to associative
echo "id: " . $row["id"]. " - Name: " . $result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
$row["firstname"]. " " . $row["lastname"]. "<br>"; foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as
} $k=>$v) {
} else { echo $v;
echo "0 results"; }
} }
$conn->close(); catch(PDOException $e) {
MySQLi }
echo "Error: " . $e->getMessage(); PDO
Faculté des Sciences Agadir Université Ibn Zohr 16
PHP MySQL Use The ORDER BY Clause
● La clause ORDER BY est utilisée pour trier le jeu de résultats par ordre croissant ou décroissant.
● La clause ORDER BY trie les enregistrements dans l'ordre croissant par défaut. Pour trier les enregistrements
par ordre décroissant, utilisez le mot clé DESC.
SELECT column_name(s) FROM table_name ORDER BY column_name(s) ASC|DESC
● L'exemple suivant sélectionne les colonnes id, firstname et lastname dans la table MyGuests. Les
enregistrements seront classés par colonne de nom:
try {
$sql = "SELECT id, firstname, lastname FROM MyGuests
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username,
ORDER BY lastname"; $password);
$result = $conn->query($sql); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare("SELECT id, firstname, lastname FROM MyGuests ORDER
BY lastname");
if ($result->num_rows > 0) {
$stmt->execute();
// output data of each row // set the resulting array to associative
while($row = $result->fetch_assoc()) { $result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
echo "id: " . $row["id"]. " - Name: " . foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as $k=>$v)
$row["firstname"]. " " . $row["lastname"]. "<br>"; {
} echo $v;
} else { }
} catch(PDOException $e) {
echo "0 results"; echo "Error: " . $e->getMessage();
} MySQLi }
$conn = null;
PDO
Faculté des Sciences Agadir Université Ibn Zohr 17
PHP MySQL Delete Data
● L'instruction DELETE est utilisée pour supprimer des enregistrements d'une table:
DELETE FROM table_name
WHERE some_column = some_value
● La clause WHERE spécifie le ou les enregistrements à supprimer. Si vous omettez la clause
WHERE, tous les enregistrements seront supprimés!
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username,
$password);
// set the PDO error mode to exception
// sql to delete a record
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "DELETE FROM MyGuests WHERE id=3";
// sql to delete a record
if ($conn->query($sql) === TRUE) {
$sql = "DELETE FROM MyGuests WHERE id=3";
echo "Record deleted successfully";
} else {
// use exec() because no results are returned
echo "Error deleting record: " . $conn->error;
$conn->exec($sql);
}
echo "Record deleted successfully";
} catch(PDOException $e) {
echo $sql . "<br>" . $e->getMessage();
MySQLi }
$conn = null; PDO
Faculté des Sciences Agadir Université Ibn Zohr 18
PHP MySQL Update Data
● L'instruction UPDATE est utilisée pour mettre à jour les enregistrements existants dans une table:
UPDATE table_name
SET column1=value, column2=value2,...
WHERE some_column=some_value
● La clause WHERE spécifie le ou les enregistrements à mettre à jour. Si vous omettez la clause
WHERE, tous les enregistrements seront mis à jour! try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname",
$username, $password);
// Create connection // set the PDO error mode to exception
$conn = new mysqli($servername, $username, $password, $dbname); $conn->setAttribute(PDO::ATTR_ERRMODE,
// Check connection PDO::ERRMODE_EXCEPTION);
if ($conn->connect_error) { $sql = "UPDATE MyGuests SET lastname='Doe' WHERE id=2";
die("Connection failed: " . $conn->connect_error); // Prepare statement
} $stmt = $conn->prepare($sql);
$sql = "UPDATE MyGuests SET lastname='Doe' WHERE id=2"; // execute the query
$stmt->execute();
if ($conn->query($sql) === TRUE) { // echo a message to say the UPDATE succeeded
echo "Record updated successfully"; echo $stmt->rowCount() . " records UPDATED successfully";
} else { } catch(PDOException $e) {
echo "Error updating record: " . $conn->error; echo $sql . "<br>" . $e->getMessage();
} }
$conn->close();
MySQLi $conn = null; PDO
Faculté des Sciences Agadir Université Ibn Zohr 19
PHP MySQL Limit Data Selections
● MySQL fournit une clause LIMIT qui est utilisée pour spécifier le nombre d'enregistrements à renvoyer.

● La clause LIMIT facilite le codage des résultats de plusieurs pages ou de la pagination avec SQL et est
très utile sur les grandes tables. Le renvoi d'un grand nombre d'enregistrements peut avoir un impact
sur les performances.

● Supposons que nous souhaitons sélectionner tous les enregistrements de 1 à 30 (inclus) dans une table
appelée "Commandes". La requête SQL ressemblerait alors à ceci:

$sql = "SELECT * FROM Orders LIMIT 30";

● Lorsque la requête SQL ci-dessus est exécutée, elle renverra les 30 premiers enregistrements.

Faculté des Sciences Agadir Université Ibn Zohr 20


PHP MySQL Limit Data Selections
● Que faire si nous voulons sélectionner les enregistrements 16 - 25 (inclus)?

● Mysql fournit également un moyen de gérer cela: en utilisant OFFSET.

● La requête SQL ci-dessous indique "ne renvoyer que 10 enregistrements, commencer sur
l'enregistrement 16 (OFFSET 15)":

$sql = "SELECT * FROM Orders LIMIT 10 OFFSET 15";

● Vous pouvez également utiliser une syntaxe plus courte pour obtenir le même résultat:

$sql = "SELECT * FROM Orders LIMIT 15, 10";

● Notez que les nombres sont inversés lorsque vous utilisez une virgule.

Faculté des Sciences Agadir Université Ibn Zohr 21

Vous aimerez peut-être aussi