Khởi tạo Tablegateway
Nếu khi làm việc với một bảng dữ liệu, bạn có thể trực tiếp sử dung TableGateway để dễ dàng và nhanh chóng hơn. Để khởi tạo và sử dụng TableGateway bạn phải có đối tượng \Zend\Db\Adapter trước và chỉ ra tên bảng khi khởi tạo.
Ví dụ khởi tạo như sau:
$tablegateway= new TableGateway['tablename', $adapter];
Sau khi khởi tạo thì rất dễ dàng sử dụng các phương thức mà Tablegateway cung cấp để thao tác với một bảng dữ liệu. Nó cung cấp các phương thức sau:
- isInitialized[];
- initialize[];
- getTable[];
- getAdapter[];
- getColumns[];
- getFeatureSet[];
- getResultSetPrototype[];
- getSql[];
- select[$where = null];
- selectWith[Select $select];
- insert[$set];
- insertWith[Insert $insert];
- update[$set, $where = null];
- updateWith[Update $update];
- delete[$where];
- deleteWith[Delete $delete];
- getLastInsertValue[];
Sử dụng Tablegateway
Dùng để lấy các dòng dữ liệu của bảng, tham số của select là $where làm mảng điểu kiện hoặc đối tượng \Zend\Db\Sql\Where
use Zend\Db\TableGateway\TableGateway;
$projectTable = new TableGateway['project', $adapter];
$where = array['type' => 'PHP']; //Hoặc $where =new \Zend\Db\Sql\Where[]; $where->equalTo['type','PHP'];
$rowset = $projectTable->select[$where];
echo 'Projects of type PHP: ';
foreach [$rowset as $projectRow] {
echo $projectRow['name'] . PHP_EOL;
}
Hoặc bạn chỉ lấy 1 dòng dữ liệu
$artistTable = new TableGateway['artist', $adapter]; $rowset = $artistTable->select[array['id' => 2]]; $artistRow = $rowset->current[];
Với cách khởi tạo như trên dữ liệu xuất ra là các mảng mô tả dòng dữ liệu. Để tập hợp dữ liệu là một đối tượng do bạn tự định nghĩa thì có thể thiết lập thêm $resultSetPrototype khi khởi tạo như sau:
$resultSetPrototype = new ResultSet[];
$resultSetPrototype->setArrayObjectPrototype[new MyClass[]];
return new TableGateway['album', $dbAdapter, null, $resultSetPrototype];
Trong đó MyClass[] là lớp bạn định nghĩa.Trong
lớp đó phải có hàm exchangeArray
:
public function exchangeArray[$data]
{
//$this->fieldata = [!empty[$data['id']]] ? $data['id'] : null;
}
Các lệnh khác như delete, update, insert ... được sử dụng theo cách tương tự
Sử dụng Rowgateway
Rowgateway sử dụng để mô tả và thao tác đối với một dòng dữ liệu trong bảng.
Khởi tạo Rowgateway bạn cần chỉ ra Primarykey, Table của hàng, và Adapter để có thể cập nhật.
$rowgateway = new \Zend\Db\RowGateway\RowGateway[$primaryKeyColumn, $table, $adapter];
Sau đó có thể nạp dữ liệu vào Rowgateway từ mảng dữ liệu dòng bằng các hàm populate
, exchangeArray
.
Bạn truy
cập, thiết lập các trường dữ liệu bằng toán tử ->
ghi lại dữ liệu bằng hàm save
và xóa dòng dữ liệu bằng hàm delete
.
Ví dụ:
use Zend\Db\RowGateway\RowGateway; $resultSet = $adapter->query['SELECT * FROM `user` WHERE `id` = ?', array[2]]; $rowData = $resultSet->current[]->getArrayCopy[]; // row gateway $rowGateway = new RowGateway['id', 'my_table', $adapter]; $rowGateway->populate[$rowData, true]; $rowGateway->first_name = 'New Name'; $rowGateway->save[]; $rowGateway->delete[];
Lưu ý: Trong Tablegateway nếu khởi tạo bạn chỉ ra $features thích hợp nó sẽ tự động chuyển kết quả thành RowGateWay
use Zend\Db\TableGateway\Feature\RowGatewayFeature; use Zend\Db\TableGateway\TableGateway; $table = new TableGateway['artist', $adapter, new \Zend\Db\TableGateway\Feature\['id']]; $results = $table->select[array['id' => 2]]; $artistRow = $results->current[]; $artistRow->name = 'New Name'; $artistRow->save[];
Trong cơ sở dữ liệu Database sẽ chứa nhiều dữ liệu khác nhau. Nó sẽ chia thành các bảng [Table], trong bảng lại có các cột. Ví dụ như bạn sẽ tạo một bảng là “user” với các cột [row] bao gồm id [Bắt buộc], tên, năm sinh… Hoặc đơn giản khi thiết kế website bạn sẽ cần lấy và hiển thị dữ liệu từ Database bằng Php và Mysql show các bài viết ra ngoài. Bài viết này sẽ hướng dẫn tường tận cách thức hiển thị dữ liệu trong database lên màn hình bằng code PHP.
Làm thế nào để lấy dữ liệu từ Database trong PHP?
Trong bài viết Hướng dẫn tạo Database trong Phpmyadmin chúng ta đã biết cách tạo ra một Database. Tuy nhiên vẫn chưa có một thông tin gì cả. Vì vậy chúng ta phải chèn một thông tin nào đó vào.
Trước tiên bạn truy cập vào //localhost/phpmyadmin nhấp vào cơ sở dữ liệu là “data”
Bước 2: Tạo bảng là “users
”
CREATE TABLE users [ id INT[6] UNSIGNED AUTO_INCREMENT PRIMARY KEY, firstname VARCHAR[30] NOT NULL, lastname VARCHAR[30] NOT NULL, email VARCHAR[50], reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ]
Tiếp theo nhấp vào “users
“, trong bảng sẽ hiển thị các cột gồ
“id, firstname, lastname, email, reg_date”
Bầy giờ tiếp tục nhấp vào tab SQL
để thêm mã MySQL vào
INSERT INTO users [id, firstname, lastname, email] VALUES ['1', 'Le', 'Nghia', '[email protected]'];
Cuối cùng ấn nút Tạo
[Go] để hoàn tất.
Lưu ý: Cái id bạn có thể dùng hoặc bỏ đi cũng được. Mỗi một thành viên phải là một id khác nhau
Đối với các thành viên khác cũng làm tương tự
Bước 3: Lấy dữ liệu từ Database MySQL trong PHP
Bạn sẽ sử dụng đoạn code sau:
Và kết quả cuối cùng sau khi request dữ liệu từ MySQL như thế này:
Vậy còn với bài viết thì làm sao nhỉ?
Bài viết thì chúng ta cũng sẽ làm tương tự như trên.
Sẽ tạo ra một bảng đặt tên là posts bao gồm các cột là “id, title, content, date” bằng đoạn mã MySQL
CREATE TABLE posts [ id INT[6] UNSIGNED AUTO_INCREMENT PRIMARY KEY, title VARCHAR[100] NOT NULL, content VARCHAR[1000] NOT NULL, date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ]
Tiếp theo ấn vào posts
ở cột menu bên trái => Nhấp vào tab MySQL
INSERT INTO posts [title, content, date] VALUES ['Đây là đoạn văn tiêu đề', 'Đây là đoạn văn nội dung', ''];
Tiếp theo load nội dung ra lên màn hình trình duyệt bằng lênh PHP
Oke như vậy là xong rồi!.
Để load dữ liệu từ Database lên website chúng ta sẽ dùng tới lệnh SELECT… FROM… và dùng vòng lặp while.
Hi vọng với bài viết này bạn sẽ hiểu hơn về cách thức hoạt động của PHP và MySQL