Đôi khi bạn muốn làm việc với hai hoặc nhiều máy chủ SQL trong cùng một tập lệnh PHP.
Ví dụ: bạn có thể muốn sao chép dữ liệu từ máy chủ SQL này sang máy chủ SQL khác hoặc so sánh dữ liệu giữa hai máy chủ.
Bạn cũng có thể muốn giữ hai kết nối riêng biệt tới cùng một máy chủ SQL vì mục đích bảo mật.
Trong trường hợp này, ý tưởng là sử dụng hai tài khoản SQL với các đặc quyền khác nhau để giảm thiểu nguy cơ bị tấn công tiêm nhiễm.
May mắn thay, PHP cho phép bạn mở nhiều kết nối MySQL cùng một lúc.
Hãy xem bạn có thể làm điều đó như thế nào với cả MySQLi và PDO .
Cách kết nối với nhiều máy chủ MySQL bằng MySQLi
Hãy bắt đầu với MySQLi.
Bạn có thể kết nối với máy chủ MySQL bằng MySQLi như thế này:
Ví dụ
$dbHost1 = '192.168.0.1';
$dbUser1 = 'user_1';
$dbPass1 = 'password_1';
$mysql1 = mysqli_connect($dbHost1, $dbUser1, $dbPass1);
mysqli_select_db($mysql1, 'my_db_1');
(Tất nhiên, bạn nên sử dụng mật khẩu an toàn hơn “password_1”. ).
Nếu bạn muốn kết nối với một máy chủ MySQL khác mà không đóng kết nối đầu tiên, bạn chỉ cần tạo một biến tài nguyên kết nối MySQLi mới với các tham số của cơ sở dữ liệu mới mà không ảnh hưởng đến cơ sở dữ liệu khác.
Ví dụ
/* First connection */
$dbHost1 = '192.168.0.1';
$dbUser1 = 'user_1';
$dbPass1 = 'password_1';
$mysql1 = mysqli_connect($dbHost1, $dbUser1, $dbPass1);
mysqli_select_db($mysql1, 'my_db_1');
/* Second connection */
$dbHost2 = '192.168.0.2';
$dbUser2 = 'user_2';
$dbPass2 = 'password_2';
$mysql2 = mysqli_connect($dbHost2, $dbUser2, $dbPass2);
mysqli_select_db($mysql2, 'my_db_2');
Sau đó, bạn có thể sử dụng cả hai kết nối cùng một lúc:
Ví dụ
$query = 'SELECT * FROM users';
/* Read users from first server */
$result = mysqli_query($mysqli1, $query);
$rows = mysqli_fetch_all($result, MYSQLI_ASSOC);
echo 'Users on server 1:';
foreach ($rows as $row) {
echo $row['user_name'] . '<br>';
}
/* Read users from second server */
$result = mysqli_query($mysqli2, $query);
$rows = mysqli_fetch_all($result, MYSQLI_ASSOC);
echo 'Users on server 2:';
foreach ($rows as $row) {
echo $row['user_name'] . '<br>';
}
Ví dụ này chỉ có hai kết nối nhưng bạn có thể tạo bao nhiêu kết nối tùy thích.
Dưới đây là cách kết nối với hai máy chủ SQL bằng cú pháp OOP của MySQLi :
Ví dụ
/* First connection */
$dbHost1 = '192.168.0.1';
$dbUser1 = 'user_1';
$dbPass1 = 'password_1';
$mysql1 = new mysqli($dbHost1, $dbUser1, $dbPass1, 'my_db_1');
/* Second connection */
$dbHost2 = '192.168.0.2';
$dbUser2 = 'user_2';
$dbPass2 = 'password_2';
$mysql2 = new mysqli($dbHost2, $dbUser2, $dbPass2, 'my_db_2');
/* Run a query on first server */
$mysql1->query('DELETE FROM users WHERE id = 1');
/* Run a query on second server */
$mysql2->query('DELETE FROM users WHERE id = 2');
Cách kết nối với nhiều máy chủ MySQL bằng PDO
Bạn cũng có thể tạo nhiều kết nối đến các máy chủ MySQL khác nhau bằng PDO.
Áp dụng khái niệm tương tự: chỉ cần sử dụng một biến tài nguyên khác cho mỗi kết nối.
Ví dụ
/* First connection */
$dbHost1 = '192.168.0.1';
$dbUser1 = 'user_1';
$dbPass1 = 'password_1';
$mysql1 = new PDO('mysql:host=' . $dbHost1 . ';dbname=my_db_1', $dbUser1, $dbPass1);
/* Second connection */
$dbHost2 = '192.168.0.2';
$dbUser2 = 'user_2';
$dbPass2 = 'password_2';
$mysql2 = new PDO('mysql:host=' . $dbHost2 . ';dbname=my_db_2', $dbUser2, $dbPass2);
/* Run a query on first server */
$mysql1->exec('DELETE FROM users WHERE id = 1');
/* Run a query on second server */
$mysql2->exec('DELETE FROM users WHERE id = 2');
Tôi hy vọng bạn thích hướng dẫn nhỏ này.
Để tìm hiểu thêm về PHP và MySQL: Kết nối với Máy chủ MySQL bằng PHP
Để lại bình luận bên dưới nếu bạn có bất kỳ câu hỏi nào.