Ansluta till och fråga en flexibel Azure Database for MySQL-server från din app

Slutförd

Azure Database for MySQL – Flexibel server ger dig flexibiliteten att utveckla appar med dina favoritverktyg, språk och ramverk. Du kan fortsätta att använda kraftfulla utvecklingsverktyg som Visual Studio Code och GitHub och utveckla med valfritt programmeringsspråk som PHP, Java, Python, Node.js, C#, Ruby, Rust, Go osv. Du kan också integrera flexibel server med populära Content Management Systems (CMS) som WordPress eller Drupal, Learning Management Systems (LMS) som Moodle, e-handelsplattformar som Magento och så vidare.

Låt oss börja med att titta på de olika uppgifter som ingår i att ansluta till och köra frågor mot en flexibel Azure Database for MySQL-server från din app med det språk du väljer.

1 – Hämta anslutningsinformation

Den första uppgiften är att hämta anslutningsinformationen (servernamn, databasnamn och inloggningsuppgifter) som du behöver för att ansluta till din flexibla Azure Database for MySQL-server.

I Azure Portal går du till din flexibla MySQL-serverresurs och noterar sedan servernamnet och inloggningsnamnet för serveradministratören.

2 – Hämta SSL-certifikat

Vi rekommenderar att du skyddar data under överföring genom att se till att din app ansluter till en flexibel Azure Database for MySQL-server med secure sockets layer (SSL). Du kan ladda ned det offentliga SSL-certifikatet från bladet Nätverk i Azure Portal enligt följande skärmbild.

Skärmbild som visar bladet Azure Database for MySQL-nätverk på Azure Portal.

Spara certifikatfilen på önskad plats.

MySQL-tillägg för PHP

Om du vill ansluta till MySQL från PHP-appen kan du använda något av följande tillägg:

  • MySQLi-tillägget (MySQL Improved). MySQLi-tillägget ingår i PHP version 5 och senare och tillhandahåller objektorienterade och procedurmässiga gränssnitt för att förenkla anslutning och arbete med MySQL-databaser.
  • PDO_MYSQL. PDO- eller PHP Data Objects-tillägget definierar ett gränssnitt för åtkomst till databaser i PHP. PDO_MYSQL är en MySQL-specifik drivrutin som implementerar PDO-gränssnittet för att aktivera åtkomst från PHP till MySQL-databaser.

Om du vill använda ett tillägg måste du aktivera det i php.ini konfigurationsfilen genom att avkommentarera den associerade raden. Om du till exempel vill använda MySQLi avkommenterar du extension=mysqli raden i filen.

3 – Ansluta till och fråga en flexibel MySQL-server med PHP

Även om det finns alternativ för att ansluta visar den här enheten användningen av MySQLi-tillägget för att ansluta till en flexibel Azure Database for MySQL-server från en PHP-app.

Du måste också använda OpenSSL-tillägget för att upprätta en krypterad anslutning via SSL. Precis som för MySQLi aktiverar du OpenSSL-tillägget genom att avkommentera extension=openssl raden i php.ini filen.

Upprätta en anslutning

Om du vill upprätta en anslutning till en flexibel MySQL-server med MySQLi kan du använda följande kodfragment i PHP-appen. Ersätt parametrarna host, username, passwordoch db_name med dina värden och ange sedan sökvägen till den nedladdade SSL-certifikatsökvägen i mysqli_ssl_set() -metoden.

$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");
  • Metoden mysqli_init() initierar MySQLi och returnerar ett objekt för användning med mysqli_real_connect()
  • mysqli_ssl_set() Används för att upprätta säkra anslutningar med hjälp av SSL. Den här metoden tar in sökvägen till ditt nedladdade SSL-certifikat. Den här funktionen gör ingenting om inte OpenSSL-tillägget är aktiverat.
  • Metoden mysqli_real_connect() öppnar en anslutning till en MySQL-databasmotor. Skicka mySQL-anslutningsinformationen för flexibel server som argument för att upprätta en anslutning till den.

Utföra databasåtgärder

När du har upprättat en anslutning till din flexibla serverdatabas använder du metoder som mysqli_query() att utföra en fråga. Till exempel:

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

Om frågan innehåller några variabelindata använder du parametriserade förberedda instruktioner i stället. Detta skyddar mot SQL-inmatningsattacker, som är en av de vanligaste teknikerna som används av webbhackare.

Ett kodfragment som infogar data i en tabell med hjälp av förberedda instruktioner med MySQLi följer.

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

Stäng anslutningen

När du har slutfört databasåtgärderna är det bra att stänga databasanslutningen med hjälp av mysqli_close() metoden .

mysqli_close($conn);

MySQL-anslutningsappar för Python

Om du vill ansluta till MySQL från python-appen kan du antingen använda MySQL Connector/Python, en fristående Python-drivrutin för kommunikation med MySQL-servrar eller PyMySQL.

Du kan enkelt installera dessa anslutningsappar med python-paketinstallationsprogrammet pip. Till exempel: pip install mysql-connector-python

3 – Ansluta till och fråga Azure Database for MySQL – flexibel server med Python

Även om du har alternativ för att ansluta visar den här enheten hur du använder MySQL Connector/Python för att ansluta till Azure Database for MySQL – flexibel server från din Python-app.

Upprätta en anslutning

Ett kodfragment som du kan använda i Python-appen för att upprätta en anslutning till din flexibla MySQL-server följer. Ersätt parametrarna host, user, passwordoch database med dina värden och ange sökvägen till det nedladdade SSL-certifikatet under ssl_ca alternativet .

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()
  • Metoden mysql.connector.connect() konfigurerar en anslutning till MySQL-servern och returnerar ett anslutningsobjekt. Skicka mySQL-objektet för flexibel serveranslutningsinformation som argument för att upprätta en anslutning till den.
  • Metoden cursor() för anslutningsobjektet skapar en markör som kan användas för att interagera med MySQL-servern.

Utföra databasåtgärder

När du har upprättat en anslutning till mySQL-databasen för flexibel server använder du markörobjektet och anropar cursor.execute() metoden för att utföra alla databasåtgärder. Till exempel:

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

Stäng anslutningen

MySQL Connector/Python tar inte automatiskt emot transaktioner, så det är viktigt att anropa commit() metoden för anslutningsobjektet, till exempel conn.commit(), efter varje transaktion som ändrar data.

När du har utfört alla åtgärder är det bra att stänga markören och anslutningsobjektet.

cursor.close()
conn.close()

MySQL-anslutningsappar för Java

Om du vill ansluta till MySQL från din Java-app kan du använda MySQL Connector/J, ett JDBC-kompatibelt API som internt implementerar MySQL-protokollet i Java i stället för att använda klientbibliotek. Du kan installera MySQL Connector/J från en binär distribution eller använda Apache Maven-beroendehanteraren.

Du kan också använda ramverk som Spring Data JPA för att ansluta till MySQL från Java.

3 – Ansluta till och fråga Azure Database for MySQL – flexibel server med Java

Även om du har alternativ för att ansluta visar den här enheten hur du använder MySQL Connector/J för att ansluta till Azure Database for MySQL – flexibel server från din Java-app.

Lagra anslutningsinformation

Det är en bra idé att skapa en application.properties fil i resursavsnitteti källkoden för att lagra mySQL-anslutningsinformationen för flexibel server.

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

Upprätta en anslutning

När du använder JDBC utanför en programserver hanterar klassen DriverManager i java.sql-paketet etableringen av anslutningar. Om du vill ansluta till din flexibla MySQL-server läser du först in anslutningsegenskaperna från application.properties filen och anropar DriverManager-metoden getConnection() genom att skicka dessa anslutningsegenskaper till den.

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

        .
        .

    }
}

Utföra databasåtgärder

När du har upprättat en anslutning och hämtat Connection objektet kan du anropa createStatement() -metoden för objektet för att skapa ett Statement objekt. När du har en Statement instans kan du köra en SELECT fråga genom att anropa executeQuery(String) metoden med den SQL som du vill använda. Om du vill uppdatera data i databasen använder du executeUpdate(String SQL) metoden .

Till exempel:

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

Om frågan innehåller några variabelindata ska parametriserade förberedda instruktioner användas i stället. Detta skyddar mot SQL-inmatningsattacker, som är en av de vanligaste teknikerna som används av webbhackare. Om du vill använda förberedda instruktioner kan du anropa prepareStatement() -metoden på Connection objektet för att skapa ett PreparedStatement objekt, binda parametrarna och sedan köra den förberedda instruktionen med hjälp av executeUpdate() metoden.

Stäng anslutningen

När du har slutfört databasåtgärderna är det bra att stänga databasanslutningen close() med hjälp av metoden för anslutningsobjektet. Till exempel: connection.close();