從應用程式連接並查詢適用於 MySQL 的 Azure 資料庫彈性伺服器
適用於 MySQL 的 Azure 資料庫 - 彈性伺服器讓您彈性使用慣用的工具、語言和架構,開發應用程式。 您可以繼續使用 Visual Studio Code 和 GitHub 等功能強大的開發工具,並使用 PHP、Java、Python、Node.js、C#、Ruby、Rust、Go 等任何程式設計語言進行開發。您也可以將彈性伺服器與熱門的內容管理系統 (CMS) (例如 WordPress 或 Drupal)、學習管理系統 (LMS) (例如 Moodle)、電子商務平台 (例如 Magento) 整合。
首先,讓我們看一下使用您選擇的語言從您的應用程式連接並查詢適用於 MySQL 的 Azure 資料庫彈性伺服器所涉及的各種工作。
1 - 取得連線資訊
第一項工作是取得要連線至適用於 MySQL 的 Azure 資料庫彈性伺服器所需的連線資訊 (伺服器名稱、資料庫名稱和登入認證)。
在 Azure 入口網站中,瀏覽至 MySQL 彈性伺服器資源,並記下伺服器名稱和伺服器系統管理員登入名稱。
2 - 取得 SSL 憑證
為保護傳輸中的資料,建議您確保應用程式有使用安全通訊端層 (SSL) 來連線至適用於 MySQL 的 Azure 資料庫彈性伺服器。 您可以從 Azure 入口網站中的 [網路] 刀鋒視窗,下載公用 SSL 憑證,如下列螢幕擷取畫面所示。
儲存憑證檔案至慣用位置。
適用於 PHP 的 MySQL 延伸模組
若要從 PHP 應用程式連線到 MySQL,您可以使用下列其中一個延伸模組:
- MySQLi (MySQL 已改善的) 延伸模組。 MySQLi 延伸模組隨附於 PHP 第 5 版和更新版本,可提供物件導向和程序性的介面,以簡化 MySQL 資料庫的連線和使用。
- PDO_MYSQL。 PDO 或 PHP 資料物件延伸模組會定義介面,然後存取 PHP 中的資料庫。 PDO_MYSQL 是 MySQL 特定的驅動程式,此驅動程式會實作 PDO 介面,並啟用 PHP 至 MySQL 資料庫的存取。
若要使用延伸模組,您必須取消註解關聯的程式碼行,然後在 php.ini
設定檔中啟用延伸模組。 例如,如果您要使用 MySQLi,請在檔案中取消註解 extension=mysqli
程式碼。
3 - 使用 PHP 連線並查詢 MySQL 彈性伺服器
雖然有數種連線選項可供使用,但本單元示範如何使用 MySQLi 延伸模組從 PHP 應用程式連線到適用於 MySQL 的 Azure 資料庫彈性伺服器。
您也需要使用 OpenSSL 延伸模組,透過 SSL 建立加密連線。 如同您針對 MySQLi 執行的動作,請取消註解 php.ini
檔案中的 extension=openssl
程式碼,再啟用 OpenSSL 延伸模組。
建立連線
若要使用 MySQLi 向 MySQL 彈性伺服器建立連線,您可以在 PHP 應用程式中使用下列程式碼片段。 請務必以您的值取代 host
、username
、password
和 db_name
參數,然後在 mysqli_ssl_set()
方法中針對已下載的 SSL 憑證路徑提供路徑。
$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");
mysqli_init()
方法會將 MySQLi 初始化,並傳回搭配mysqli_real_connect()
使用的物件mysqli_ssl_set()
用於使用 SSL 建立安全連線。 此方法會採用已下載的 SSL 憑證路徑。 除非啟用 OpenSSL 延伸模組,否則此函式不會執行任何動作。mysqli_real_connect()
方法會開啟 MySQL 資料庫引擎的連線。 以引數形式傳遞 MySQL 彈性伺服器連線資訊,以向其建立連線。
執行資料庫作業
建立彈性伺服器資料庫的連線後,請使用 mysqli_query()
等方法執行查詢。 例如:
mysqli_query($conn, '
CREATE TABLE Products (
`Id` INT NOT NULL AUTO_INCREMENT ,
`ProductName` VARCHAR(200) NOT NULL ,
`Price` DOUBLE NOT NULL ,
PRIMARY KEY (`Id`)
);
')
如果查詢包含任何變數輸入,請改用參數化準備陳述式。 這會防止 SQL 插入式攻擊,即網路駭客最常使用的技術。
此程式碼片段會使用下列準備好的 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);
}
關閉連線
完成資料庫作業後,建議您使用 mysqli_close()
方法關閉資料庫連線。
mysqli_close($conn);
適用於 Python 的 MySQL 連接器
若要從 Python 應用程式連線 MySQL,您可以使用 MySQL 連接器/Python (與 MySQL 伺服器通訊的獨立式 Python 驅動程式) 或 PyMySQL。
您可以使用 Python 封裝安裝程式 pip
,輕鬆安裝這些連接器。 例如,pip install mysql-connector-python
3 - 使用 Python 連接並查詢適用於 MySQL 的 Azure 資料庫 - 彈性伺服器
雖然有數種連線選項可供使用,但本單元示範如何使用 MySQL 連接器/Python 從 Python 應用程式連線到適用於 MySQL 的 Azure 資料庫彈性伺服器。
建立連線
您可以在 Python 應用程式中使用的一種程式碼片段,以建立連接 MySQL 彈性伺服器的連線。 請務必以您的值取代 host
、user
、password
和 database
參數,並在 ssl_ca
選項下針對已下載的 SSL 憑證提供路徑。
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()
mysql.connector.connect()
方法會設定與 MySQL 伺服器的連線,並傳回連線物件。 以引數形式傳遞 MySQL 彈性伺服器連線資訊物件,以向其建立連線。- 連線物件的
cursor()
方法會建立可用來與 MySQL 伺服器互動的資料指標。
執行資料庫作業
在向 MySQL 彈性伺服器資料庫建立連線後,請使用資料指標物件並叫用 cursor.execute()
方法執行任何資料庫作業。 例如:
# 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))
關閉連線
MySQL Connector/Python 不會自動認可交易,因此在每個修改資料的交易後,請務必呼叫連線物件的 commit()
方法,例如 conn.commit()
。
執行所有作業後,建議您關閉資料指標和連線物件。
cursor.close()
conn.close()
適用於 JAVA 的 MySQL 連接器
若要從 JAVA 應用程式連線 MySQL,您可以使用 MySQL 連接器/J (即 JAVA 中原生實作 MySQL 通訊協定的 JDBC 相容 API),而不利用用戶端程式庫。 您可以從二進位散發或使用 Apache Maven 相依性管理員,安裝 MySQL 連接器/J。
或者,您也可以使用 Spring Data JPA 等架構,從 JAVA 連線 MySQL。
3 - 使用 Java 連接並查詢適用於 MySQL 的 Azure 資料庫 - 彈性伺服器
雖然有數種連線選項可供使用,但本單元示範如何使用 MySQL 連接器/J 從 Java 應用程式連線到適用於 MySQL 的 Azure 資料庫彈性伺服器。
儲存連線資訊
建議您在原始程式碼的 [資源] 區段中建立 application.properties
檔案,儲存 MySQL 彈性伺服器的連線資訊。
url=jdbc:mysql://<your_server_name>.mysql.database.azure.com:3306/<your_database_name>?serverTimezone=UTC
user=<your_admin_username>
password=<your_password>
建立連線
使用應用程式伺服器外部的 JDBC 時,java.sql 套件中的 DriverManager 類別會管理連線的建立。 若要連線 MySQL 彈性伺服器,請先從 application.properties
檔案載入連線屬性,並傳遞這些連線屬性至伺服器,然後叫用 DriverManager 的 getConnection()
方法。
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);
.
.
}
}
執行資料庫作業
建立連線並取得 Connection
物件後,您可以在物件上呼叫 createStatement()
方法,建立 Statement
物件。
有 Statement
執行個體後,您可以使用您要使用的 SQL,呼叫 executeQuery(String)
方法執行 SELECT
查詢。 若要更新資料庫中的資料,請使用 executeUpdate(String SQL)
方法。
例如:
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");
如果查詢包含任何變數輸入,請改用參數化準備陳述式。 這會防止 SQL 插入式攻擊,即網路駭客最常使用的技術。 若要使用準備的陳述式,您可以在 Connection
物件上呼叫 prepareStatement()
方法以建立 PreparedStatement
物件、繫結參數,然後使用 executeUpdate()
方法執行準備的陳述式。
關閉連線
完成資料庫作業後,建議您使用連線物件的 close()
方法,關閉資料庫連線。 例如,connection.close();