Se connecter à un serveur flexible Azure Database pour MySQL et l’interroger à partir de votre application

Effectué

Azure Database pour MySQL – Serveur flexible vous offre la possibilité de développer des applications avec les outils, les langages et les frameworks de votre choix. Vous pouvez continuer à utiliser de puissants outils de développement comme Visual Studio Code et GitHub et développer à l’aide de n’importe quel langage de programmation comme PHP, Java, Python, Node.js, C#, Ruby, Rust, Go, etc. Vous pouvez également intégrer un serveur flexible à des systèmes de gestion de contenu (CMS) populaires tels que WordPress ou Drupal, Learning Management Systems (LMS) comme Moodle, des plateformes d’e-commerce comme Magento, etc.

Commençons par examiner les différentes tâches impliquées dans la connexion et l’interrogation d’un serveur flexible Azure Database pour MySQL à partir de votre application, à l’aide du langage de votre choix.

1 – Obtenir des informations de connexion

La première tâche consiste à obtenir les informations de connexion (nom du serveur, nom de la base de données et informations d’identification) dont vous avez besoin pour vous connecter à votre serveur flexible Azure Database pour MySQL.

Dans le Portail Azure, accédez à votre ressource de serveur flexible MySQL et notez le nom du serveur et le nom de connexion de l’administrateur du serveur.

2 – Obtenir un certificat SSL

Il est recommandé de sécuriser les données en transit en vérifiant que votre application se connecte à un serveur flexible Azure Database pour MySQL avec le protocole SSL (Secure Sockets Layer). Vous pouvez télécharger le certificat SSL public à partir du panneau Réseau dans le portail Azure, comme illustré dans la capture d’écran suivante.

Capture d’écran montrant le panneau Mise en réseau Azure Database pour MySQL sur le Portail Azure.

Téléchargez le fichier de certificat dans votre l’emplacement favori.

Extensions MySQL pour PHP

Pour vous connecter à MySQL à partir de votre application PHP, vous pouvez utiliser l’une des extensions suivantes :

  • L’extension MySQLi (MySQL amélioré). L’extension MySQLi est incluse avec PHP version 5 et versions ultérieures, et fournit des interfaces orientées objet et procédurales pour simplifier la connexion et l’utilisation des bases de données MySQL.
  • PDO_MYSQL. L’extension PDO ou PHP Data Objects définit une interface permettant d’accéder aux bases de données dans PHP. PDO_MYSQL est un pilote spécifique MySQL qui implémente l’interface PDO pour activer l’accès à partir de PHP aux bases de données MySQL.

Pour utiliser une extension, vous devez l’activer dans le fichier de configuration php.ini en annulant la mise en commentaire de la ligne associée. Par exemple, si vous souhaitez utiliser MySQLi, décommentez la ligne extension=mysqli dans le fichier.

3 – Se connecter à un serveur flexible MySQL et l’interroger à l’aide de PHP

Bien qu’il y ait des options de connexion, cette unité présente l’utilisation de l’extension MySQLi pour se connecter au serveur flexible Azure Database pour MySQL à partir d’une application PHP.

Vous devez également utiliser l’extension OpenSSL pour établir une connexion chiffrée via SSL. Comme vous l’avez fait pour MySQLi, activez l’extension OpenSSL en décommentant la ligne extension=openssl dans le fichier php.ini.

Établir une connexion

Pour établir une connexion à un serveur flexible MySQL à l’aide de MySQLi, vous pouvez utiliser l’extrait de code suivant dans votre application PHP. Veillez à remplacer les paramètres host, username, password et db_name par vos valeurs, et à fournir le chemin du certificat SSL que vous avez téléchargé dans la méthode mysqli_ssl_set().

$host = '<your_server_name>.mysql.database.azure.com';
$username = '<your_admin_username';
$password = '<your_password>';
$db_name = '<your_database_name>';

$conn = mysqli_init();
mysqli_ssl_set($conn,NULL,NULL, "<your_path_to_SSL_cert>", NULL, NULL);
mysqli_real_connect($conn, $host, $username, $password, $db_name, 3306, MYSQLI_CLIENT_SSL);
if (mysqli_connect_errno($conn)) {
    die('Failed to connect to MySQL: '.mysqli_connect_error());
}
printf("Connection Established.\n");
  • La méthode mysqli_init() initialise MySQLi et retourne un objet à utiliser avec mysqli_real_connect()
  • mysqli_ssl_set() est utilisé pour établir des connexions sécurisées à l’aide de SSL. Cette méthode prend le chemin du certificat SSL que vous avez téléchargé. Cette fonction ne fait rien, sauf si l’extension OpenSSL est activée.
  • La méthode mysqli_real_connect() ouvre une connexion à un moteur de base de données MySQL. Transmettez les informations de connexion au serveur flexible MySQL en tant qu’arguments pour établir une connexion.

Effectuer les opérations de bases de données

Après avoir établi une connexion à votre base de données de serveur flexible, utilisez des méthodes comme mysqli_query() pour effectuer une requête. Par exemple :

mysqli_query($conn, '
CREATE TABLE Products (
`Id` INT NOT NULL AUTO_INCREMENT ,
`ProductName` VARCHAR(200) NOT NULL ,
`Price` DOUBLE NOT NULL ,
PRIMARY KEY (`Id`)
);
')

Si la requête contient une entrée de variable, utilisez plutôt des instructions préparées paramétrisées. Cela protège contre les attaques par injection de code SQL, qui sont l’une des techniques les plus couramment utilisées par les pirates informatiques sur le web.

Voici un extrait de code qui insère des données dans une table en utilisant des instructions préparées avec MySQLi.

$product_name = 'BrandNewProduct';
$product_price = 15;

//Create a prepared statement
if ($stmt = mysqli_prepare($conn, "INSERT INTO Products (ProductName, Price) VALUES (?, ?)")) {
    //Binds the parameters for each column value
    mysqli_stmt_bind_param($stmt, 'ssd', $product_name, $product_price);
    //Run the prepared statement
    mysqli_stmt_execute($stmt);
    printf("Insert: Affected %d rows\n", mysqli_stmt_affected_rows($stmt));
    //Close the prepared statement
    mysqli_stmt_close($stmt);
}

Fermer la connexion

Une fois vos opérations de base de données terminées, il est recommandé de fermer la connexion de base de données à l’aide de la méthode mysqli_close().

mysqli_close($conn);

Connecteurs MySQL pour Python

Pour vous connecter à MySQL à partir de votre application Python, vous pouvez utiliser MySQL Connector/Python, pilote Python autonome pour communiquer avec des serveurs MySQL ou PyMySQL.

Vous pouvez facilement installer ces connecteurs à l’aide du programme d’installation de package Python pip. Par exemple, pip install mysql-connector-python

3 – Se connecter à Azure Database pour MySQL – Serveur flexible et l’interroger à l’aide de Python

Bien que vous disposez d’options de connexion, cette unité montre comment utiliser Connecteur MySQL/Python pour vous connecter à Azure Database pour MySQL – Serveur flexible à partir de votre application Python.

Établir une connexion

Voici un extrait de code que vous pouvez utiliser dans votre application Python pour établir une connexion à votre serveur flexible MySQL. Veillez à remplacer les paramètres host, user, password et database par vos valeurs et à fournir le chemin du certificat SSL que vous avez téléchargé sous l’option ssl_ca.

import mysql.connector
from mysql.connector import errorcode

# Flexible server connection information
config = {
  'host':'<your_server_name>.mysql.database.azure.com',
  'user':'<your_admin_username>',
  'password':'<your_password>',
  'database':'<your_database_name>',
  'client_flags': [mysql.connector.ClientFlag.SSL],
  'ssl_ca': '<your_path_to_SSL_cert>'
}

# Establish connection and obtain cursor object
try:
    conn = mysql.connector.connect(**config)
    print("Connection established")
except mysql.connector.Error as err:
    if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
        print("Something is wrong with the user name or password")
    elif err.errno == errorcode.ER_BAD_DB_ERROR:
        print("Database does not exist")
    else:
        print(err)
else:
    cursor = conn.cursor()
  • La méthode mysql.connector.connect() configure une connexion avec le serveur MySQL et retourne un objet de connexion. Transmettez l’objet Informations de connexion au serveur flexible MySQL en tant qu’argument pour établir une connexion.
  • La méthode cursor() de l’objet de connexion crée un curseur qui peut être utilisé pour interagir avec le serveur MySQL.

Effectuer les opérations de bases de données

Après avoir établi une connexion à votre base de données de serveur flexible MySQL, utilisez l’objet de curseur et appelez la méthode cursor.execute() pour effectuer toutes les opérations de base de données. Par exemple :

# Create table
cursor.execute("CREATE TABLE inventory (id serial PRIMARY KEY, name VARCHAR(50), quantity INTEGER);")

# Insert some data into table
cursor.execute("INSERT INTO inventory (name, quantity) VALUES (%s, %s);", ("banana", 150))

Fermer la connexion

Connecteur MySQL/Python n’accepte pas automatiquement les transactions. Il est donc important d’appeler la méthode commit() de l’objet de connexion, comme conn.commit(), après chaque transaction qui modifie les données.

Après avoir effectué toutes les opérations, il est recommandé de fermer le curseur et l’objet de connexion.

cursor.close()
conn.close()

Connecteurs MySQL pour Java

Pour vous connecter à MySQL à partir de votre application Java, vous pouvez utiliser MySQL Connector/J, une API compatible JDBC qui implémente en mode natif le protocole MySQL en Java, plutôt que d’utiliser des bibliothèques de client. Vous pouvez installer MySQL Connector/J à partir d’une distribution binaire ou à l’aide du gestionnaire de dépendances Apache Maven.

Vous pouvez également utiliser des frameworks comme Spring Data JPA pour vous connecter à MySQL à partir de Java.

3 – Se connecter à Azure Database pour MySQL – Serveur flexible et l’interroger à l’aide de Java

Bien que vous disposez d’options de connexion, cette unité montre comment utiliser Connecteur MySQL/J pour vous connecter à Azure Database pour MySQL – Serveur flexible à partir de votre application Java.

Stocker les informations de connexion

Il est recommandé de créer un fichier application.properties dans la section resources de votre code source pour stocker les informations de connexion au serveur flexible MySQL.

url=jdbc:mysql://<your_server_name>.mysql.database.azure.com:3306/<your_database_name>?serverTimezone=UTC
user=<your_admin_username>
password=<your_password>

Établir une connexion

Lorsque vous utilisez JDBC en dehors d’un serveur d’applications, la classe DriverManager dans le package java.sql gère l’établissement des connexions. Pour vous connecter à votre serveur flexible MySQL, chargez d’abord les propriétés de connexion à partir du fichier application.properties et appelez la méthode getConnection() de DriverManager en lui transmettant ces propriétés de connexion.

import java.sql.*;

public class DemoApplication {

    public static void main(String[] args) throws Exception {

        //Load application properties
        Properties properties = new Properties();
        properties.load(DemoApplication.class.getClassLoader().getResourceAsStream("application.properties"));

        //Establish Connection to database
        Connection connection = DriverManager.getConnection(properties.getProperty("url"), properties);

        .
        .

    }
}

Effectuer les opérations de bases de données

Une fois que vous établissez une connexion et que vous obtenez l’objet Connection, vous pouvez appeler la méthode createStatement() sur l’objet pour créer un objet Statement. Une fois que vous avez une instance Statement, vous pouvez exécuter une requête SELECT en appelant la méthode executeQuery(String) avec l’instance SQL que vous souhaitez utiliser. Pour mettre à jour les données dans la base de données, utilisez la méthode executeUpdate(String SQL).

Par exemple :

Statement statement = connection.createStatement();
statement.execute("CREATE TABLE inventory (id serial PRIMARY KEY, name VARCHAR(50), quantity INTEGER)");
statement.executeUpdate("INSERT INTO inventory (name, quantity) VALUES (\"banana\", 150)");
ResultSet resultSet = statement.executeQuery("SELECT * FROM inventory");

Si la requête contient une entrée de variable, utilisez plutôt des instructions préparées paramétrisées. Cela protège contre les attaques par injection de code SQL, qui sont l’une des techniques les plus couramment utilisées par les pirates informatiques sur le web. Pour utiliser des instructions préparées, vous pouvez appeler la méthode prepareStatement() sur l’objet Connection pour créer un objet PreparedStatement, lier les paramètres, puis exécuter l’instruction préparée à l’aide de la méthode executeUpdate().

Fermer la connexion

Une fois vos opérations de base de données terminées, il est recommandé de fermer la connexion de base de données à l’aide de la méthode close() de l’objet de connexion. Par exemple, connection.close();