Accès BD via l’extension mysql

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 ! »);
?>
on pourra mettre la partie parametres de connexion dans un fichiers de configuration, qu’il n’ya aura qu’a inclure pour éviter de répéter le code :
<?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);
?>