🗣 Wd提问: php分页sqlite
🤖 Ai回答: 在PHP中使用SQLite实现分页功能,需要结合数据库查询、偏移量计算和分页导航。以下是完整的实现方案:
1、创建SQLite数据库和表
php
<?php
// 创建数据库连接
$db = new SQLite3('database.db');
// 创建示例表(如果不存在)
$db-exec(CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
email TEXT UNIQUE
));
// 插入示例数据(仅首次运行)
if ($db-querySingle(SELECT COUNT(*) FROM users) == 0) {
$db-exec(INSERT INTO users (name, email) VALUES
('张三', 'zhang@65.hk'),
('李四', 'li@65.hk'),
('王五', 'wang@65.hk'),
('赵六', 'zhao@65.hk'),
('钱七', 'qian@65.hk'),
('孙八', 'sun@65.hk'),
('周九', 'zhou@65.hk'),
('吴十', 'wu@65.hk'),
('郑十一', 'zheng@65.hk'),
('王十二', 'wang2@65.hk')
);
}
?
2、分页核心代码
php
<?php
// 数据库连接
$db = new SQLite3('database.db');
// 分页配置
$perPage = 3; // 每页显示条数
$page = isset($_GET['page']) ? max(1, (int)$_GET['page']) : 1; // 当前页码
$offset = ($page 1) * $perPage; // 计算偏移量
// 获取总记录数
$totalQuery = $db-query(SELECT COUNT(*) FROM users);
$totalRecords = $totalQuery-fetchArray()[0];
$totalPages = ceil($totalRecords / $perPage); // 总页数
// 获取当前页数据
$result = $db-query(SELECT * FROM users ORDER BY id LIMIT $perPage OFFSET $offset);
// 输出数据
echo <table border='1';
echo <tr<thID</th<th姓名</th<th邮箱</th</tr;
while ($row = $result-fetchArray(SQLITE3_ASSOC)) {
echo <tr;
echo <td{$row['id']}</td;
echo <td{$row['name']}</td;
echo <td{$row['email']}</td;
echo </tr;
}
echo </table;
// 分页导航
echo <div style='margin-top: 20px;';
// 上一页链接
if ($page 1) {
echo <a href='?page= 、($page 1) 、'上一页</a ;
}
// 页码链接
for ($i = 1; $i <= $totalPages; $i++) {
$active = $i == $page ? 'style=font-weight:bold;' : '';
echo <a href='?page=$i' $active$i</a ;
}
// 下一页链接
if ($page < $totalPages) {
echo <a href='?page= 、($page + 1) 、'下一页</a;
}
// 显示分页信息
echo </div;
echo <p第 {$page} 页 / 共 {$totalPages} 页 (总计 {$totalRecords} 条记录)</p;
$db-close();
?
3、关键点说明
1、分页逻辑:
`LIMIT $perPage` 控制每页显示条数
`OFFSET $offset` 跳过前面的记录
偏移量计算:`($page 1) * $perPage`
2、安全处理:
使用`max(1, (int)$_GET['page'])`防止页码为负数或非数字
SQLite查询直接使用参数化查询(本例简单未使用,复杂场景应添加)
3、分页导航:
上一页/下一页按钮
页码数字链接
当前页高亮显示
分页信息显示
4、性能优化:
使用`COUNT(*)`获取总数时避免全表扫描
大数据量时考虑添加索引
4、高级优化(可选)
1、添加索引提升性能:
sql
CREATE INDEX idx_users_name ON users(name);
2、使用预处理语句防止SQL注入:
php
$stmt = $db-prepare(SELECT * FROM users ORDER BY id LIMIT :limit OFFSET :offset);
$stmt-bindValue(':limit', $perPage, SQLITE3_INTEGER);
$stmt-bindValue(':offset', $offset, SQLITE3_INTEGER);
$result = $stmt-execute();
3、添加搜索功能:
php
// 在查询中添加WHERE条件
$search = isset($_GET['search']) ? $_GET['search'] : '';
$where = $search ? WHERE name LIKE '%$search%' OR email LIKE '%$search%' : '';
$totalQuery = $db-query(SELECT COUNT(*) FROM users $where);
$result = $db-query(SELECT * FROM users $where ORDER BY id LIMIT $perPage OFFSET $offset);
5、完整示例结构
project/
├── database.db (SQLite数据库文件)
├── index.php (主分页文件)
├── init.php (数据库初始化)
init.php(数据库初始化):
php
<?php
$db = new SQLite3('database.db');
$db-exec(CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
email TEXT UNIQUE
));
// 插入示例数据...
$db-close();
?
index.php(主文件):
php
<?php
require_once 'init.php';
// 分页核心代码(如上所示)...
?
6、测试方法
1、访问`index.php`查看第一页数据
2、点击页码或上一页/下一页测试分页功能
3、检查URL中的`?page=X`参数变化
4、验证分页信息显示是否正确
注意:SQLite文件权限需设置为可读写(`chmod 666 database.db`),实际生产环境应考虑更安全的数据存储方案。
📣 商家广告 :
👍
0
👎
IP地址: 139.70.193.242
搜索次数: 0
提问时间: 2025-11-11 05:04:14
🛒 域名购买 :
6.hn.cn 27.gs 26.gold 41.gold ftp.ink shusou.com.cn jjjg.cn chusou.cn wddd.com.cn 875.net.cn
❓️ 热门提问 :
域名虚拟主机 注册域名一般多少钱 笔记本电脑有主机吗 特价云服务器 机房层 查询域名所有者 家居商城源码定制 vps ubuntu安装mysql cn在域名中的含义 北京云主机 豌豆Ai站群搜索引擎系统
🌐 域名评估 :
ab.cq.cn vajc.cn kimi.vin vision2100.cn sf.hi.cn t-x.com.cn pujs.cn pp.ah.cn xx.chat s.hn.cn
⛏ 最新挖掘 :
凯里酸汤鱼 贵阳烤脑花 都匀毛尖茶 花溪牛肉粉 贵阳烤生蚝 贵阳烤豆腐 贵阳纸包鱼 贵阳特色菜
🖌 热门作画 :
🤝 关于我们:
豌豆Ai
域名
建站
站群
留痕
推广
评估
源码
开发Ai
工具
日记
价格
加盟
广告
流量
留言
联系
🗨 加入群聊 :
🔗 友情链接 :
谷哥seo
北京网站定制
ai提问
🧰 站长工具 :Ai工具 whois查询 搜索
📢 温馨提示 :本站所有问答由Ai自动创作,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。
👉 技术支持 :本站由豌豆Ai 提供技术支持,使用的最新版:《豌豆Ai站群搜索引擎系统 V.25.10.25》搭建本站。