php+access实现limit查询

虽然切版一直致力于为网站建设公司提供优质的web前端外包开发服务,但是我们也是懂程序的,这一点鲜有人知道,只是我们放弃了二流的程序技术,更愿意把一流的前端开发技术服务更多的人群,关于程序,比如我们就为自己的pm项目管理系统采用了 php+access的冷门搭配开发出来了,其中碰到一个问题,就是access无法像 mysql一样可以limit查询,所以采用了一种另类但可行的方法。

Access实现limit类似的功能的方法这篇文章的内容如下:

Mysql数据库支持LIMIT语句,所以使得翻页易如反掌,比如我们可以这么写:

SELECT * FROM Doc WHERE docSort=‘Java’ LIMIT 0,30

表示从第1条开始取30条记录。但其他数据库都不支持这个语句,所以只能另辟蹊径了,下面就来介绍一下“掐头去尾”法。此方法主要是利用

了Access数据库的排序功能和TOP语句,我们都知道如果要显示前N条记录可以这样写:

SELECT TOP N * FROM Doc

这使用起来很方便。我们还可以扩展一下:

SELECT TOP N * FROM (SELECT TOP 2N * FROM Doc WHERE docSort=’Java’ ORDER BY id DESC) ORDER BY id ASC

到这里我想大家已经都明白了吧,子查询得到逆序排列的前2N条记录,然后把这2N条记录按正序排列得到前N条记录。OK了,这里的前

N条记录,实际上就是我们想要的第N到第2N条记录。下面是一个具体的例子:
注:其中的PageSize(分页的大小)和PageIndex(分页索引,初始假设为0)均为变量,请相应处理。
SELECT * FROM (
SELECT TOP [PageSize] * FROM (
SELECT TOP [PageSize * (PageIndex + 1)] * FROM Doc WHERE docSort=’Java’ ORDER BY id DESC
) ORDER BY id ASC
)ORDER BY id DESC

以上就是我们解决了这一个问题的思路,亲测可用。

切版- 切图网(qietu.com)旗下psd转html,前端外包的“切图客”团体。

转载于:https://my.oschina.net/u/3529908/blog/1573861

防止超强爬虫攻击网站需要采取一些措施,下面是一些PHP代码实现的建议: 1. 增加验证码:可以在需要防止爬虫攻击的页面中添加验证码,只有正确输入验证码才能访问页面。可以使用PHP中的GD库生成图片验证码。 2. 限制访问频率:可以设置一个访问频率的阈值,当某个IP在一段时间内的访问次数超过这个阈值时,就将其封禁一段时间。 3. User-Agent检测:爬虫通常会使用固定的User-Agent字符串,可以对请求的User-Agent进行检测,如果检测到是爬虫,则拒绝访问。 4. IP黑名单:对于已知的恶意IP,可以将其加入黑名单,拒绝其访问网站。 5. Referer检测:可以检测请求的Referer,如果请求的Referer为空或者不是来自本站,则拒绝访问。 下面是一些PHP代码实现的示例: 1. 验证码 ```php session_start(); $code = rand(1000,9999); $_SESSION['code'] = $code; $im = imagecreate(60, 20); $bg = imagecolorallocate($im, 255, 255, 255); $fg = imagecolorallocate($im, 0, 0, 0); imagestring($im, 5, 10, 3, $code, $fg); header("Cache-Control: no-cache, must-revalidate"); header('Content-type: image/png'); imagepng($im); imagedestroy($im); ``` 2. 限制访问频率 ```php $ip = $_SERVER['REMOTE_ADDR']; $time = time(); $interval = 60; // 限制访问频率的时间间隔,单位为秒 $limit = 10; // 限制访问频率的次数 $log_file = 'access.log'; // 记录访问日志的文件名 // 读取访问日志 $log = file_get_contents($log_file); $log = explode("\n", $log); // 统计访问次数 $count = 0; foreach ($log as $line) { if (!empty($line)) { list($ip, $time) = explode('|', $line); if ($ip == $ip && $time + $interval > time()) { $count++; } } } // 判断是否超过访问频率限制 if ($count > $limit) { // 记录黑名单 file_put_contents('blacklist.log', $ip . "\n", FILE_APPEND); // 返回错误信息 die('访问过于频繁,请稍后再试。'); } else { // 记录访问日志 file_put_contents($log_file, $ip . '|' . $time . "\n", FILE_APPEND); } ``` 3. User-Agent检测 ```php $user_agent = $_SERVER['HTTP_USER_AGENT']; if (stripos($user_agent, 'bot') !== false || stripos($user_agent, 'crawler') !== false) { // 返回错误信息 die('不允许爬虫访问该页面。'); } ``` 4. IP黑名单 ```php $blacklist = file('blacklist.log', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); $ip = $_SERVER['REMOTE_ADDR']; if (in_array($ip, $blacklist)) { // 返回错误信息 die('你的IP已被封禁。'); } ``` 5. Referer检测 ```php $referer = $_SERVER['HTTP_REFERER']; if (empty($referer) || strpos($referer, 'example.com') === false) { // 返回错误信息 die('非法请求。'); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值