
| auteur : Cyberzoide | Vaste sujet, ça dépend de la structure de la base !
Vous seront donnés ici quelques éléments de syntaxe de MySQL pour faire des sélections, tris et regroupements avec MySQL.
Une requête sera du type :
SELECT colonne1, colonne2, ...
FROM table1, table2, ...
WHERE colonnei=valeuri
AND|OR [NOT] colonnek IN (val1, val2, ...)
AND (colonnel BETWEEN aa AND bb)
AND colonnef LIKE "%$chaîne%"
ORDER BY colonnei ASC|DESC
GROUP BY colonnej
LIMIT a, b |
La clause SELECT permet de choisir les colonnes (séparées par une virgule) du résultat (c'est une projection). La clause FROM dit de quelles tables (séparées par une virgule) proviennent les lignes du résultat. La clause WHERE permet de sélectionner les lignes selon les valeurs des colonnes, les opérateurs booléens AND, OR et NOT, ainsi que les parenthèses et autres fonctions de MySQL sont possibles. La clause ORDER BY permet de faire un tri ASCendant ou DESCendant sur une ou plusieurs colonnes (séparées par une virgule). La clause GROUP BY permet de regrouper les lignes qui ont une colonne en commun (par exemple "GROUP BY nom" permet de grouper les lignes selon le nom). La clause LIMIT permet de paginer les résultats en ne retournant que les lignes numéros a à b par mis celles du résultat.
La commande LIKE permet de faire une comparaison sur les chaînes de caractères. Cette comparaison est insensible à la casse, sauf sur les colonnes dont le type est de la famille des BLOB. Les caractères spéciaux % et _ sont des caractères génériques au même titre que * et ? sous Linux et MS-DOS. Ils signifient respectivement n'importe quelle chaîne (même vide), un seul caractère quelconque.
La commande BETWEEN .. AND ... permet de comparer la valeur d'une colonne à un intervalle de valeurs.
La commande IN(...,) permet de comparer la valeur d'une colonne à une liste de valeurs prédéfinies.
|
| auteur : Cyberzoide | Il faut procéder par étape :
- étape 1 : se connecter au serveur de base de données avec mysql_connect() en précisant le nom du serveur, un nom d'utilisateur et un mot de passe valide
- étape 2 : sélectionner la base de données sur laquelle on souhaite travailler, avec mysql_select_db()
- étape 3 : fermer avec mysql_close() la connexion une fois le travail sur la base de données terminé
Les actions possibles de l'utilisateur sur la base à laquelle il se connecte dépendent des droits qui lui auront été fournis par l'administrateur de la base de données.
mysql_connect($server,$user,$password) : permet de se connecter au serveur $server en tant qu'utilisateur $user avec le mot de passe $password, retourne l'identifiant de connexion si succès, FALSE sinon. Si ces arguments manquent, les valeurs par défaut du fichier de configuration php.ini seront utilisées.
mysql_select_db($base[,$id]) : permet de choisir la base $base, peut prendre un identifiant $id de connexion ; retourne TRUE en cas de succès, sinon FALSE. Les identifiants de connexion ne sont pas nécessaires si on ne se connecte qu'à un seul serveur à la fois, ils permettent seulement de lever toute ambiguïté en cas de connexions multiples (vers plusieurs serveurs dans le même script).
mysql_close([$id]) : permet de fermer la connexion à un serveur de bases de données, l'argument optionnel $id est l'identifiant de connexion retourné à l'ouverture de la connexion.
A noter que toutes les connexions aux serveurs de bases de données sont automatiquement fermées à la fin de l'exécution du script qui les aura ouvertes.
|
| auteur : Forum PHP |
Il est tout à fait possible de se connecter à deux bases de données différentes en utilisant le même login. La connection doit être effectuée de la manière suivante :
$db2 contient true pour forcer l'ouverture d'une nouvelle connexion en laissant la premiere ouverte.
|
| auteur : Cyberzoide |
Exemple :
Si les résultats en eux-mêmes ne vous intéressent pas, utilisez directement la fonction de groupe COUNT(*) dans la requête MySQL.
Exemple :
La fonction mysql_num_rows est une boucle sur un curseur. Elle va donc consommer beaucoup plus qu'un simple COUNT en SQL. Faites l'essai sur une table contenant plusieurs millions de lignes pour le vérifier. En effet, PHP va "dumper" toutes les lignes pour obtenir ce nombre.
Il vaut donc mieux pour compter le nombre de lignes (dans 90% des cas) faire un "select count(*) from..." et non utiliser mysql_num_rows().
|
| auteur : Cyberzoide | Lors de l'insertion d'une ligne dans une table comportant une colonne de type numérique clé primaire auto_increment, une valeur est automatiquement affectée à cette colonne si elle n'est pas renseignée lors du INSERT.
Il est utile de pouvoir extraire cette valeur pour s'en servir dans une autre table, par exemple à l'occasion de la création d'une jointure...
La fonction mysql_insert_id([$id]) retourne l'identifiant de l'attribut clé primaire AUTO_INCREMENT de la dernière insertion. L'argument optionnel $id est l'identifiant de connexion au serveur. Il s'agit du dernier identifiant pour la connexion en cours, donc cette fonction peut-être utilisée sans problème en cas de connexions simultanées de plusieurs personnes.
|
| auteur : Cyberzoide | Dans le cas où le visiteur du site doit naviguer à travers différents script PHP qui se connectent tous au même serveur, il est préférable d'avoir recours aux connexions persistantes.
Une connexion persistante est ouverte avec la fonction mysql_pconnect() qui est en tout point comparable à mysql_connect() à la seule différence que la connexion n'est pas fermée à la fin du script qui a ouvert la connexion. Ainsi, les scripts suivants peuvent continuer à lancer des requêtes à la base de données sans avoir à rouvrir de connexion en direction du serveur.
Une connexion persistante ne peut pas être fermée avec la fonction mysql_close(). Au delà d'un certain temps d'inactivité, la ou les connexions persistantes ouvertes sont automatiquement fermées.
|
| auteur : Julp | Il existe deux méthodes :
Utiliser la requête MySQL "Show Databases;" qui lui est spécifique, et qui renvoie le nom de toutes les bases de données présentes.
ou
Utiliser la fonction mysql_list_dbs() qui renvoie le nom de toutes les bases de données.
|
| auteur : Julp | Il existe deux méthodes :
ou
|
| auteur : Cyberzoide | Non, même en séparant les requêtes par un point virgule, MySQL refusera d'exécuter plusieurs requêtes en un seul appel de mysql_query().
mysql_query("UPDATE `table` SET `col`='value' WHERE `id`=$id; DELETE FROM `table` WHERE `id`=$id2"); |
mysql_query("UPDATE `table` SET `col`='value' WHERE `id`=$id");
mysql_query("DELETE FROM `table` WHERE `id`=$id2"); |
|
| auteur : Cyberzoide | Etudions l'exemple complet de la conversion d'une date au format anglophone MySQL en format francophone.
Une date MySQL se présente ainsi : "YYYY-DD-MM hh:mm:ss"
YYYY : l'année numérique avec 4 chiffres, DD : le jour numérique, MM : le mois numérique, hh : heures, mm : minutes, ss : secondes
Tous les nombres sur 2 chiffres prennent un zéro devant si nécessaire.
Par exemple : "2002-20-04 15:08:20" correspond au 20 avril 2002 à 15h08 et 20 secondes.
Ce format correspond au type DATETIME. Soit lastmodified un attribut d'une table MySQL.
La requête suivante permet d'extraire la date de dernière modification d'un enregistrement.
SELECT lastmodified
FROM citations
WHERE id=$id; |
Étape 1 : extraction de la date d'une base de données MySQL
$requet = "SELECT lastmodified FROM citations WHERE id=$id";
if($result = mysql_query($requet))
{
if($ligne = mysql_fetch_row($result))
{
$lastmodifed = $ligne[0];
}
else
die("Erreur base de données");
}
else
die("Erreur base de données"); |
Étape 2 : séparation de la date et de l'heure
Le seul espace de la chaîne de caractères qui constitue la variable $lastmodified est un séparateur entre la date et l'heure. On va donc la scinder en ses deux morceaux grâce à la fonction explode() qui renvoie les sous chaînes dans un tableau dont est extrait, via list(), les deux variables $date et $time.
Étape 3 : extraction des jour, mois, année
On procède selon le même schéma que précédemment sauf qu'ici c'est le tiret qui est séparateur dans la date.
Étape 4 : extraction facultative des heures, minutes, secondes
Ici, le séparateur sont les deux points.
Étape 5 : affichage au format francophone
echo $lastmodified = "$day/$month/$year $time"; |
Affiche "20/04/2002 15:08:20".
On a donc transcrit en français notre date anglaise.
On peut aller encore plus loin en affichant les mois en toutes lettres et en français.
Étape 6 : affichage en toutes lettres du mois
On crée d'abord le tableau des mois de l'année.
$months = array("janvier", "février", "mars", "avril", "mai", "juin",
"juillet", "août", "septembre", "octobre", "novembre", "décembre"); |
Ensuite, on affiche l'élément du tableau des mois de l'année dont l'indice est égal au numéro du mois. Comme l'indice du tableau commence à zéro, il faut soustraire 1 à $month, cela aura aussi pour effet de caster cette chaîne en entier (et de supprimer le zéro éventuel en première position).
echo $lastmodified = "le $day ".$months[$month-1]." $year à ${hour}h${min}m${sec}s"; |
Affiche "le 20 avril 2002 à 15h08m20s".
Et voilà !
|
lien : Comment convertir une date MySQL au format francophone ?
|
| auteurs : Kerod, Forum PHP |
Une date au format MySQL est sous la forme suivante
"YYYY-DD-MM hh:mm:ss". Par conséquent, pour la convertir au
format francophone "jour/mois/annee hh:mm:ss", il nous faut
utiliser la fonction
strtotime()
qui essaye de lire une date au format anglophone, et de la transformer en
timestamp Unix.
Cette fonction renverra donc, en cas de succès, un nombre
entier qui correspondra au timestamp et FALSE sinon.
$dateMySQL = "2006-28-12 22:45:34";
$echo date("d/m/Y H:i:s", strtotime($dateMySQL)); |
|
lien : Comment afficher une date MySQL en français ?
|
| auteur : Cyberzoide | Le mot clé BETWEEN ... AND ... de la clause WHERE permet de ne retenir que les engistrements dont un attribut appartient à un intervalle. Cet intervalle peut être déterminé par deux dates. Dont l'une peut se déduire de l'autre par ajout ou retrait d'une période.
Syntaxe :
date +/- INTERVAL valeur unité |
Cela permet de d'ajouter (+) ou de retirer (-) à la date date une période de valeurs unités.
L'unité peut être l'une des suivantes :
- SECOND (la seconde)
- MINUTE (la minute)
- HOUR (l'heure)
- DAY (le jour)
- MONTH (le mois)
- YEAR (l'année)
- MINUTE_SECOND (la minute et la seconde), ex : '2003-06-25' + INTERVAL "26:30" MINUTE_SECOND (ajout de 26 minutes et de 30 secondes)
- HOUR_MINUTE (l'heure et la minute)
- DAY_HOUR (le jour et l'heure)
- YEAR_MONTH (l'année et le mois)
- HOUR_SECOND (heure, minute et seconde)
- DAY_MINUTE (jour, heure et minute)
- DAY_SECOND (jour, heure, minute et seconde), ex : '2003-06-25' - INTERVAL "5 8:30:00" DAY_SECOND (retrait de 5 jours, 8 heures, 30 minutes et 0 seconde)
Note : les séparateurs peuvent être quelconques.
Exemple :
SELECT
FROM
WHERE `date` BETWEEN ('2003-06-25' - INTERVAL 3 MONTH) AND '2003-06-25' |
Cet exemple permet d'extraire tous les enregistrements dont la date est comprise entre '2003-06-25' et 3 mois avant.
|
| auteur : Forum PHP |
Pour afficher les valeurs d'un SELECT utilisant des fonctions DATE (décrites ici), il faut créer un alias. Exemple :
$select_annee=mysql_query("SELECT DISTINCT YEAR(DATE) as Annee FROM table1 WHERE id = '$id'");
while($annee = mysql_fetch_array($select_annee))
{
echo $annee['Annee'];
} |
|
| auteur : Julp |
La fonction mysql_affected_rows(),
qui prend en unique paramètre l'identifiant de requête,
retourne le nombre de lignes modifiées par une requête de
type : delete, insert ou update. Elle ne fonctionne en
aucun cas sur des requêtes de type SELECT mais seulement
sur des requêtes de modification. Pour connaître le nombre
de lignes retournées par une requête SELECT, utilisez
mysql_num_rows().
Si la requête a échoué, mysql_affected_rows() renvoie la valeur -1.
Par contre, à la suite d'une requête DELETE sans clause WHERE,
cette fonction renvoie 0.
|
lien : Comment connaître le nombre de lignes retournées par une requête MySQL ?
|
| auteur : Julp |
Attention : Le numéro du premier enregistrement est 0.
|
| auteur : Julp |
Attention : Le numéro du premier enregistrement renvoyé étant 0, il faut donc soustraire 1 à mysql_num_rows() qui renvoie le nombre de lignes renvoyées par une requête Select.
|
| auteur : Forum PHP | Pour afficher un enregistrement aléatoirement, il est possible d'utiliser la fonction MySQL " RAND" qui génére des nombres aléatoires.
Pour sélectionner un enregistrement aléatoirement dans la table "nomTable" il suffit d'utiliser la requête MySQL suivante :
SELECT *
FROM nomTable
ORDER BY RAND()
LIMIT 1 |
La ligne "ORDER BY RAND()" permet de trier aléatoirement tous les enregistrements et ensuite "LIMIT 1" permet de sélectionner le premier enregistrement.
|
| auteur : Forum PHP |
L'erreur "supplied argument is not a valid MySQL result resource" se produit quand une fonction MySQL n'a pas de résultat MySQL valide fourni en argument. Regardons le message d'erreur suivant par exemple :
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /var/www/html/bugMySQL.php on line 10 |
Et voila le contenu du fichier "bugMySQL.php" : 1 <?php
2
3 $connexion = mysql_connect('localhost', 'root', '');
4
5 mysql_select_db('test', $connexion);
6
7 $requete = 'SELECT * FROM nomTable WHERE champ = ';
8 $resultat = mysql_query($requete, $connexion);
9
10 while ($ligne = mysql_fetch_assoc($resultat)) {
11 echo "{$ligne['champ']}<br/>";
12 }
13
14 ?> |
L'erreur est à la ligne 10. Il s'agit donc de "$resultat" qui ne contient pas un résultat valide ce qui veut dire que la requête exécutée sur la ligne 8 pose problème.
Pour savoir quel est le problème, il suffit d'utiliser la fonction " mysql_error" qui retourne le message d'erreur fourni par le serveur MySQL. Cette fonction peut-être utilisée à n'importe quel étape de l'utilisation de MySQL, donc voila le code à utiliser pour gérer les erreurs.
En lançant ce code, le résultat suivant est obtenu : You have an error in your SQL syntax near '' at line 1
SELECT * FROM nomTable WHERE champ = |
À l'aide du message d'erreur de MySQL, il est maintenant facile de corriger la requête. Attention, "line 1" qui apparait dans la message ne veut pas dire qu'il y a un problème sur la première ligne du fichier PHP mais sur la première ligne de la requête.
L'utilisation de ce code est très utile pour gérer les erreurs de MySQL, c'est pourquoi il est conseillé de mettre ce code dès qu'on commence à programmer. Ainsi en cas de problème, le message d'erreur fourni par MySQL apparaît immédiatement et dans le cas où il n'y a pas de problème, le code peut être laissé, il ne gênera pas le reste du code PHP.
|
| auteur : elitemedia |
Il faut d'abord comprendre qu'en matière d'encodage, toute
votre chaîne doit être convertie à l'encodage choisi
(nous parlerons ici d'UTF-8).
Cela concerne en premier votre logiciel de programmation
(IDE PHP, Dreamweaver et autres éditeurs de pages Web).
Tout bon éditeur qui se respecte doit vous proposer le
choix de l'encodage de vos documents. Pour Dreamweaver par
exemple, cela se trouve dans les préférences pour les
nouveaux documents où vous spécifierez comme codage par
défaut « Unicode (UTF-8) ».
Ensuite, votre serveur PHP doit renvoyer le bon encodage
lorsque vous générez du HTML avec PHP. Dans tous les cas et
ceci afin de garantir la compatibilité de vos scripts,
prenez l'habitude d'envoyer un Header spécifiant l'encodage
comme suit :
<?php
header ('Content-type: text/html; charset=utf-8');
echo 'é à € û ü';
?> |
Pour la base de données, il en est de même :
D'abord vous devez entrer vos données en UTF-8. Si vous
utilisez PhpMyAdmin par exemple, n'oubliez pas de préciser
votre encodage pour la base de données, pour l'interface PHP
MyAdmin, pour les tables (selon les versions). Tout doit correspondre !
Mais ce n'est pas tout. Il faut également spécifier dans vos
scripts PHP que les données récuperées ou transmises doivent
être en UTF-8. La fonction magique pour ceci est :
Elle est à insérer juste après la connexion à la base établie,
donc juste après avoir fait un
|
Consultez les autres F.A.Q's
Les sources présentés sur cette pages sont libre de droits,
et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.
Copyright ©2003
Developpez LLC. Tout droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de
l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans
de prison et jusqu'à 300 000 E de dommages et intérets.
Cette page est déposée à la SACD.
|