Les fonctions de l’extension mysql
Voici d’après le site officiel PHP : http://www.php.net , la liste des fonctions de l’extension MySQL standard :
* mysql_affected_rows — Retourne le nombre de lignes affectées lors de la dernière opération MySQL
* mysql_change_user — Change le nom de l’utilisateur de la connexion active
* mysql_client_encoding — Retourne le nom du jeu de caractères utilisé par le client MySQL
* mysql_close — Ferme la connexion MySQL
* mysql_connect — Ouvre une connexion à un serveur MySQL
* mysql_create_db — Crée une base de données MySQL
* mysql_data_seek — Déplace le pointeur interne de résultat MySQL
* mysql_db_name — Lit les noms des bases de données
* mysql_db_query — Envoie une requête MySQL à un serveur MySQL
* mysql_drop_db — Efface une base de données MySQL
* mysql_errno — Retourne le numéro d’erreur de la dernière commande MySQL
* mysql_error — Retourne le texte associé avec l’erreur générée lors de la dernière requête
* mysql_escape_string — Protège les caractères spéciaux SQL
* mysql_fetch_array — Retourne une ligne de résultat MySQL sous la forme d’un tableau associatif, d’un tableau indexé, ou les deux
* mysql_fetch_assoc — Lit une ligne de résultat MySQL dans un tableau associatif
* mysql_fetch_field — Retourne les données enregistrées dans une colonne MySQL sous forme d’objet
* mysql_fetch_lengths — Retourne la taille de chaque colonne d’une ligne de résultat MySQL
* mysql_fetch_object — Retourne une ligne de résultat MySQL sous la forme d’un objet
* mysql_fetch_row — Retourne une ligne de résultat MySQL sous la forme d’un tableau
* mysql_field_flags — Retourne des détails sur une colonne MySQL
* mysql_field_len — Retourne la taille d’un champ de résultat MySQL
* mysql_field_name — Retourne le nom d’une colonne dans un résultat MySQL
* mysql_field_seek — Déplace le pointeur de résultat vers une position donnée
* mysql_field_table — Retourne le nom de la table MySQL où se trouve une colonne
* mysql_field_type — Retourne le type d’une colonne MySQL spécifique
* mysql_free_result — Libère le résultat de la mémoire
* mysql_get_client_info — Lit les informations sur le client MySQL
* mysql_get_host_info — Lit les informations sur l’hôte MySQL
* mysql_get_proto_info — Lit les informations sur le protocole MySQL
* mysql_get_server_info — Lit les informations sur le serveur MySQL
* mysql_info — Lit des informations à propos de la dernière requête MySQL
* mysql_insert_id — Retourne l’identifiant généré par la dernière requête INSERT MySQL
* mysql_list_dbs — Liste les bases de données disponibles sur le serveur MySQL
* mysql_list_fields — Liste les champs d’une table MySQL
* mysql_list_processes — Liste les processus MySQL
* mysql_list_tables — Liste les tables d’une base de données MySQL
* mysql_num_fields — Retourne le nombre de champs d’un résultat MySQL
* mysql_num_rows — Retourne le nombre de lignes d’un résultat MySQL
* mysql_pconnect — Ouvre une connexion persistante à un serveur MySQL
* mysql_ping — Vérifie la connexion au serveur MySQL, et s’y reconnecte au besoin
* mysql_query — Envoie une requête à un serveur MySQL
* mysql_real_escape_string — Protège les caractères spéciaux d’une commande SQL
* mysql_result — Retourne un champ d’un résultat MySQL
* mysql_select_db — Sélectionne une base de données MySQL
* mysql_set_charset — Sets the client character set
* mysql_stat — Retourne le statut courant du serveur MySQL
* mysql_tablename — Lit le nom de la table qui contient un champ
* mysql_thread_id — Retourne l’identifiant du thread MySQL courant
* mysql_unbuffered_query — Exécute une requête SQL sans mobiliser les résultats MySQL
Afin d’y voir plus clair, nous allons tenter de les regrouper par types d’opération ou de fonctionnalités
Taxinomie des fonctions MySQL de PHP
| connexion | mysql_connect, mysql_pconnect, mysql_close, mysql_ping, (my_sql_select_db, mysql_change_user) |
| gestion d’erreurs | mysql_error, mysql_errno |
| méta données DB | mysql_field_flags, mysql_field_name, mysql_field_len, mysql_field_table, mysql_field_type, mysql_list_fields, mysql_info, mysql_insert_id,mysql__num_rows mysql_list_tables, mysql_table_name |
| méta données Serveur | mysql_client_encoding, mysql_get_client_info, mysql_get_host_info, mysql_get_proto_info, mysql_get_server_info,mysql_list_dbs, mysql_list_processes, mysql_stat, mysql_thread_id |
| lecture lignes | mysql_fetch_array, mysql_fetch_result_row, mysql_fetch_assoc, mysql_fetch_field, mysql_fetch_lengths, mysql_fetch_object, mysql_fetch_row, |
| execution SQL | mysql_drop_db, mysql_db_query, mysql_query, mysql_unbuffered_query |
Se connecter et mettre à jour une base
Tout d’abord…se connecter
<?php
$dbhost = ‘mysql.estsurinternet.com:3306’;
$dbuser = ‘appli1’;
$dbpass = ‘mon_password’;
$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die (‘Erreur de connexion à mysql’);
$dbname = ‘animal’;
mysql_select_db($dbname);
print (« Vous etes connecte à la base $dbname ! »);
?>
<?php
// config_db.php// usage : include ‘config_db.php’; …en début de programme$dbhost = ‘localhost’;
$dbuser = ‘DD’;
$dbpass = ‘mon_password’;
$dbname = ‘animal’;
?>
Puis exécuter une commande SQL simple (autre que SELECT)
//une insertion de lignes
include ‘config_db.php’;
$conn = mysql_connect($dbhost, $dbuser, $dbpass)
or die (‘Erreur de connexion à mysql’);
mysql_select_db($dbname);
$ordre_sql = « INSERT INTO pet VALUES (…) »;
//implicitement mysql_query utilise la connexion précédente
mysql_query($ordre_sql) or die(‘Erreur insertion’);
// l’ordre est autoCOMMITé
rem : un SELECT est toujours un peu plus compliqué à gérer, quelquesoit le langage de programmation utilisé. En effet il faudra rapatrier les lignes …et les afficher !
SELECT avec fetch ligne à ligne
on se connecte , on définit un ordre SQL, et on fait des des fetch pour rapatrier les lignes…
Chaque ligne est un tableau de colonnes indicé numériquement
<?php
// connexion
$connection = mysql_connect(« localhost », »dd », »dd »);
mysql_select_db(« test », $connection);
// execution de la requete
$result = mysql_query (« SELECT name, continent FROM
country order by 2,1 », $connection );
// lecture des lignes
while ($row = mysql_fetch_row($result)) {
print (« nom : $row[0] continent : $row[1] <br> »);
}
// deconnexion
mysql_close($connection);
?>
Si on veut pouvoir afficher un SELECT quelconque sans connaitre les colonnes de la table, on fera une boucle interne pour lire toutes les colonnes.
On s’appuiera sur la meta données ‘mysql_num_fields’ qui renvoie le nombre de colonnes de la table.
<?php
// connexion
$connection = mysql_connect(« localhost », »dd », »dd »);
mysql_select_db(« test », $connection);
// execution de la requete
$result = mysql_query (« SELECT name, continent FROM
country order by 2,1 », $connection );
// lecture des lignes
while ($row = mysql_fetch_row($result)) {
print (« <pre> »);
for ($i=0; $i<mysql_num_fields($result); $i++) {
print (« $row[$i] t »);
}
print (« n »);
}
print (« </pre> »);
// deconnexion
mysql_close($connection);
?>
et en rajoutant les entêtes de colonne puisées dans ‘mysql_field_name’ :
<?php
// connexion
$connection = mysql_connect(« localhost », »ddelegli », »ddelegli »);
mysql_select_db(« test », $connection);
// execution de la requete
$result = mysql_query (« SELECT name, continent FROM
country order by 2,1 », $connection );
// affichage des entetes
print (« <pre> »);
for ($i=0; $i<mysql_num_fields($result); $i++) {
print (mysql_field_name($result,$i). » t »);
}
print (« n »);
// lecture des lignes
while ($row = mysql_fetch_row($result)) {
for ($i=0; $i<mysql_num_fields($result); $i++) {
print (« $row[$i] t »);
}
print (« n »);
}
print (« </pre> »);
// deconnexion
mysql_close($connection);
?>