Verbinding maken met en query's uitvoeren op een flexibele Azure Database for MySQL-server vanuit uw app
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.
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 host
parameters , username
password
en 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 metmysqli_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 host
parameters , user
password
en 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();