Hướng dẫn how is a php connected to a database? - php được kết nối với cơ sở dữ liệu như thế nào?


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: http://php.net/manual/en/mysqli.installation.php


Cài đặt PDO

Để biết chi tiết cài đặt, hãy truy cập: http://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)

$servername = "localhost";
$username = "username";
$password = "password";

// Tạo kết nối $ Conn = new mysqli ($ servername, $ username, $ password);
$conn = new mysqli($servername, $username, $password);

// kiểm tra kết nối if ($ Conn-> Connect_error) & nbsp; ?>
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)

$servername = "localhost";
$username = "username";
$password = "password";

// Tạo kết nối $ Conn = new mysqli ($ servername, $ username, $ password);
$conn = mysqli_connect($servername, $username, $password);

// kiểm tra kết nối if ($ Conn-> Connect_error) & nbsp; ?>
if (!$conn) {
  die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";
?>


Lưu ý trên ví dụ hướng đối tượng ở trên:

$servername = "localhost";
$username = "username";
$password = "password";

// Tạo kết nối $ Conn = new mysqli ($ servername, $ username, $ password);
  $conn = new PDO("mysql:host=$servername;dbname=myDB", $username, $password);
  // set the PDO error mode to exception
  $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  echo "Connected successfully";
} catch(PDOException $e) {
  echo "Connection failed: " . $e->getMessage();
}
?>


// kiểm tra kết nối if ($ Conn-> Connect_error) & nbsp; ?> 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)




Trong blog này, chúng tôi giới thiệu MySQL là gì và hướng dẫn bạn cách kết nối PHP với cơ sở dữ liệu MySQL.

MySQL là gì?

MySQL là tùy chọn nguồn mở phổ biến nhất cho hệ thống quản lý cơ sở dữ liệu quan hệ (RDBMS). Nó tuân thủ các tiêu chuẩn SQL và cung cấp các hàm RDBMS phổ biến như kích hoạt, tham gia và chế độ xem.

Và đối với các nhà phát triển đã quen thuộc với các giải pháp RDBMS như DB2 và Oracle, MySQL cũng rất dễ học. Mariadb là một cái nĩa của MySQL. Bạn cũng có thể sử dụng thông tin là blog này để kết nối Mariadb với PHP. & nbsp;

Tại sao kết nối PHP với MySQL?

Mục đích của nhiều giải pháp PHP là cung cấp quyền truy cập dựa trên web vào nội dung động mà Lừa lưu trữ trong cơ sở dữ liệu. PHP hỗ trợ nhiều hệ thống quản lý cơ sở dữ liệu bao gồm MySQL, MariaDB, DB2, MongoDB, Oracle, PostgreSQL và SQLite.

Cách kết nối PHP với cơ sở dữ liệu MySQL

Dưới đây là hai bước để kết nối PHP với cơ sở dữ liệu MySQL.

1. Sử dụng các tiện ích mở rộng để kết nối cơ sở dữ liệu MySQL trong PHP

PHP cung cấp ba phần mở rộng mà bạn có thể sử dụng để:

  • Kết nối các ứng dụng PHP với MySQL (và MariaDB). & nbsp;
  • Truy xuất thông tin máy chủ cơ sở dữ liệu.
  • Quản lý các lỗi được tạo từ các cuộc gọi cơ sở dữ liệu
  • Làm việc với các bản ghi cơ sở dữ liệu bằng các hàm tạo, đọc, cập nhật và xóa (CRUD).

Ba tiện ích mở rộng mà PHP cung cấp để kết nối với MySQL bao gồm mysqli, mysqlind và pdo_mysql.

Mở rộng MySQLI

MySQLI trong PHP hỗ trợ MySQL 4.1 và mới hơn. MySQLI cũng được gọi là MySQL được cải thiện.

mở rộng mysqlnd

Thường được gọi là trình điều khiển gốc MySQL, MySQLind cung cấp cơ sở hạ tầng bản địa PHP cho tất cả các tiện ích mở rộng MySQL và là sự thay thế thả vào cho libmysqlclient. Điều quan trọng cần lưu ý là MySQLND không cung cấp API. Đọc tài liệu để biết thêm thông tin.

Tiện ích mở rộng PDO_MYSQL

PDO_MYSQL cung cấp giao diện đối tượng PHP (PDO) cho cơ sở dữ liệu MySQL là lớp trừu tượng truy cập dữ liệu.

2. Thêm câu lệnh SQL vào các chức năng PHP

Bằng cách sử dụng các tiện ích mở rộng MySQL trong tập lệnh PHP, bạn có thể thêm các câu lệnh SQL sau trong các hàm CRUD PHP để hoạt động với các bản ghi cơ sở dữ liệu MySQL:

  • CHÈN
  • CẬP NHẬT
  • XÓA BỎ

Để chỉ định những hồ sơ nào sẽ được tham gia, bạn có thể sử dụng các điều khoản. Thông thường, các giá trị mà các câu lệnh SQL cần sẽ đến từ các giá trị dạng web và được biểu diễn dưới dạng các biến trong tập lệnh PHP. & NBSP;

Tập lệnh mẫu để kết nối & nbsp; cơ sở dữ liệu mysql & nbsp; và make & nbsp; truy vấn mysql trong PHP

Đây là một ví dụ đơn giản về tập lệnh PHP sử dụng các cuộc gọi được cung cấp bởi tiện ích mở rộng MySQLI để chọn các bản ghi từ cơ sở dữ liệu MySQL:

Hướng dẫn how is a php connected to a database? - php được kết nối với cơ sở dữ liệu như thế nào?

Hãy nhớ rằng DBMS sẽ thực thi các ràng buộc tương tự đối với các câu lệnh SQL được thực thi thông qua PHP vì nó sẽ có bất kỳ giao diện nào khác vào cơ sở dữ liệu. Nỗ lực chèn hồ sơ với các khóa trùng lặp sẽ bị từ chối. Mã thích hợp nên bao gồm các thử nghiệm cho các điều kiện lỗi trên kết nối cơ sở dữ liệu (hiển thị ở trên) cũng như các lần thực thi truy vấn. & nbsp;

Ví dụ, mã sau đây có thể được chèn sau cuộc gọi 'mysqli_connect' để xác thực rằng kết nối thành công giữa PHP và MySQL đã được lấy (xem thêm về cách kiểm tra kết nối MySQL của bạn tại đây):

if (mysqli_connect_error()) {
   print("Connect failed: " . mysqli_connect_error());
   exit();
}

Tương tự, cuộc gọi 'mysqli_query' có thể được kiểm tra để trả lại hợp lệ và nếu không phải là cuộc gọi 'mysqli_error ()' có thể được sử dụng để xuất ra lỗi cụ thể. & nbsp; 'mysqli_error ()' trả về mô tả chuỗi của lỗi cuối cùng trong khi 'mysql_errorno ()' trả về số lỗi.

Mysql từ & nbsp; php: bảo mật

Bạn cần giữ bảo mật hàng đầu trong cả thiết kế của ứng dụng cũng như triển khai.

Một cách để đảm bảo bảo mật dữ liệu là thông qua tiện ích mở rộng 'bộ lọc' được cung cấp cho PHP cung cấp một số loại bộ lọc bao gồm 'xác nhận' và 'vệ sinh'.

SQL tiêm

SQL Injection chính xác là những gì tên ngụ ý rằng việc tiêm dữ liệu/câu lệnh vào câu lệnh SQL. Xem xét câu lệnh SQL Insert sau:

select * from dbtable where customer = $name;

Giả sử thêm rằng giá trị cho $ name đến từ dạng web (có thể là một giả định lưu vì đây có thể là một ứng dụng PHP. Không có vệ sinh đúng cách của dạng web hoặc xác thực dữ liệu mà người dùng có thể nhập sau đây cho tên :

John;truncate sales;

Điều này sẽ dẫn đến các câu lệnh SQL sau:

select * from dbtable where customer = John; truncate sales;

Bây giờ, khi điều này được thực thi ngoài câu lệnh select được thực thi, các bản ghi từ bảng bán hàng sẽ bị xóa - rất khó có khả năng đó là kết quả chúng tôi muốn. Vậy làm thế nào chúng ta có thể ngăn chặn điều này xảy ra? Một cách là với các tuyên bố đã chuẩn bị. Với một câu lệnh đã chuẩn bị, thay vì gửi một truy vấn thô (như tôi đã hiển thị ở trên) đến công cụ cơ sở dữ liệu, trước tiên, chúng tôi cho biết cơ sở dữ liệu cấu trúc của truy vấn sẽ được gửi.

Làm thế nào để tránh tiêm SQL

Để tránh tiêm SQL, hãy sử dụng truy vấn đã chuẩn bị xác định trình giữ chỗ cho các tham số của câu lệnh truy vấn và sau đó liên kết các giá trị với các tham số đó. Chúng ta hãy xem một ví dụ khác, lần này sẽ được sử dụng SQL Chèn:

INSERT into dbtable (name) VALUES ($name);

Tại thời điểm này, vẫn có thể đưa ra các câu lệnh độc hại thông qua dữ liệu được biểu thị bằng biến tên $ được chuyển đến cơ sở dữ liệu. & nbsp; Hãy thay đổi câu lệnh trên để thay vào đó gửi một trình giữ chỗ đến công cụ cơ sở dữ liệu:

INSERT into dbtable (name) VALUES (?);

Bây giờ, không thể tiêm vì không có giá trị (biến hoặc nghĩa đen) đang được gửi đến công cụ cơ sở dữ liệu.

Câu lệnh được tham số hóa (đôi khi được gọi là mẫu) được gửi đến công cụ cơ sở dữ liệu với hàm mysqli_prepare ().

Vậy làm thế nào để chúng ta thực sự có được giá trị cho cơ sở dữ liệu? Điều đó được thực hiện với hàm mysqli_stmt_bind_param () và cuối cùng, câu lệnh được thực thi với hàm mysqli_stmt_execute ().

Chúng ta hãy đặt tất cả những điều này lại với nhau trong một ví dụ:


Vì các biến bị ràng buộc được gửi đến công cụ cơ sở dữ liệu tách biệt với truy vấn mà chúng không thể bị can thiệp. Công cụ cơ sở dữ liệu sử dụng các giá trị trực tiếp tại điểm thực thi sau khi câu lệnh đã được phân tích cú pháp.

Lưu ý rằng tham số thứ hai cho hàm 'mysql_stmt_bind_param ()' là một chuỗi để chỉ ra 'loại (s)' cho các giá trị được truyền. Trong & nbsp; trường hợp này chỉ có một giá trị được thông qua và giá trị đó có một loại chuỗi. Mã trên phải được mở rộng để bao gồm kiểm tra lỗi trên đường đi tại mỗi thực thi chức năng cơ sở dữ liệu.

Nếu bạn đang sử dụng Zend Server trong môi trường của mình thì bạn biết rằng bạn có:

  • Các chức năng như truy tìm mã.
  • Z-ray cho hồ sơ ứng dụng.

Các chức năng đó có thể hiển thị dữ liệu từ ứng dụng như giá trị truy vấn dữ liệu. Những gì bạn có thể không biết là Zend Server cũng bao gồm khả năng che dấu dữ liệu cho các chức năng, định danh và khóa - cũng như các giá trị.

MySQL và PHP: Ngăn xếp đèn

MySQL và PHP là các phần không thể thiếu của ngăn xếp đèn phổ biến là một chồng các thành phần đủ khả năng phát triển vừa triển khai các ứng dụng dựa trên web với nội dung động. & NBSP;

Các ứng dụng năng suất phổ biến - như WordPress, Drupal, Magento, Zencart và các ứng dụng khác - tất cả đều tận dụng ngăn xếp này. Họ sử dụng nó để thực hiện các giải pháp năng suất chất lượng cao, sẵn sàng cho doanh nghiệp trong Quản lý quan hệ khách hàng (CRM), Thương mại điện tử, Hệ thống quản lý nội dung (CMS) và các không gian khác.

Các ứng dụng này thường là khóa chuyển tiếp theo cách tiếp cận cài đặt/cấu hình và dựa vào cách tiếp cận cộng đồng cả để phát triển cũng như hỗ trợ. & NBSP; hỗ trợ lớp doanh nghiệp cho các loại giải pháp này có thể được lấy từ một số nguồn bao gồm cả OpenLogic Đội tại Perforce.

Lưu ý: Từ viết tắt của LAMP đề cập đến hệ điều hành (Linux), máy chủ web (APACHE), Hệ thống quản lý cơ sở dữ liệu (DBMS) và ngôn ngữ kịch bản (PHP). Nhưng thực tế là cùng một ngăn xếp có sẵn trên vô số hệ điều hành bao gồm Windows (WAMP) và IBM I (IAMP). Sơ đồ sau đại diện cho ngăn xếp:

Hướng dẫn how is a php connected to a database? - php được kết nối với cơ sở dữ liệu như thế nào?

Giải pháp PHP và MySQL từ Zend

Các ứng dụng web, cho dù là máy tính để bàn hay thiết bị di động, là những cách mạnh mẽ để đưa dữ liệu vào tay nhân viên, khách hàng hoặc các bên liên quan khác để hỗ trợ bất kỳ số lượng yêu cầu nào bao gồm thương mại, lập kế hoạch tài nguyên và xây dựng và chia sẻ thông tin.

PHP và MySQL là hai công cụ có giá trị để đưa dữ liệu lên web thông qua các ứng dụng khách hàng cũng như các giải pháp nguồn mở hiện có dựa trên các công nghệ này. & NBSP;

Zend By Perforce có tài nguyên cả trong không gian PHP có thể giúp bạn phát triển chiến lược thực hiện các giải pháp PHP/MySQL cũng như hỗ trợ cho các giải pháp được triển khai trên các công nghệ này.

Hãy thử Zend Server miễn phí!Tải xuống bản dùng thử miễn phí của bạn về nền tảng phát triển ứng dụng web Zend Server.Xem cách bạn có thể cải thiện mức độ nhanh nhẹn và mức độ dịch vụ.

Thử zend miễn phí