Verbinding maken met en query's uitvoeren op een flexibele Azure Database for MySQL-server vanuit uw app

Voltooid

Azure Database for MySQL - Flexible Server biedt u de flexibiliteit om apps te ontwikkelen met behulp van uw favoriete hulpprogramma's, talen en frameworks. U kunt krachtige ontwikkelhulpprogramma's zoals Visual Studio Code en GitHub blijven gebruiken en ontwikkelen met behulp van elke programmeertaal zoals PHP, Java, Python, Node.js, C#, Ruby, Rust, Go, enzovoort. U kunt Flexibele server ook integreren met populaire Content Management Systems (CMS) zoals WordPress of Drupal, Learning Management Systems (LMS) zoals Moodle, e-commerceplatforms zoals Neerkoming, enzovoort.

Laten we beginnen met het bekijken van de verschillende taken die betrokken zijn bij het maken van verbinding met en het uitvoeren van query's op de flexibele Server van Azure Database for MySQL vanuit uw app, met behulp van de taal van uw keuze.

1 - Verbindingsgegevens verkrijgen

De eerste taak is het verkrijgen van de verbindingsgegevens (servernaam, databasenaam en aanmeldingsreferenties) die u nodig hebt om verbinding te maken met uw flexibele Azure Database for MySQL-server.

Navigeer in Azure Portal naar uw flexibele MySQL-serverresource en noteer de aanmeldingsnaam van de server en de aanmeldingsnaam van de serverbeheerder.

2 - SSL-certificaat verkrijgen

Het is raadzaam om gegevens tijdens overdracht te beveiligen door ervoor te zorgen dat uw app verbinding maakt met een flexibele Azure Database for MySQL-server met behulp van SSL (Secure Sockets Layer). U kunt het openbare SSL-certificaat downloaden via de blade Netwerken in Azure Portal, zoals wordt weergegeven in de volgende schermopname.

Schermopname van de blade Azure Database for MySQL-netwerken in Azure Portal.

Sla het certificaatbestand op de gewenste locatie op.

MySQL-extensies voor PHP

Als u vanuit uw PHP-app verbinding wilt maken met MySQL, kunt u een van de volgende extensies gebruiken:

  • De extensie MySQLi (MySQL Improved). De MySQLi-extensie is opgenomen in PHP-versies 5 en hoger en biedt objectgeoriënteerde en procedurele interfaces om het verbinden en werken met MySQL-databases te vereenvoudigen.
  • PDO_MYSQL. De extensie PDO of PHP-gegevensobjecten definieert een interface voor toegang tot databases in PHP. PDO_MYSQL is een mySQL-specifiek stuurprogramma dat de PDO-interface implementeert om toegang vanuit PHP naar MySQL-databases mogelijk te maken.

Als u een extensie wilt gebruiken, moet u deze inschakelen in het php.ini configuratiebestand door opmerkingen bij de bijbehorende regel ongedaan te maken. Als u bijvoorbeeld MySQLi wilt gebruiken, verwijdert u de opmerkingen bij de extension=mysqli regel in het bestand.

3 - Verbinding maken met een flexibele MySQL-server en er query's op uitvoeren met php

Hoewel er opties zijn om verbinding te maken, toont deze les het gebruik van de MySQLi-extensie om vanuit een PHP-app verbinding te maken met Azure Database for MySQL flexibele server.

U moet ook de OpenSSL-extensie gebruiken om een versleutelde verbinding via SSL tot stand te brengen. Net zoals u voor MySQLi hebt gedaan, schakelt u de OpenSSL-extensie in door commentaar op de extension=openssl regel in het bestand uit te php.ini schakelen.

Een verbinding tot stand brengen

Als u een verbinding tot stand wilt brengen met een flexibele MySQL-server met behulp van MySQLi, kunt u het volgende codefragment in uw PHP-app gebruiken. Zorg ervoor dat u de hostparameters , usernamepassworden db_name parameters vervangt door uw waarden en geef vervolgens het pad op naar het gedownloade SSL-certificaatpad in de mysqli_ssl_set() methode.

$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");
  • De mysqli_init() methode initialiseert MySQLi en retourneert een object voor gebruik met mysqli_real_connect()
  • Het mysqli_ssl_set() wordt gebruikt om beveiligde verbindingen tot stand te brengen met BEHULP van SSL. Deze methode neemt het pad naar het gedownloade SSL-certificaat in. Deze functie doet niets tenzij de OpenSSL-extensie is ingeschakeld.
  • Met de mysqli_real_connect() methode wordt een verbinding met een MySQL-database-engine geopend. Geef de verbindingsgegevens van de flexibele MySQL-server door als argumenten om er verbinding mee te maken.

Databasebewerkingen uitvoeren

Nadat u een verbinding met uw flexibele serverdatabase tot stand hebt gebracht, gebruikt u methoden zoals mysqli_query() het uitvoeren van een query. Voorbeeld:

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

Als de query variabele invoer bevat, gebruikt u in plaats daarvan geparameteriseerde voorbereide instructies. Dit beschermt tegen SQL-injectieaanvallen, die een van de meest voorkomende technieken zijn die worden gebruikt door webhackers.

Een codefragment dat gegevens in een tabel invoegt met behulp van voorbereide instructies met MySQLi volgt.

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

De verbinding sluiten

Nadat u de databasebewerkingen hebt voltooid, is het een goed idee om de databaseverbinding te sluiten met behulp van de mysqli_close() methode.

mysqli_close($conn);

MySQL-connectors voor Python

Als u verbinding wilt maken met MySQL vanuit uw Python-app, kunt u MySQL Connector/Python gebruiken, een zelfstandig Python-stuurprogramma voor communicatie met MySQL-servers of PyMySQL.

U kunt deze connectors eenvoudig installeren met behulp van het Python-pakketinstallatieprogramma pip. Bijvoorbeeld pip install mysql-connector-python

3 - Verbinding maken met en query's uitvoeren op Azure Database for MySQL - Flexible Server met behulp van Python

Hoewel u opties hebt om verbinding te maken, laat deze les zien hoe u MySQL Connector/Python gebruikt om vanuit uw Python-app verbinding te maken met Azure Database for MySQL - Flexible Server.

Een verbinding tot stand brengen

Een codefragment dat u in uw Python-app kunt gebruiken om een verbinding met uw flexibele MySQL-server tot stand te brengen, volgt. Zorg ervoor dat u de hostparameters , userpassworden database parameters vervangt door uw waarden en geef het pad op naar het gedownloade SSL-certificaat onder ssl_ca de optie.

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()
  • De mysql.connector.connect() methode stelt een verbinding met de MySQL-server in en retourneert een verbindingsobject. Geef het mySQL Flexible Server-verbindingsinformatieobject door als argument om er verbinding mee te maken.
  • Met cursor() de methode van het verbindingsobject wordt een cursor gemaakt die kan worden gebruikt voor interactie met de MySQL-server.

Databasebewerkingen uitvoeren

Nadat u een verbinding met uw flexibele MySQL-serverdatabase tot stand hebt gebracht, gebruikt u het cursorobject en roept u cursor.execute() de methode aan om databasebewerkingen uit te voeren. Voorbeeld:

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

De verbinding sluiten

MySQL Connector/Python voert geen automatische transacties uit, dus het is belangrijk om de commit() methode van het verbindingsobject aan te roepen, zoals , na conn.commit()elke transactie die gegevens wijzigt.

Nadat u alle bewerkingen hebt uitgevoerd, is het raadzaam om de cursor en het verbindingsobject te sluiten.

cursor.close()
conn.close()

MySQL-connectors voor Java

Als u verbinding wilt maken met MySQL vanuit uw Java-app, kunt u MySQL Connector/J, een met JDBC compatibele API gebruiken die het MySQL-protocol in Java implementeert in plaats van clientbibliotheken te gebruiken. U kunt MySQL Connector/J installeren vanuit een binaire distributie of met behulp van Apache Maven-afhankelijkhedenbeheer.

U kunt ook frameworks zoals Spring Data JPA gebruiken om vanuit Java verbinding te maken met MySQL.

3 - Verbinding maken met en query's uitvoeren op Azure Database for MySQL - Flexible Server met behulp van Java

Hoewel u opties hebt om verbinding te maken, laat deze les zien hoe u MySQL-connector/J gebruikt om vanuit uw Java-app verbinding te maken met Azure Database for MySQL - Flexible Server.

Verbindingsgegevens opslaan

Het is een goed idee om een application.properties bestand te maken in de sectie resources van uw broncode om de verbindingsgegevens van de flexibele MySQL-server op te slaan.

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

Een verbinding tot stand brengen

Wanneer u JDBC buiten een toepassingsserver gebruikt, beheert de klasse DriverManager in java.sql-pakket de instelling van verbindingen. Als u verbinding wilt maken met uw flexibele MySQL-server, laadt u eerst de verbindingseigenschappen uit application.properties het bestand en roept u de methode driverManager getConnection() aan door deze verbindingseigenschappen door te geven.

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

        .
        .

    }
}

Databasebewerkingen uitvoeren

Nadat u een verbinding tot stand hebt gebracht en het Connection object hebt verkregen, kunt u de createStatement() methode voor het object aanroepen om een Statement object te maken. Nadat u een Statement exemplaar hebt, kunt u een SELECT query uitvoeren door de executeQuery(String) methode aan te roepen met de SQL die u wilt gebruiken. Als u gegevens in de database wilt bijwerken, gebruikt u de executeUpdate(String SQL) methode.

Voorbeeld:

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

Als de query variabele invoer bevat, moeten in plaats daarvan geparameteriseerde voorbereide instructies worden gebruikt. Dit beschermt tegen SQL-injectieaanvallen, die een van de meest voorkomende technieken zijn die worden gebruikt door webhackers. Als u voorbereide instructies wilt gebruiken, kunt u de prepareStatement() methode in het Connection object aanroepen om een PreparedStatement object te maken, de parameters te binden en vervolgens de voorbereide instructie uit te voeren met behulp van executeUpdate() de methode.

De verbinding sluiten

Nadat u de databasebewerkingen hebt voltooid, is het een goed idee om de databaseverbinding te sluiten met behulp van de close() methode van het verbindingsobject. Bijvoorbeeld connection.close();