Notez que cet article a été écrit il y a plus de 5 ans, mais il n'est pas forcément obsolète.
PHP: Hypertext Preprocessor, qui adopte dans sa version 5 la programmation objet, est un langage libre principalement utilisé pour produire des pages Web dynamiques via un serveur HTTP style Apache ou Nginx.
Avec MySQL, serveur de bases de données relationnelles développé dans un souci de performances élevées en lecture, PHP permet le stockage, le traitement et la restitution d’un nombre important de données. Son nom vient du prénom de la fille du cocréateur Michael Widenius, My. SQL fait allusion au Structured Query Language, le langage de requête développé par la société Oracle.
Utiliser PDO :
PHP Data Objects PDO est une extension PHP orientée objet définissant une interface pour accéder à une base de données.
Connexion :
1 2 3 4 5 6 7 8 |
// PDO try { $dbh = new PDO( "mysql:host={$host};dbname={$dbname}", $user, $password ); $dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); } catch( PDOException $e ) { echo "Database connection to {$host}:{$dbname} error: " . $e->getMessage(); } |
Requêtes préparées avec PDO :
Select :
1 2 3 4 5 6 7 8 9 |
try { $query = "SELECT * FROM tablename WHERE page = :page"; $stmt = $dbh->prepare( $query ); $stmt->bindValue( ':page', $page ); $stmt->execute(); } catch( PDOException $e ) { echo "SELECT Query error: " . $e->getMessage(); } |
Insert :
1 2 3 4 5 6 7 8 9 10 11 12 |
try { $query = "INSERT INTO tablename ( type, title, page, dateInsert, details ) VALUES ( :type, :title, :page, NOW(), :details )"; $stmt = $dbh->prepare( $query ); $stmt->bindValue( ':type', $type ); $stmt->bindValue( ':title', $title ); $stmt->bindValue( ':page', $page ); $stmt->bindValue( ':details', $json ); $stmt->execute(); } catch( PDOException $e ) { echo "INSERT query error: " . $e->getMessage(); } |
Delete :
1 2 3 4 5 6 7 8 9 |
try { $query = "DELETE FROM tablename WHERE dateInsert < :dateCache"; $stmt = $dbh->prepare( $query ); $stmt->bindValue( ':dateCache', "NOW() - INTERVAL $cacheMovies SECOND" ); $stmt->execute(); } catch( PDOException $e ) { echo "DELETE query error: " . $e->getMessage(); } |
Requêtes intéressantes :
Sélectionner tous les enregistrements d’une table qui n’existent pas dans une autre table :
1 2 3 4 |
SELECT t1.name FROM table1 t1 LEFT JOIN table2 t2 ON t2.name = t1.name WHERE t2.name IS NULL |
Remplacer une partie d’une chaîne dans un champ :
1 2 |
UPDATE table SET field = REPLACE( field, 'old_substing', 'new_substring') [WHERE condition] |
Compter les valeurs dupliquées dans une colonne name :
1 |
SELECT name, COUNT(*) c FROM table GROUP BY name HAVING c > 1; |
Sélectionner les lignes qui ont une valeur en commun :
1 2 3 |
SELECT * from gal_authors where author in ( SELECT author FROM gal_authors GROUP BY author HAVING COUNT(*) > 1 ) ORDER BY author |
Sélectionner les lignes dont une sous-chaine matche en regex :
1 |
SELECT * FROM [table] WHERE field RLIKE 'lys[oø]' |
La requête matchera les lignes dont le champ field contient les chaines lyso ou lysø. RLIKE et REGEXP sont synonymes.
Sélectionner les lignes dont un champ est trouvé dans une chaîne:
1 |
SELECT * FROM [table] WHERE '$string' LIKE CONCAT( '%', field, '%' ) |
Incrémenter un compteur :
1 |
UPDATE [table] SET visitime = NOW(), total = total + 1 WHERE id = 1 |
UPDATE conditionnel :
1 2 3 4 5 |
UPDATE counter SET allconnections = IF( DATE( visitime ) = CURDATE(), allconnections, 1 ), total = IF( DATE( visitime ) = CURDATE(), total, 1 ), visitime = IF( DATE( visitime ) = CURDATE(), visitime, NOW() ) WHERE id = 2; |
Connaître la valeur de l’AUTO-INCREMENT :
1 2 3 4 |
SELECT `AUTO_INCREMENT` FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'Database' AND TABLE_NAME = 'Table'; |
Changer la valeur de l’AUTO-INCREMENT :
1 |
ALTER TABLE [table] AUTO_INCREMENT = 100; |
Plusieurs SELECT dans une requête :
1 2 3 4 |
SELECT (SELECT total FROM [table] WHERE id=1) AS total, (SELECT count(*) FROM [table] WHERE DATE(visitime)=CURDATE()) AS today, (SELECT count(*) FROM [table] WHERE visitime > DATE_SUB(NOW(), INTERVAL 15 MINUTE)) AS online; |
Avec affichage de l’erreur mysql :
1 2 3 4 5 6 7 8 |
<?php $query = "..."; $result = $mysqli->query( $query ); if( ! $result ) echo "mysqli error description: {$mysqli->error}"; while( $row = $result->fetch_array() ) { // Code if query was successful } ?> |
Déterminer la version mySQL du serveur:
1 |
mysql> SHOW VARIABLES LIKE "%version%"; |
Dupliquer une table et toutes les données :
1 2 |
CREATE TABLE newtable LIKE oldtable; INSERT newtable SELECT * FROM oldtable; |
Sélectionner le dernier enregistrement d’une table:
1 |
SELECT * FROM table_name ORDER BY id DESC LIMIT 1 |
Sélection à partir d’une table d’une base de données ayant un préfixe:
1 2 3 4 5 6 7 8 9 |
<?php $query = "SELECT * FROM {$prefix}ma_table"; $result = $mysqli->query( $query ); while ( $row = $result->fetch_array() ) { // code } ?> |
Sélectionner les lignes dont une valeur contient une chaine:
1 |
SELECT * FROM [table] WHERE [field] LIKE '%chaineAtrouver%' |