14/08/2018, 11:56

Sử dụng SQLite với PHP

Cài đặt PHP 5.3.0 kích hoạt SQLite3 Extension theo mặc định. Để vô hiệu hóa nó, bạn sử dụng --without-sqlite3 tại compile time. Người dùng Windows phải kích hoạt php_sqlite3.dll để sử dụng Extension này. DLL này được bao trong các bản phân phối Windows của PHP, như của PHP 5.3.0. Để ...

Cài đặt

PHP 5.3.0 kích hoạt SQLite3 Extension theo mặc định. Để vô hiệu hóa nó, bạn sử dụng --without-sqlite3 tại compile time.

Người dùng Windows phải kích hoạt php_sqlite3.dll để sử dụng Extension này. DLL này được bao trong các bản phân phối Windows của PHP, như của PHP 5.3.0.

Để biết chi tiết cài đặt, bạn có thể vào Bài hướng dẫn PHP và Offical Website của nó.

PHP Interface APIs

Dưới đây là một số chương trình con quan trọng đủ để đáp ứng yêu cầu của bạn khi làm việc với SQLite Database từ chương trình PHP của bạn. Nếu bạn muốn tìm một ứng dụng tinh vi hơn, bạn có thể tìm nó trong PHP Documentation.

STTAPI & Miêu tả
1public void SQLite3::open ( filename, flags, encryption_key )

Mở một SQLite3 database. Nếu có mật mã hóa, thì nó sẽ sử dụng key để mở.

Nếu tham số filename là ':memory:', SQlite3_open() sẽ tạo một in-memory database trong RAM mà chỉ tồn tại trong suốt phiên đó.

Nếu filename không là tên file thiết bị thực sự, SQLite3_open() cố gắng mở một database file bởi sử dụng giá trị của nó. Nếu không có file nào tồn tại với tên đó, hàm SQLite3_open() sẽ tạo một database file mới bởi tên đó.

Các flags tùy ý được sử dụng để xác định cách để mở SQLite Database. Theo mặc định, hoạt động mở sử dụng SQLITE3_OPEN_READWRITE | SQLITE3_OPEN_CREATE.

2public bool SQLite3::exec ( string $query )

Chương trình con này cung cấp một cách thức nhanh và dễ dàng để thực thi các lệnh SQL được cung cấp bởi tham số sql mà có thể bao gồm nhiều hơn một lệnh SQL. Chương trình con này được sử dụng để thực thi một truy vấn không có kết quả với một Database đã cho

3public SQLite3Result SQLite3::query ( string $query )

Chương trình con này thực thi một truy vấn SQL, trả về một đối tượng SQLite3Result nếu query trả về kết quả

4public int SQLite3::lastErrorCode ( void )

Chương trình con này trả về kết quả dạng số là mã hóa của yêu cầu SQLite bị thất bại gần nhất

5public string SQLite3::lastErrorMsg ( void )

Chương trình con này trả về phần miêu tả tiếng Anh của yêu cầu SQLite bị thất bại gần nhất

6public int SQLite3::changes ( void )

Chương trình con này trả về số hàng trong Database mà đã được cập nhật hoặc được chèn hoặc bị xóa bởi lệnh SQL gần nhất

7public bool SQLite3::close ( void )

Chương trình con này đóng một kết nối Database đã được mở trước đó bởi một lời gọi tới SQLite3::open()

8public string SQLite3::escapeString ( string $value )

Chương trình con này trả về một chuỗi mà đã bị thoát một cách hợp lý để bảo đảm an toàn trong một lệnh SQL

Kết nối tới Database

Chương trình PHP sau minh họa cách kết nối tới Database đang tồn tại. Nếu Database đó không tồn tại, thì nó sẽ được tạo, và cuối cùng một đối tượng Database sẽ được trả về.

<?php
   class MyDB extends SQLite3
   {
      function __construct()
      {
         $this->open('test.db');
      }
   }
   $db = new MyDB();
   if(!$db){
      echo $db->lastErrorMsg();
   } else {
      echo "Opened database successfully
";
   }
?>

Bây giờ, biên dịch và chạy chương trình trên để tạo cơ sở dữ liệu test.db trong thư mục hiện tại. Bạn có thể thay đổi Path tùy theo yêu cầu của mình. Nếu cơ sở dữ liệu được tạo thành cong, nó sẽ thông báo như sau:

Open database successfully

Tạo một bảng

Chương trình PHP sau sẽ được sử dụng để tạo một bảng trong Database đã được tạo trước đó.

<?php
   class MyDB extends SQLite3
   {
      function __construct()
      {
         $this->open('test.db');
      }
   }
   $db = new MyDB();
   if(!$db){
      echo $db->lastErrorMsg();
   } else {
      echo "Opened database successfully
";
   }

   $sql =<<<EOF
      CREATE TABLE COMPANY
      (ID INT PRIMARY KEY     NOT NULL,
      NAME           TEXT    NOT NULL,
      AGE            INT     NOT NULL,
      ADDRESS        CHAR(50),
      SALARY         REAL);
EOF;

   $ret = $db->exec($sql);
   if(!$ret){
      echo $db->lastErrorMsg();
   } else {
      echo "Table created successfully
";
   }
   $db->close();
?>

Khi chương trình trên được biên dịch và thực thi, nó sẽ tạo bảng COMPANY trong test.db và nó sẽ thông báo:

Opened database successfully
Table created successfully

Hoạt động INSERT

Chương trình PHP sau minh họa cách chúng ta tạo các bản ghi trong bảng COMPANY đã tạo ở ví dụ trên:

<?php
   class MyDB extends SQLite3
   {
      function __construct()
      {
         $this->open('test.db');
      }
   }
   $db = new MyDB();
   if(!$db){
      echo $db->lastErrorMsg();
   } else {
      echo "Opened database successfully
";
   }

   $sql =<<<EOF
      INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
      VALUES (1, 'Paul', 32, 'California', 20000.00 );

      INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
      VALUES (2, 'Allen', 25, 'Texas', 15000.00 );

      INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
      VALUES (3, 'Teddy', 23, 'Norway', 20000.00 );

      INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
      VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 );
EOF;

   $ret = $db->exec($sql);
   if(!$ret){
      echo $db->lastErrorMsg();
   } else {
      echo "Records created successfully
";
   }
   $db->close();
?>

Chương trình PHP sau minh họa cách chúng ta tạo các bản ghi trong bảng COMPANY đã tạo ở ví dụ trên:

Opened database successfully
Records created successfully

Hoạt động SELECT

Chương trình PHP sau minh họa cách chúng ta lấy và hiển thị các bản ghi từ bảng COMPANY được tạo trong ví dụ trên:

<?php
   class MyDB extends SQLite3
   {
      function __construct()
      {
         $this->open('test.db');
      }
   }
   $db = new MyDB();
   if(!$db){
      echo $db->lastErrorMsg();
   } else {
      echo "Opened database successfully
";
   }

   $sql =<<<EOF
      SELECT * from COMPANY;
EOF;

   $ret = $db->query($sql);
   while($row = $ret->fetchArray(SQLITE3_ASSOC) ){
      echo "ID = ". $row['ID'] . "
";
      echo "NAME = ". $row['NAME'] ."
";
      echo "ADDRESS = ". $row['ADDRESS'] ."
";
      echo "SALARY =  ".$row['SALARY'] ."

";
   }
   echo "Operation done successfully
";
   $db->close();
?>

Khi chương trình trên được biên dịch và thực thi, nó sẽ cho kết quả:

Opened database successfully
ID = 1
NAME = Paul
ADDRESS = California
SALARY =  20000

ID = 2
NAME = Allen
ADDRESS = Texas
SALARY =  15000

ID = 3
NAME = Teddy
ADDRESS = Norway
SALARY =  20000

ID = 4
NAME = Mark
ADDRESS = Rich-Mond
SALARY =  65000

Operation done successfully

Hoạt động UPDATE

Chương trình PHP sau minh họa cách chúng ta sử dụng các lệnh UPDATE để cập nhật bất kỳ bản ghi nào và sau đó lấy và hiển thị các bản ghi đã được cập nhật từ bảng COMPANY:

<?php
   class MyDB extends SQLite3
   {
      function __construct()
      {
         $this->open('test.db');
      }
   }
   $db = new MyDB();
   if(!$db){
      echo $db->lastErrorMsg();
   } else {
      echo "Opened database successfully
";
   }
   $sql =<<<EOF
      UPDATE COMPANY set SALARY = 25000.00 where ID=1;
EOF;
   $ret = $db->exec($sql);
   if(!$ret){
      echo $db->lastErrorMsg();
   } else {
      echo $db->changes(), " Record updated successfully
";
   }

   $sql =<<<EOF
      SELECT * from COMPANY;
EOF;
   $ret = $db->query($sql);
   while($row = $ret->fetchArray(SQLITE3_ASSOC) ){
      echo "ID = ". $row['ID'] . "
";
      echo "NAME = ". $row['NAME'] ."
";
      echo "ADDRESS = ". $row['ADDRESS'] ."
";
      echo "SALARY =  ".$row['SALARY'] ."

";
   }
   echo "Operation done successfully
";
   $db->close();
?>

Khi chương trình trên được biên dịch và thực thi, nó sẽ cho kết quả:

Opened database successfully
1 Record updated successfully
ID = 1
NAME = Paul
ADDRESS = California
SALARY =  25000

ID = 2
NAME = Allen
ADDRESS = Texas
SALARY =  15000

ID = 3
NAME = Teddy
ADDRESS = Norway
SALARY =  20000

ID = 4
NAME = Mark
ADDRESS = Rich-Mond
SALARY =  65000

Operation done successfully

Hoạt động DELETE

Chương trình PHP sau minh họa cách chúng ta sử dụng các lệnh DELETE để xóa bất kỳ bản ghi nào và sau đó lấy và hiển thị các bản ghi còn lại từ bảng COMPANY:

<?php
   class MyDB extends SQLite3
   {
      function __construct()
      {
         $this->open('test.db');
      }
   }
   $db = new MyDB();
   if(!$db){
      echo $db->lastErrorMsg();
   } else {
      echo "Opened database successfully
";
   }
   $sql =<<<EOF
      DELETE from COMPANY where ID=2;
EOF;
   $ret = $db->exec($sql);
   if(!$ret){
     echo $db->lastErrorMsg();
   } else {
      echo $db->changes(), " Record deleted successfully
";
   }

   $sql =<<<EOF
      SELECT * from COMPANY;
EOF;
   $ret = $db->query($sql);
   while($row = $ret->fetchArray(SQLITE3_ASSOC) ){
      echo "ID = ". $row['ID'] . "
";
      echo "NAME = ". $row['NAME'] ."
";
      echo "ADDRESS = ". $row['ADDRESS'] ."
";
      echo "SALARY =  ".$row['SALARY'] ."

";
   }
   echo "Operation done successfully
";
   $db->close();
?>

Khi chương trình trên được biên dịch và thực thi, nó sẽ cho kết quả:

Opened database successfully
1 Record deleted successfully
ID = 1
NAME = Paul
ADDRESS = California
SALARY =  25000

ID = 3
NAME = Teddy
ADDRESS = Norway
SALARY =  20000

ID = 4
NAME = Mark
ADDRESS = Rich-Mond
SALARY =  65000

Operation done successfully

Follow fanpage của team https://www.facebook.com/vietjackteam/ hoặc facebook cá nhân Nguyễn Thanh Tuyền https://www.facebook.com/tuyen.vietjack để tiếp tục theo dõi các loạt bài mới nhất về Java,C,C++,Javascript,HTML,Python,Database,Mobile.... mới nhất của chúng tôi.

Các bài học SQLite phổ biến khác tại code24h:

0