Herstellen einer Verbindung mit und Abfragen von einer Instanz von Azure Database for MySQL – Flexible Server aus Ihrer App

Abgeschlossen

Azure Database for MySQL – Flexible Server bietet Ihnen die Flexibilität, Anwendungen mithilfe Ihrer bevorzugten Tools, Sprachen und Frameworks zu entwickeln. Sie können weiterhin leistungsstarke Entwicklungstools wie Visual Studio Code und GitHub verwenden und mit Programmiersprachen wie PHP, Java, Python, Node.js, C#, Ruby, Rust, Go usw. entwickeln. Sie können Flexible Server auch in beliebte Content-Management-Systeme (CMS) wie WordPress oder Template, Lernmanagementsysteme (LMS) wie Moodle, E-Commerce-Plattformen wie Magento usw. integrieren.

Sehen wir uns zunächst die verschiedenen Aufgaben an, die beim Herstellen einer Verbindung mit und Abfragen von Azure Database for MySQL Flexible Server von Ihrer App aus mit der von Ihnen gewählten Sprache verbunden sind.

1. Abrufen der Verbindungsinformationen

Im ersten Schritt rufen Sie die Verbindungsinformationen (Servername, Datenbankname und Anmeldeinformationen) ab, die Sie zum Herstellen einer Verbindung mit Azure Database for MySQL – Flexibler Server benötigen.

Navigieren Sie im Azure-Portal zu Ihrer flexiblen MySQL-Serverressource, und notieren Sie den Servernamen sowie den Anmeldenamen des Serveradministrators.

2. Abrufen eines SSL-Zertifikats

Es wird empfohlen, in Übertragung begriffene Daten zu schützen, indem Sie sicherstellen, dass Ihre App Verbindungen zu Azure Database for MySQL – Flexibler Server per SSL (Secure Sockets Layer) herstellt. Sie können das öffentliche SSL-Zertifikat vom Blatt Netzwerk im Azure-Portal herunterladen, wie im folgenden Screenshot gezeigt wird.

Screenshot: Blatt „Azure-Netzwerk“ für Azure Database for MySQL im Azure-Portal

Speichern Sie die Zertifikatdatei am gewünschten Ort.

MySQL-Erweiterungen für PHP

Um über Ihre PHP-Anwendung eine Verbindung mit MySQL herzustellen, können Sie eine der folgenden Erweiterungen verwenden:

  • Die MySQLi-Erweiterung (MySQL Improved): Die MySQLi-Erweiterung ist in PHP-Version 5 und höher enthalten und bietet objektorientierte und verfahrenstechnische Schnittstellen, um das Verbinden und Arbeiten mit MySQL-Datenbanken zu vereinfachen.
  • PDO_MYSQL. Die Erweiterung „PDO“ oder „PHP Data Objects“ definiert eine Schnittstelle für den Zugriff auf Datenbanken in PHP. „PDO_MYSQL“ ist ein MySQL-spezifischer Treiber, der die PDO-Schnittstelle implementiert, um den Zugriff von PHP auf MySQL-Datenbanken zu ermöglichen.

Um eine Erweiterung zu verwenden, müssen Sie sie in der php.ini-Konfigurationsdatei aktivieren, indem Sie die Auskommentierung der entsprechenden Zeile aufheben. Wenn Sie beispielsweise „MySQLi“ verwenden möchten, heben Sie die Auskommentierung der Zeile extension=mysqli in der Datei auf.

3. Herstellen einer Verbindung mit und Abfragen von MySQL – Flexibler Server mit PHP

Obwohl Sie mehrere Optionen für die Verbindungsherstellung haben, wird in dieser Lerneinheit die Verbindungsherstellung mit Azure Database for MySQL – Flexibler Server von einer PHP-App aus mithilfe der MySQLi-Erweiterung gezeigt.

Außerdem müssen Sie die OpenSSL-Erweiterung zum Herstellen einer verschlüsselten Verbindung über SSL nutzen. Aktivieren Sie wie bei MySQLi die OpenSSL-Erweiterung, indem Sie die Auskommentierung der Zeile extension=openssl in der Datei php.ini aufheben.

Herstellen einer Verbindung

Um mit MySQLi eine Verbindung mit einem flexiblen MySQL-Server herzustellen, können Sie den folgenden Codeausschnitt in Ihrer PHP-App verwenden. Sie müssen die Parameter host, username, password und db_name durch Ihre Werte ersetzen und dann den Pfad zu Ihrem heruntergeladenen SSL-Zertifikat in der mysqli_ssl_set()-Methode angeben.

$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");
  • Die mysqli_init()-Methode initialisiert MySQLi und gibt ein Objekt für zum Verwenden mit mysqli_real_connect() zurück.
  • mysqli_ssl_set() wird zum Herzustellen sicherer Verbindungen mithilfe von SSL verwendet. Diese Methode übernimmt den Pfad zu Ihrem heruntergeladenen SSL-Zertifikat. Mit dieser Funktion wird nichts ausgeführt, wenn die OpenSSL-Erweiterung nicht aktiviert ist.
  • Die mysqli_real_connect()-Methode öffnet eine Verbindung mit einer MySQL-Datenbank-Engine. Übergeben Sie die Verbindungsinformationen des flexiblen MySQL-Servers als Argumente, um eine Verbindung damit herzustellen.

Ausführen von Datenbankvorgängen

Nachdem Sie eine Verbindung mit Ihrer flexiblen Serverdatenbank hergestellt haben, verwenden Sie Methoden wie mysqli_query(), um eine Abfrage auszuführen. Zum Beispiel:

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

Wenn die Abfrage variable Eingaben enthält, verwenden Sie stattdessen vorbereitete, parametrisierte Anweisungen. Dies schützt vor Angriffen durch Einschleusung von SQL-Befehlen, die eine der am häufigsten verwendeten Techniken von Webhackern darstellt.

Nachfolgend finden Sie einen Codeschnipsel, der Daten mithilfe von vorbereiteten Anweisungen mit MySQLi in eine Tabelle einfügt.

$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);
}

Trennen der Verbindung

Nachdem Sie Ihre Datenbankvorgänge abgeschlossen haben, sollten Sie die Verbindung mit der Datenbank mithilfe der mysqli_close()-Methode trennen.

mysqli_close($conn);

MySQL-Connectors für Python

Um von Ihrer Python-Anwendung eine Verbindung mit MySQL herzustellen, können Sie entweder MySQL Connector/Python, einen eigenständigen Python-Treiber für das Kommunizieren mit MySQL-Servern, oder PyMySQL verwenden.

Sie können diese Connectors ganz einfach mithilfe des Python-Paketinstallationsprogramms pip installieren. Beispiel: pip install mysql-connector-python

3. Herstellen einer Verbindung mit und Abfragen von einer Instanz von Azure Database for MySQL – Flexible Server mit Python

Es gibt zwar verschiedene Optionen zum Herstellen einer Verbindung, in dieser Lerneinheit wird aber gezeigt, wie Sie den MySQL-Connector/Python verwenden, um eine Verbindung mit Azure Database for MySQL – Flexibler Server aus Ihrer Python-App herzustellen.

Herstellen einer Verbindung

Nachfolgend finden Sie einen Codeschnipsel, den Sie in Ihrer Python-App zum Herstellen einer Verbindung mit Ihrem flexiblen MySQL-Server verwenden können. Sie müssen die Parameter host, user, password und database durch Ihre Werte ersetzen und dann den Pfad zu Ihrem heruntergeladenen SSL-Zertifikat unter der Option ssl_ca angeben.

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()
  • Mit der mysql.connector.connect()-Methode wird eine Verbindung mit dem MySQL-Server eingerichtet und ein Verbindungsobjekt zurückgegeben. Übergeben Sie das Verbindungsinformationsobjekt für den flexiblen MySQL-Server als Argument, um eine Verbindung damit herzustellen.
  • Die cursor()-Methode des Verbindungsobjekts erstellt einen Cursor, der zum Interagieren mit dem MySQL-Server verwendet werden kann.

Ausführen von Datenbankvorgängen

Nachdem Sie eine Verbindung mit Ihrer flexiblen MySQL-Serverdatenbank hergestellt haben, verwenden Sie das Cursorobjekt, und rufen Sie die cursor.execute()-Methode auf, um Datenbankvorgänge auszuführen. Zum Beispiel:

# 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))

Trennen der Verbindung

„MySQL-Connector/Python“ committet Transaktionen nicht automatisch, daher ist es wichtig, die commit()-Methode des Verbindungsobjekts (z. B. conn.commit()) nach jeder Transaktion aufzurufen, die Daten ändert.

Nachdem Sie alle Vorgänge durchgeführt haben, sollten Sie den Cursor und das Verbindungsobjekt schließen.

cursor.close()
conn.close()

MySQL-Connectors für Java

Um von Ihrer Java-App eine Verbindung mit MySQL herzustellen, können Sie MySQL Connector/J anstelle von Clientbibliotheken verwenden. Dabei handelt es sich um eine JDBC-kompatible API, die das MySQL-Protokoll nativ in Java implementiert. Sie können „MySQL Connector/J“ aus einer Binärverteilung oder mithilfe des Apache Maven-Abhängigkeits-Managers installieren.

Alternativ können Sie auch Frameworks wie Spring Data JPA zum Herstellen einer Verbindung mit MySQL über Java verwenden.

3. Herstellen einer Verbindung mit und Abfragen von einer Instanz von Azure Database for MySQL – Flexible Server mit Java

Es gibt zwar verschiedene Optionen zum Herstellen einer Verbindung, in dieser Lerneinheit wird aber gezeigt, wie Sie den MySQL-Connector/J verwenden, um eine Verbindung mit Azure Database for MySQL – Flexibler Server aus Ihrer Java-App herzustellen.

Speichern von Verbindungsinformationen

Sie sollten eine application.properties-Datei im Ressourcenabschnitt Ihres Quellcodes erstellen, um die Verbindungsinformationen für den flexiblen MySQL-Server zu speichern.

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

Herstellen einer Verbindung

Wenn Sie JDBC außerhalb eines Anwendungsservers verwenden, verwaltet die DriverManager-Klasse im „java.sql“-Paket die Verbindungsherstellung. Um eine Verbindung mit MySQL – Flexibler Server herzustellen, laden Sie zuerst die Verbindungseigenschaften aus der application.properties-Datei, und rufen Sie die DriverManager-Methode getConnection() auf, indem Sie diese Verbindungseigenschaften dorthin übergeben.

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);

        .
        .

    }
}

Ausführen von Datenbankvorgängen

Nachdem Sie eine Verbindung hergestellt und das Connection-Objekt abgerufen haben, können Sie die createStatement()-Methode für das Objekt aufrufen, um ein Statement-Objekt zu erstellen. Wenn Sie über eine Statement-Instanz verfügen, können Sie eine SELECT-Abfrage ausführen, indem Sie die Methode executeQuery(String) mit der SQL-Sprache aufrufen, die Sie verwenden möchten. Verwenden Sie die Methode executeUpdate(String SQL), um Daten in der Datenbank zu aktualisieren.

Beispiel:

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");

Wenn die Abfrage variable Eingaben enthält, sollten Sie stattdessen vorbereitete, parametrisierte Anweisungen verwenden. Dies schützt vor Angriffen durch Einschleusung von SQL-Befehlen, die eine der am häufigsten verwendeten Techniken von Webhackern darstellt. Um vorbereitete Anweisungen zu verwenden, können Sie die prepareStatement()-Methode für das Connection-Objekt aufrufen, um ein PreparedStatement-Objekt zu erstellen, die Parameter binden und dann die vorbereitete Anweisung mithilfe der executeUpdate()-Methode ausführen.

Trennen der Verbindung

Nachdem Sie Ihre Datenbankvorgänge abgeschlossen haben, sollten Sie die Verbindung mit der Datenbank mithilfe der Methode close() des Verbindungsobjekts trennen. Beispiel: connection.close();