PHP MySQLi Các hàm: mysqli_query & mysqli_connect

⚡ Tóm tắt thông minh

MySQLCác phương thức truy cập cơ sở dữ liệu như mysqli, PHP và các phương thức khác cho phép một kịch bản PHP kết nối với cơ sở dữ liệu, chạy các truy vấn và đọc kết quả. Hướng dẫn này bao gồm các chức năng cốt lõi của mysqli, các ví dụ CRUD đầy đủ, các câu lệnh được chuẩn bị cho mục đích bảo mật, và các phương thức truy cập thay thế như PDO và ODBC.

  • 🔌 Kết nối: mysqli_connect mở một liên kết đến MySQL Máy chủ và mysqli_select_db chọn cơ sở dữ liệu để làm việc.
  • 🗃️ Đang chạy các truy vấn: mysqli_query thực thi các câu lệnh INSERT, SELECT, UPDATE và DELETE đối với cơ sở dữ liệu đã chọn.
  • 📄 Kết quả đọc: mysqli_num_rows đếm số hàng được trả về, và mysqli_fetch_array đọc từng hàng vào một mảng để xuất ra.
  • 🔄 NGUYÊN Operaý kiến: Kết hợp lại, các chức năng này tạo, đọc, cập nhật và xóa bản ghi, bốn thao tác cốt lõi của cơ sở dữ liệu.
  • 🛡️ Các tuyên bố đã chuẩn bị: Việc liên kết các giá trị bằng câu lệnh đã chuẩn bị giúp ngăn chặn tấn công SQL injection, khác với việc xây dựng truy vấn bằng cách nối các dữ liệu do người dùng nhập vào.
  • 🧩 PDO và ODBC: PDO cung cấp một giao diện duy nhất cho nhiều công cụ cơ sở dữ liệu, trong khi ODBC kết nối với các nguồn như... Microsoft Truy cập.
  • 🤖 Hỗ trợ AI: Các công cụ AI có thể chuyển đổi mã mysqli cũ sang PDO với các câu lệnh đã chuẩn bị và gỡ lỗi kết nối.

PHP MySQL Truy cập cơ sở dữ liệu

PHP có một bộ sưu tập phong phú các hàm tích hợp sẵn để thao tác. MySQL cơ sở dữ liệu.

Hàm mysqli_connect của PHP

Hàm PHP mysqli_connect được sử dụng để kết nối đến một máy chủ. MySQL máy chủ cơ sở dữ liệu.

Cú pháp của nó như sau.

<?php
$db_handle = mysqli_connect($db_server_name, $db_user_name, $db_password);
?>

ĐÂY,

  • “$db_handle” là biến tài nguyên kết nối cơ sở dữ liệu.
  • “mysqli_connect(…)” là hàm dùng để kết nối với cơ sở dữ liệu PHP.
  • “$db_server_name” là tên hoặc địa chỉ IP của máy chủ lưu trữ dữ liệu. MySQL máy chủ.
  • “$db_user_name” là một tên người dùng hợp lệ trong MySQL máy chủ.
  • “$db_password” là mật khẩu hợp lệ được liên kết với tên người dùng trong hệ thống. MySQL máy chủ.

Hàm mysqli_select_db của PHP

Hàm mysqli_select_db được sử dụng để chọn cơ sở dữ liệu.

Cú pháp của nó như sau.

<?php
mysqli_select_db($db_handle, $database_name);
?>

ĐÂY,

  • “mysqli_select_db(…)” là hàm chọn cơ sở dữ liệu trả về đúng hoặc sai
  • “$db_handle” là liên kết kết nối máy chủ.
  • “$database_name” là tên của cơ sở dữ liệu

Hàm mysqli_query của PHP

Hàm mysqli_query được sử dụng để thực thi SQL truy vấn.

Chức năng này có thể được sử dụng để thực hiện các loại truy vấn sau:

  • Chèn
  • Chọn
  • Cập nhật
  • Xóa bỏ

Cú pháp của nó như sau.

<?php
mysqli_query($db_handle, $query);
?>

ĐÂY,

  • “mysqli_query(…)” là hàm thực thi các truy vấn SQL.
  • “$db_handle” là liên kết kết nối máy chủ.
  • “$query” là truy vấn SQL được thực thi

Hàm mysqli_num_rows của PHP

Hàm mysqli_num_rows được sử dụng để lấy số hàng được trả về từ một truy vấn chọn.

Cú pháp của nó như sau.

<?php
mysqli_num_rows($result);
?>

ĐÂY,

  • “mysqli_num_rows(…)” là hàm đếm hàng
  • “$result” là tập kết quả mysqli_query

Hàm mysqli_fetch_array của PHP

Hàm mysqli_fetch_array được sử dụng để lấy mảng hàng từ tập kết quả truy vấn.

Cú pháp của nó như sau.

<?php
mysqli_fetch_array($result);
?>

ĐÂY,

  • “mysqli_fetch_array(…)” là hàm tìm nạp mảng hàng
  • “$result” là kết quả được trả về bởi hàm mysqli_query.

Hàm mysqli_close của PHP

Hàm mysqli_close được sử dụng để đóng kết nối cơ sở dữ liệu đang mở.

Cú pháp của nó như sau.

<?php
mysqli_close($db_handle);
?>

ĐÂY,

  • “mysqli_close(…)” là hàm PHP dùng để đóng kết nối.
  • “$db_handle” là tài nguyên kết nối máy chủ.

PHP MySQL Ví dụ về CRUD

Chúng ta hãy cùng xem xét các ví dụ thực tế tận dụng những chức năng này. Hướng dẫn này giả định bạn đã có kiến ​​thức về... MySQL và SQL; nếu bạn chưa quen thuộc với các thuật ngữ này, vui lòng tham khảo tài liệu của chúng tôi. MySQL và hướng dẫn SQL.

Chúng ta sẽ tạo một cơ sở dữ liệu đơn giản có tên là my_personal_contacts chỉ với một bảng duy nhất. Kết nối đến... MySQL bằng cách sử dụng công cụ truy cập yêu thích của bạn như MySQL Sử dụng Workbench hoặc phpMyAdmin, tạo một cơ sở dữ liệu có tên là my_personal_contacts, sau đó chạy đoạn mã bên dưới để tạo bảng và chèn một số dữ liệu giả.

CREATE TABLE IF NOT EXISTS `my_contacts` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`full_names` varchar(255) NOT NULL,
`gender` varchar(6) NOT NULL,
`contact_no` varchar(75) NOT NULL,
`email` varchar(255) NOT NULL,
`city` varchar(255) NOT NULL,
`country` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

INSERT INTO `my_contacts` (`id`, `full_names`, `gender`, `contact_no`, `email`, `city`, `country`) VALUES
(1, 'Zeus', 'Male', '111', 'zeus@olympus.mt.co', 'Agos', 'Greece'),
(2, 'Anthena', 'Female', '123', 'anthena@olympus.mt.co', 'Athens', 'Greece'),
(3, 'Jupiter', 'Male', '783', 'jupiter@planet.pt.co', 'Rome', 'Italy'),
(4, 'Venus', 'Female', '987', 'venus@planet.pt.co', 'Mars', 'Italy');

Đọc bản ghi từ cơ sở dữ liệu

Bây giờ chúng ta sẽ tạo một chương trình in các bản ghi từ cơ sở dữ liệu.

<?php
$dbh = mysqli_connect('localhost', 'root', 'melody'); // connect to MySQL server
if (!$dbh)
    die("Unable to connect to MySQL: " . mysqli_connect_error());

if (!mysqli_select_db($dbh, 'my_personal_contacts'))
    die("Unable to select database: " . mysqli_error($dbh));

$sql_stmt = "SELECT * FROM my_contacts"; // SQL select query
$result = mysqli_query($dbh, $sql_stmt); // execute SQL statement

if (!$result)
    die("Database access failed: " . mysqli_error($dbh));

$rows = mysqli_num_rows($result); // get number of rows returned

if ($rows) {
    while ($row = mysqli_fetch_array($result)) {
        echo 'ID: ' . $row['id'] . '<br>';
        echo 'Full Names: ' . $row['full_names'] . '<br>';
        echo 'Gender: ' . $row['gender'] . '<br>';
        echo 'Contact No: ' . $row['contact_no'] . '<br>';
        echo 'Email: ' . $row['email'] . '<br>';
        echo 'City: ' . $row['city'] . '<br>';
        echo 'Country: ' . $row['country'] . '<br><br>';
    }
}
mysqli_close($dbh); // close the database connection
?>

Việc thực thi đoạn mã trên sẽ trả về kết quả được hiển thị trong sơ đồ bên dưới.

PHP: MySQL Chức năng

Chèn bản ghi mới

Bây giờ chúng ta hãy xem một ví dụ về việc thêm một bản ghi mới vào bảng của chúng ta. Đoạn mã dưới đây thể hiện cách thực hiện.

<?php
$dbh = mysqli_connect('localhost', 'root', 'melody'); // connect to MySQL server
if (!$dbh)
    die("Unable to connect to MySQL: " . mysqli_connect_error());

if (!mysqli_select_db($dbh, 'my_personal_contacts'))
    die("Unable to select database: " . mysqli_error($dbh));

$sql_stmt = "INSERT INTO `my_contacts` (`full_names`,`gender`,`contact_no`,`email`,`city`,`country`)";
$sql_stmt .= " VALUES(7,8,9,10,11,12)";

$result = mysqli_query($dbh, $sql_stmt); // execute SQL statement
if (!$result)
    die("Adding record failed: " . mysqli_error($dbh));

echo "Poseidon has been successfully added to your contacts list";
mysqli_close($dbh); // close the database connection
?>

Khi thực thi đoạn mã trên, kết quả sẽ hiển thị “Poseidon đã được thêm thành công vào danh sách liên hệ của bạn”. Quay lại ví dụ truy vấn SELECT và truy xuất lại danh sách liên hệ của bạn để xem Poseidon đã được thêm vào danh sách chưa.

Cập nhật hồ sơ

Bây giờ chúng ta hãy xem một ví dụ về việc cập nhật một bản ghi trong cơ sở dữ liệu. Giả sử Poseidon đã thay đổi số điện thoại và địa chỉ email của mình.

<?php
$dbh = mysqli_connect('localhost', 'root', 'melody'); // connect to MySQL server
if (!$dbh)
    die("Unable to connect to MySQL: " . mysqli_connect_error());

if (!mysqli_select_db($dbh, 'my_personal_contacts'))
    die("Unable to select database: " . mysqli_error($dbh));

$sql_stmt = "UPDATE `my_contacts` SET `contact_no` = 8, `email` = 9";
$sql_stmt .= " WHERE `id` = 5"; // SQL update query

$result = mysqli_query($dbh, $sql_stmt); // execute SQL statement
if (!$result)
    die("Updating record failed: " . mysqli_error($dbh));

echo "ID number 5 has been successfully updated";
mysqli_close($dbh); // close the database connection
?>

Xóa hồ sơ

Bây giờ chúng ta hãy xem một ví dụ về việc xóa các bản ghi khỏi cơ sở dữ liệu. Giả sử Venus có lệnh cấm tiếp xúc đối với chúng ta, và chúng ta phải xóa thông tin liên lạc của cô ấy khỏi cơ sở dữ liệu của mình. cơ sở dữ liệu.

<?php
$dbh = mysqli_connect('localhost', 'root', 'melody'); // connect to MySQL server
if (!$dbh)
    die("Unable to connect to MySQL: " . mysqli_connect_error());

if (!mysqli_select_db($dbh, 'my_personal_contacts'))
    die("Unable to select database: " . mysqli_error($dbh));

$id = 4; // Venus's ID in the database
$sql_stmt = "DELETE FROM `my_contacts` WHERE `id` = $id"; // SQL delete query

$result = mysqli_query($dbh, $sql_stmt); // execute SQL statement
if (!$result)
    die("Deleting record failed: " . mysqli_error($dbh));

echo "ID number $id has been successfully deleted";
mysqli_close($dbh); // close the database connection
?>

Ngăn chặn tấn công SQL Injection bằng Prepared Statements

Các ví dụ CRUD ở trên xây dựng truy vấn bằng cách nối các chuỗi. Khi bất kỳ phần nào của truy vấn đến từ dữ liệu nhập của người dùng, điều này sẽ mở ra nguy cơ tấn công SQL injection. Các câu lệnh chuẩn bị (prepared statements) giải quyết vấn đề này bằng cách gửi truy vấn và dữ liệu riêng biệt, do đó dữ liệu nhập không bao giờ có thể thay đổi cấu trúc truy vấn.

<?php
$dbh = mysqli_connect('localhost', 'root', 'melody');
$stmt = mysqli_prepare($dbh, "INSERT INTO my_contacts (full_names, email) VALUES (?, ?)");
mysqli_stmt_bind_param($stmt, "ss", $name, $email);
$name = 'Poseidon';
$email = 'poseidon@sea.oc';
mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);
mysqli_close($dbh);
?>

Ở đây, dấu chấm hỏi là các ký tự giữ chỗ, và bind_param liên kết an toàn các giá trị tên và email. Cơ sở dữ liệu xử lý chúng hoàn toàn như dữ liệu, đó là lý do tại sao các câu lệnh được chuẩn bị sẵn, có sẵn trong cả mysqli và PDO, là cách được khuyến nghị để chạy bất kỳ truy vấn nào sử dụng dữ liệu đầu vào của người dùng.

Đối tượng truy cập dữ liệu PHP (PDO)

PDO là một lớp cho phép chúng ta thao tác với các công cụ cơ sở dữ liệu khác nhau, chẳng hạn như... MySQL, PostgreSQLvà MS SQL Server sử dụng cùng một giao diện.

Mã bên dưới hiển thị phương thức truy cập cơ sở dữ liệu bằng đối tượng PDO.

Lưu ý: đoạn mã dưới đây giả định bạn đã có kiến ​​thức về ngôn ngữ SQL, mảng, xử lý ngoại lệ và vòng lặp foreach.

<?php
try {
$pdo = new PDO("mysql:host=localhost;dbname=my_personal_contacts", 'root', 'melody');

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->exec('SET NAMES "utf8"');

$sql_stmt = "SELECT * FROM `my_contacts`";
$result = $pdo->query($sql_stmt);
$result->setFetchMode(PDO::FETCH_ASSOC);
$data = array();
foreach ($result as $row) {
$data[] = $row;
}
print_r($data);
}
catch (PDOException $e) {
echo $e->getMessage();
}
?>

ĐÂY,

  • “try{…}catch{…}” là khối xử lý ngoại lệ.
  • “$pdo = new PDO(“mysql…” tạo một thể hiện của đối tượng PDO và truyền vào trình điều khiển cơ sở dữ liệu, tên máy chủ và cơ sở dữ liệu, ID người dùng và mật khẩu.
  • “$pdo->setAttribute…” thiết lập chế độ lỗi của PDO thành ném ngoại lệ.
  • “$pdo->exec('SET NAMES…' thiết lập định dạng mã hóa

Truy cập dữ liệu ODBC PHP

ODBC là viết tắt của Open Database Connectivity (Kết nối cơ sở dữ liệu mở). Nó có cú pháp cơ bản như sau.

<?php
$conn = odbc_connect($dsn, $user_name, $password);
?>

ĐÂY,

  • “odbc_connect” là một hàm tích hợp sẵn của PHP.
  • “$dsn” là tên nguồn dữ liệu ODBC.
  • “$user_name” là tùy chọn và được sử dụng cho tên người dùng ODBC.
  • Tham số “$password” là tùy chọn và được sử dụng cho mật khẩu ODBC.

Ví dụ dưới đây giả định bạn đang sử dụng Windows và đã tạo một liên kết ODBC đến Northwind. Microsoft Truy cập cơ sở dữ liệu có tên northwind.

<?php
$dbh = odbc_connect('northwind', '', '');
if (!$dbh) {
exit("Connection Failed: " . $dbh);
}
$sql_stmt = "SELECT * FROM customers";
$result = odbc_exec($dbh, $sql_stmt);
if (!$result) {
exit("Error accessing records");
}
while (odbc_fetch_row($result)) {
$company_name = odbc_result($result, "CompanyName");
$contact_name = odbc_result($result, "ContactName");
echo "<b>Company Name (Contact Person):</b> $company_name ($contact_name) <br>";
}
odbc_close($dbh);
?>

Câu Hỏi Thường Gặp

mysqli chỉ hoạt động với MySQL và cung cấp cả kiểu lập trình theo thủ tục và theo đối tượng. PDO hoạt động với nhiều cơ sở dữ liệu thông qua một giao diện duy nhất và hỗ trợ các placeholder được đặt tên. Cả hai đều hỗ trợ các câu lệnh được chuẩn bị sẵn; PDO có tính di động cao hơn giữa các engine.

Không. Phần mở rộng mysql_* ban đầu đã bị loại bỏ trong PHP 7. Thay vào đó, hãy sử dụng mysqli hoặc PDO. Cả hai đều được duy trì tích cực, hỗ trợ các câu lệnh được chuẩn bị sẵn và bảo vệ chống lại các rủi ro tấn công injection của phần mở rộng cũ.

Bắt lỗi và hiển thị cho người dùng một thông báo chung chung trong khi ghi nhật ký chi tiết một cách riêng tư. Không hiển thị đầu ra của mysqli_error cho khách truy cập, vì điều đó có thể tiết lộ tên bảng và cấu trúc, những thông tin hữu ích cho kẻ tấn công.

Vâng. Hãy dán đoạn mã mysqli vào, và AI có thể viết lại nó bằng PDO, thay thế các truy vấn được nối chuỗi bằng các tham số ràng buộc, và thêm phần xử lý lỗi bằng try-catch. RevHãy xem các phần giữ chỗ và kiểm tra từng truy vấn sau đó.

Có. Hãy chia sẻ lỗi và mã kết nối của bạn, AI có thể phát hiện thông tin đăng nhập sai, máy chủ hoặc cổng không hợp lệ, cơ sở dữ liệu bị thiếu hoặc trình điều khiển bị vô hiệu hóa, sau đó đề xuất các thiết lập chính xác để bạn thử.

Tóm tắt bài viết này với: