Php 5 trở lên có thể làm việc với cơ sở dữ liệu MySQL bằng cách sử dụng:
- Mở rộng mysqli ["i" là viết tắt của cải tiến] [the "i" stands for improved]
- PDO [Đối tượng dữ liệu PHP]
Các phiên bản trước của PHP đã sử dụng tiện ích mở rộng MySQL. Tuy nhiên, phần mở rộng này đã bị phản đối trong năm 2012.
Tôi nên sử dụng mysqli hay pdo?
Nếu bạn cần một câu trả lời ngắn, đó sẽ là "bất cứ điều gì bạn thích".
Cả MySQLI và PDO đều có lợi thế của họ:
PDO sẽ hoạt động trên 12 hệ thống cơ sở dữ liệu khác nhau, trong khi MySQLI sẽ chỉ hoạt động với cơ sở dữ liệu MySQL.
Vì vậy, nếu bạn phải chuyển đổi dự án của mình để sử dụng cơ sở dữ liệu khác, PDO sẽ làm cho quá trình trở nên dễ dàng. Bạn chỉ phải thay đổi chuỗi kết nối và một vài truy vấn. Với MySQLI, bạn sẽ cần viết lại toàn bộ mã - các truy vấn bao gồm.
Cả hai đều theo định hướng đối tượng, nhưng MySQLI cũng cung cấp API thủ tục.
Cả hai hỗ trợ các tuyên bố đã chuẩn bị. Các tuyên bố được chuẩn bị bảo vệ khỏi SQL Injection và rất quan trọng đối với bảo mật ứng dụng web.
Ví dụ MySQL trong cả cú pháp MySQLI và PDO
Trong đó, và trong các chương sau, chúng tôi đã chứng minh ba cách làm việc với PHP và MySQL:
- Mysqli [hướng đối tượng]
- Mysqli [thủ tục]
- PDO
Cài đặt MySQLI
Đối với Linux và Windows: Phần mở rộng MySQLI được tự động cài đặt trong hầu hết các trường hợp, khi gói HYSQL PHP5 được cài đặt.
Để biết chi tiết cài đặt, hãy truy cập: //php.net/manual/en/mysqli.installation.php
Cài đặt PDO
Để biết chi tiết cài đặt, hãy truy cập: //php.net/manual/en/pdo.installation.php
Mở kết nối với MySQL
Trước khi chúng tôi có thể truy cập dữ liệu trong cơ sở dữ liệu MySQL, chúng tôi cần có thể kết nối với máy chủ:
Ví dụ [hướng đối tượng mysqli] theo định hướng đối tượng]
if [$conn->connect_error] {
die["Connection failed: " . $conn->connect_error];
}
echo "Connected successfully";
?>
Lưu ý trên ví dụ hướng đối tượng ở trên:
$ Connect_error đã bị hỏng cho đến khi Php 5.2.9 và 5.3.0. Nếu bạn cần đảm bảo khả năng tương thích với các phiên bản PHP trước 5.2.9 và 5.3.0, hãy sử dụng mã sau thay thế:
// Kiểm tra Connectionif [mysqli_connect_error []] {& nbsp; & nbsp; die ["Kết nối cơ sở dữ liệu không thành công:".
if [mysqli_connect_error[]] {
die["Database connection failed: " . mysqli_connect_error[]];
}
Ví dụ [thủ tục MySQLI]
if [!$conn] {
die["Connection failed: " . mysqli_connect_error[]];
}
echo "Connected successfully";
?>
Lưu ý trên ví dụ hướng đối tượng ở trên:
// kiểm tra kết nối nếu [$ Conn-> Connect_error] & nbsp; {& nbsp; & nbsp; die ["kết nối không thành công:". $ Conn-> Connect_error];} echo "kết nối thành công"; ?> In the PDO example above we have also specified a database [myDB]. PDO require a valid database to connect to. If no database is specified, an exception is thrown.
Lưu ý trên ví dụ hướng đối tượng ở trên: A great benefit of PDO is that it has an exception class to handle any problems that may occur in our database queries. If an exception is thrown within the try{ } block, the script stops executing and flows directly to the first catch[]{ } block.
$ Connect_error đã bị hỏng cho đến khi Php 5.2.9 và 5.3.0. Nếu bạn cần đảm bảo khả năng tương thích với các phiên bản PHP trước 5.2.9 và 5.3.0, hãy sử dụng mã sau thay thế:
// Kiểm tra Connectionif [mysqli_connect_error []] {& nbsp; & nbsp; die ["Kết nối cơ sở dữ liệu không thành công:".
Ví dụ [thủ tục MySQLI]
// Tạo kết nối $ Conn = mysqli_connect [$ servername, $ username, $ password];
// kiểm tra kết nối if [! $ Conn] & nbsp; {& nbsp; chết ["kết nối không thành công:". mysqli_connect_error []];} echo "kết nối thành công"; ?>
Ví dụ [PDO]
Tôi có thể có các tập lệnh PHP của mình trên máy chủ A và kết nối với cơ sở dữ liệu MySQL trên máy chủ B không?
Nếu có, nó sẽ được thực hiện như thế nào? Cảm ơn trước
Đã hỏi ngày 19 tháng 11 năm 2009 lúc 14:08Nov 19, 2009 at 14:08
Ankit Sachanankit SachanAnkit Sachan
7.49815 Huy hiệu vàng63 Huy hiệu bạc96 Huy hiệu Đồng15 gold badges63 silver badges96 bronze badges
đơn giản của nó, tất cả các kỹ thuật trên đó khá phức tạp
Giả sử bạn có cơ sở dữ liệu trên máy chủ B và trang web trên máy chủ A [giả sử nó có IP 192.234.12.1]
Trên danh sách trắng cpanel, IP của máy chủ B
và tạo một người dùng mới có đủ các đặc quyền trong cơ sở dữ liệu [giả sử người dùng này là kiểm tra]
Sau đó tạo người dùng này dưới dạng
Đã trả lời ngày 20 tháng 11 năm 2009 lúc 16:54Nov 20, 2009 at 16:54
Ankit Sachanankit SachanAnkit Sachan
7.49815 Huy hiệu vàng63 Huy hiệu bạc96 Huy hiệu Đồng15 gold badges63 silver badges96 bronze badges
1
Yes.
đơn giản của nó, tất cả các kỹ thuật trên đó khá phức tạp
Ví dụ về Debian: //www.debianhelp.co.uk/remotemysql.htm
Đã trả lời ngày 19 tháng 11 năm 2009 lúc 14:10Nov 19, 2009 at 14:10
Francisco Aquinofrancisco AquinoFrancisco Aquino
9.0671 Huy hiệu vàng 30 Huy hiệu bạc37 Huy hiệu Đồng1 gold badge30 silver badges37 bronze badges
Có, nó có thể được thực hiện.
Tìm hiểu địa chỉ IP của máy chủ A nơi các tập lệnh của bạn sẽ được tải lên. Đừng quên thay đổi localhost thành địa chỉ IP của máy chủ B trong phương thức mysql_connect [] hoặc mysqli_connect [].
Bây giờ đi bảng điều khiển của máy chủ B nơi cơ sở dữ liệu của bạn.
Trong trang chủ của bảng điều khiển, hãy đi phần cơ sở dữ liệu và nhấp vào tùy chọn MySQL từ xa.
Sau đó thêm địa chỉ IP của máy chủ A và nhấp vào Thêm máy chủ.
Bây giờ bạn có thể truy cập vào cơ sở dữ liệu trong máy chủ B trong khi các tập lệnh của bạn đang chạy trong máy chủ A. Hãy nhớ rằng kết quả được định sẵn sẽ chậm vì nó nhận được dữ liệu từ cơ sở dữ liệu được đặt trên một máy chủ khác.
Chào mừng bạn
Đã trả lời ngày 27 tháng 4 năm 2017 lúc 17:21Apr 27, 2017 at 17:21
1
Chỉ là không tên máy chủ của hộp khác cho kết nối. Chi tiết phụ thuộc vào phần mở rộng bạn đang sử dụng:
$mysql = mysql_connect[$host, $user, $pass];
$mysqli = new mysqli[$host, $user, $password, $schema];
$pdo = new PDO["mysql:host=$host", $user, $pass];
Đảm bảo rằng người dùng được phép truy cập bởi máy chủ MySQL [tạo người dùng] và kiểm tra xem không có tường lửa nào theo cách này.
Đã trả lời ngày 19 tháng 11 năm 2009 lúc 14:13Nov 19, 2009 at 14:13
Johannesjohannesjohannes
15.6K3 Huy hiệu vàng43 Huy hiệu bạc57 Huy hiệu Đồng3 gold badges43 silver badges57 bronze badges
Đó là tất cả những gì bạn cần.
[Ngay cả bạn có thể có các tập lệnh của mình trên máy chủ A, máy chủ web của bạn trên máy chủ B và cơ sở dữ liệu của bạn trên máy chủ C ...]
Đã trả lời ngày 19 tháng 11 năm 2009 lúc 14:11Nov 19, 2009 at 14:11
PetermmmpetermmmPeterMmm
23.7K13 Huy hiệu vàng71 Huy hiệu bạc110 Huy hiệu đồng13 gold badges71 silver badges110 bronze badges
Tôi đã có những thách thức tương tự nhưng đây là những gì tôi làm việc: để kết nối với máy chủ B từ máy chủ A, trước tiên, bạn cần cho phép máy chủ truy cập MySQL từ xa trong cPanel [máy chủ B], home -> cơ sở dữ liệu -> MySQL từ xa và cũng danh sách trắng IP trong tường lửa [đó là địa chỉ IP của máy chủ B]. Sau đó, kết nối DB PHP sau đây sẽ hoạt động.
$db_connect = mysqli_connect["serverB.com", "dbuser", "dbpassword", "dbname"];
// Evaluate the connection
if [mysqli_connect_errno[]] {
echo mysqli_connect_error[];
exit[];
}else{
//successful connection
echo "Yes, successful";
}
Đã trả lời ngày 22 tháng 8 năm 2016 lúc 14:54Aug 22, 2016 at 14:54
Harrison Oharrison oHarrison O
97113 Huy hiệu bạc19 Huy hiệu đồng13 silver badges19 bronze badges
Đây là một giải pháp hoàn hảo để kết nối cơ sở dữ liệu khác từ các máy chủ khác.
$dbserverName = "191.238.0.2";
$dbUsername = "lauranco_L2L";
$dbPassword = "SL92TIW5T96L";
$dbName = "lauranco_siteBits";
Jon
9072 Huy hiệu vàng10 Huy hiệu bạc28 Huy hiệu đồng2 gold badges10 silver badges28 bronze badges
Đã trả lời ngày 19 tháng 7 năm 2018 lúc 8:04Jul 19, 2018 at 8:04
Chủ đề cũ tốt.
Tuy nhiên - trong tất cả các câu trả lời xuất hiện ở đây, không có gì giải quyết về bảo mật.security.
Việc mở cổng MySQL ở bên ngoài máy chủ là điều rất không an toàn.
Tùy chọn an toàn nhất là giữ cho cổng MySQL mở cho một và duy nhất localhost trong tất cả các máy chủ.
Và có một PHP khác chạy bên trong máy chủ thứ hai, làm cho nó tạo ra đầu ra mong muốn và cung cấp tương tự cho PHP của bạn [chạy trong máy chủ đầu tiên].
Đã trả lời ngày 24 tháng 12 năm 2020 lúc 5:21Dec 24, 2020 at 5:21
6