SQLite PHP接口
在本章中,您将学习如何在PHP程序中使用SQLite。
安装
从PHP 5.3.0版本开始,默认情况下启用了SQLite3扩展。可以在编译时使用 --without-sqlite3 来禁用它。
Windows用户必须启用php_sqlite3.dll才能使用该扩展。自PHP 5.3.0版本以来,此DLL已包含在Windows版的PHP中。
有关详细的安装说明,请查看我们的PHP教程和其官方网站。
PHP接口API
以下是一些重要的PHP例程,可满足您从PHP程序中使用SQLite数据库的需求。如果您正在寻找更复杂的应用程序,可以查阅PHP官方文档。
序号 | API与描述 |
---|---|
1 | public void SQLite3::open ( 文件名, 标志, 加密密钥 ) 打开SQLite 3数据库。如果构建包含加密功能,它将尝试使用密钥。 如果文件名给出为 ‘:memory:’ ,SQLite3::open() 将在RAM中创建一个仅在会话期间存在的内存数据库。 如果文件名是实际设备文件名,SQLite3::open() 将尝试使用其值打开数据库文件。如果没有该名称的文件存在,则会创建一个新的数据库文件。 可选的标志用于决定如何打开SQLite数据库。默认情况下,open 使用 SQLITE3_OPEN_READWRITE | SQLITE3_OPEN_CREATE。 |
2 | public bool SQLite3::exec ( string $query ) 这个函数提供了一种快速、简单的方式来执行由 sql 参数提供的SQL命令。sql 参数可以包含多个SQL命令。这个函数用于在给定的数据库上执行没有结果的查询。 |
3 | public SQLite3Result SQLite3::query ( string $query ) 这个函数执行一个SQL查询,如果查询返回结果,则返回一个 SQLite3Result 对象。 |
4 | public int SQLite3::lastErrorCode ( void ) 这个函数返回最近一个失败的SQLite请求的数字结果代码。 |
5 | public string SQLite3::lastErrorMsg ( void ) 这个函数返回最近一个失败的SQLite请求的英文描述。 |
6 | public int SQLite3::changes ( void ) 这个函数返回最近一条SQL语句更新、插入或删除的数据库行数。 |
7 | public bool SQLite3::close ( void ) 这个函数关闭之前通过调用 SQLite3::open() 打开的数据库连接。 | 8 | public string SQLite3::escapeString ( string $value ) 这个函数返回已经过适当转义以安全地包含在SQL语句中的字符串。 |
连接数据库
以下PHP代码演示了如何连接到现有数据库。如果数据库不存在,将创建该数据库并返回一个数据库对象。
<?php
class MyDB extends SQLite3 {
function __construct() {
this->open('test.db');
}
}db = new MyDB();
if(!db) {
echodb->lastErrorMsg();
} else {
echo "Opened database successfully\n";
}
?>
现在,让我们运行上面的程序来创建我们的数据库 test.db 在当前目录中。您可以根据您的要求更改路径。如果成功创建数据库,将显示以下消息−
Open database successfully
创建表格
以下PHP程序将用于在先前创建的数据库中创建一个表格。
<?php
class MyDB extends SQLite3 {
function __construct() {
this->open('test.db');
}
}db = new MyDB();
if(!db) {
echodb->lastErrorMsg();
} else {
echo "Opened database successfully\n";
}
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){
echodb->lastErrorMsg();
} else {
echo "Table created successfully\n";
}
$db->close();
?>
当上述程序被执行时,它将在你的test.db中创建公司表,并显示以下信息-
Opened database successfully
Table created successfully
插入操作
以下 PHP 程序展示了如何在上面示例中创建的 COMPANY 表中创建记录。
<?php
class MyDB extends SQLite3 {
function __construct() {
this->open('test.db');
}
}db = new MyDB();
if(!db){
echodb->lastErrorMsg();
} else {
echo "Opened database successfully\n";
}
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) {
echodb->lastErrorMsg();
} else {
echo "Records created successfully\n";
}
$db->close();
?>
当上面的程序被执行时,它将在COMPANY表中创建给定的记录,并显示以下两行。
Opened database successfully
Records created successfully
SELECT操作
以下PHP程序显示了如何从上述示例中创建的COMPANY表中提取和显示记录:
<?php
class MyDB extends SQLite3 {
function __construct() {
this->open('test.db');
}
}db = new MyDB();
if(!db) {
echodb->lastErrorMsg();
} else {
echo "Opened database successfully\n";
}
sql =<<<EOF
SELECT * from COMPANY;
EOF;ret = db->query(sql);
while(row =ret->fetchArray(SQLITE3_ASSOC) ) {
echo "ID = ". row['ID'] . "\n";
echo "NAME = ".row['NAME'] ."\n";
echo "ADDRESS = ". row['ADDRESS'] ."\n";
echo "SALARY = ".row['SALARY'] ."\n\n";
}
echo "Operation done successfully\n";
$db->close();
?>
当上述程序被执行时,将会产生以下结果。
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
UPDATE操作
以下PHP代码展示了如何使用UPDATE语句来更新任意记录,然后从COMPANY表中获取并显示更新后的记录。
<?php
class MyDB extends SQLite3 {
function __construct() {
this->open('test.db');
}
}db = new MyDB();
if(!db) {
echodb->lastErrorMsg();
} else {
echo "Opened database successfully\n";
}
sql =<<<EOF
UPDATE COMPANY set SALARY = 25000.00 where ID=1;
EOF;ret = db->exec(sql);
if(!ret) {
echodb->lastErrorMsg();
} else {
echo db->changes(), " Record updated successfully\n";
}sql =<<<EOF
SELECT * from COMPANY;
EOF;
ret =db->query(sql);
while(row = ret->fetchArray(SQLITE3_ASSOC) ) {
echo "ID = ".row['ID'] . "\n";
echo "NAME = ". row['NAME'] ."\n";
echo "ADDRESS = ".row['ADDRESS'] ."\n";
echo "SALARY = ".row['SALARY'] ."\n\n";
}
echo "Operation done successfully\n";db->close();
?>
当执行上述程序时,将产生以下结果。
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
删除操作
以下PHP代码显示了如何使用DELETE语句删除任意记录,然后从COMPANY表中获取并显示剩余的记录。
<?php
class MyDB extends SQLite3 {
function __construct() {
this->open('test.db');
}
}db = new MyDB();
if(!db) {
echodb->lastErrorMsg();
} else {
echo "Opened database successfully\n";
}
sql =<<<EOF
DELETE from COMPANY where ID = 2;
EOF;ret = db->exec(sql);
if(!ret){
echodb->lastErrorMsg();
} else {
echo db->changes(), " Record deleted successfully\n";
}sql =<<<EOF
SELECT * from COMPANY;
EOF;
ret =db->query(sql);
while(row = ret->fetchArray(SQLITE3_ASSOC) ) {
echo "ID = ".row['ID'] . "\n";
echo "NAME = ". row['NAME'] ."\n";
echo "ADDRESS = ".row['ADDRESS'] ."\n";
echo "SALARY = ".row['SALARY'] ."\n\n";
}
echo "Operation done successfully\n";db->close();
?>
当以上程序被执行时,它将产生以下结果。
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