Kết nối mysql dùng PDO tức là từ php, bạn thực hiện kết nối đến mysql bằng thư viện PDO – thư viện cho phép bạn thực hiện kết nối đến nhiều loại database khác nhau.
Chương trình PHP cung cấp cho bạn 3 thư viện để kết nối đến MYSQL. Đó là các thư viện MYSQL, MYSQLI, PDO . Thư viện MYSQL hiện đã lỗi thời và không còn dùng nữa. Thư viện MYSQLi có tốc độ cao trong khi PDO hỗ trợ bạn kết nối đến nhiều loại database. Bài biết này đề cập đến việc dùng PDO để kết nối. Còn sử dụng MYSQLi sẽ đề cập trong bài viết khác.
Tạo kết nối mysql dùng pdo
Để kết nối đến một database của mysql bằng pdo bạn thực hiện code theo gợi ý như sau:
<?php
$host = "localhost"; //địa chỉ mysql server sẽ kết nối đến
$dbname="php1_news"; //tên database sẽ kết nối đến
$username = "root"; //username để kết nối đến database
$password = ""; // mật khẩu để kết nối đến database
$conn = new PDO("mysql:host=$host; dbname=$dbname; charset=utf8", $username, $password); // kết nối đến database. $conn gọi là đối tượng kết nối.
?>
Lệnh new PDO ở trên trả về đối tượng gọi là kết nối hay đối tượng connection. Đây chính là cầu nối từ trang php của bạn đến database. Thông qua đối tượng connection, bạn có thể gửi đế mysql các câu lệnh sql cần thực thi.
Lấy dữ liệu từ mysql qua pdo
Khi đã tạo kết nối được đến database, bạn cần thực thi hàm query trong đối tượng kết nối để lấy dữ liệu.
Chạy hàm query lấy dữ liệu
Để lấy dữ liệu từ mysql qua pdo, bạn dùng hàm query của đối tượng connection. Hàm này trả về một đối tượng chứa các dòng dữ liệu từ mysql.
$sql = "...";
//Câu lệnh sql để lấy dữ liệu
$kq = $conn->query($sql); // $kq là đối tượng dữ liệu, chứa các dòng dữ liệu đổ về từ mysql
Chạy hàm fetch để trích trừng dòng dữ liệu thành array
Khi có được dữ liệu, bạn dùng hàm fetch để trích ra từng dòng dữ liệu (dòng được trích ra là một mảng) và hiện ra trang. Fetch nhiều lần để lấy nhiều dòng dữ liệu, mỗi lần gọi hàm fetch thì trích được một dòng.
Đếm số dòng dữ liệu lấy được từ database
Dùng hàm rowCount() trong đối tượng dữ liệu , bạn sẽ được số dòng dữ liệu.
$sql = "...";
$kq = $conn->query($sql); // $kq là đối tượng dữ liệu, chứa dữ liệu đổ về từ mysql
$sodong = $kq->rowCount(); //lấy số dòng dữ liệu
Ví dụ lấy dữ liệu từ database dùng pdo
Giả sử dữ liệu trong table theloai như sau:
Viết code lấy dữ liệu từ table theloai để hiện ra trang web, sắp xếp tăng dần theo thứ tự
<?php
$host = "localhost";
$dbname="php1_news";
$username = "root";
$password = "";
$conn = new PDO("mysql:host=$host; dbname=$dbname; charset=utf8", $username, $password); // thực hiện kết nối đến database
$sql = "SELECT idTL, TenTL FROM theloai WHERE AnHien=1 ORDER BY THuTu";
$kq = $conn->query($sql); // $kq là đối tượng chứa các dòng dữ liệu đổ về từ mysql
$row = $kq->fetch(); //trích 1 dòng vào biến $row, $row là 1 array mà các phần tử đánh theo chỉ số và theo key
print_r($row);echo "<br>";
$row = $kq->fetch(PDO::FETCH_ASSOC); //trích 1 dòng vào biến $row, $row là 1 array mà các phần tử đánh theo key
print_r($row); echo "<br>";
?>
Chèn, sửa xóa dữ liệu trong mysql qua pdo
Để chèn lấy dữ liệu từ mysql qua pdo, bạn dùng hàm exec của đối tượng connection. Hàm này trả về 1 số nguyên cho biết số dòng trong table đã thay đổi. Ví dụ:
<?php
$host = "localhost";
$dbname="php1_news";
$username = "root";
$password = "";
$conn = new PDO("mysql:host=$host; dbname=$dbname; charset=utf8", $username, $password);
// thực hiện kết nối đến database
$sql = "INSERT INTO theloai (TenTL, ThuTu, AnHien) VALUES ('SỐng đẹp', 21, 1)";
$kq = $conn->exec($sql);
?>
Lặp qua dữ liệu lấy từ database
Khi dùng hàm query, bạn sẽ được một đối tượng chứa các dòng dữ liệu từ database đổ về. Số lượng dữ liệu có thể rất nhiều, cho nên phải lặp để hiện hết các dòng ra trang. Cú pháp như sau:
foreach ($dulieutừdb as $motdong) {
// hiện các biến trong mảng $motdong
}
Ví dụ:
<?php
$host = "localhost";
$dbname="php1_news";
$username = "root";
$password = "";
$conn = new PDO("mysql:host=$host; dbname=$dbname; charset=utf8", $username, $password); // thực hiện kết nối đến database
$sql = "SELECT idTin, TieuDe, Ngay FROM tin WHERE AnHien=1 ORDER BY Ngay";
$kq = $conn->query($sql); // $kq là đối tượng chứa các dòng dữ liệu đổ về từ mysql
echo "<h4>Lấy được " , $kq->rowCount() , " dòng dữ liệu </h4>";
foreach ($kq as $row) {
echo "<p> <a href='#'>", $row['TieuDe'], "</p>";
}
?>
Phân trang dữ liệu lấy từ database
Dữ liệu lấy từ db có thể rất nhiều, cho nên phải “cắt khúc” ra, tức phân trang để user dễ đọc. Giả sử bạn cho mỗi trang là 5 dòng, và user muốn xem trang nào thì sẽ cho biết qua biến pagenum trong địa chỉ của trang, vậy thì code như sau:
<?php
$host = "localhost";
$dbname="php1_news";
$username = "root";
$password = "";
$conn = new PDO("mysql:host=$host; dbname=$dbname; charset=utf8", $username, $password); // thực hiện kết nối đến database
$pagesize= 5;
$pagenum = $_GET['pagenum'] + 0;
if ($pagenum<=0) $pagenum=1;
$startrow = ($pagenum-1)*$pagesize;
$sql = "SELECT idTin, TieuDe, Ngay FROM tin WHERE AnHien=1 ORDER BY Ngay LIMIT $startrow, $pagesize";
$kq = $conn->query($sql); // $kq là đối tượng chứa các dòng dữ liệu đổ về từ mysql
foreach ($kq as $row) {
echo "<p> <a href='#'>", $row['TieuDe'], "</p>";
}
?>
Các bài liên quan bạn nên đọc: Ôn tập database trong lập trình php