当前位置:  编程技术>php
本页文章导读:
    ▪ThinkPHP3.1快速入门(3)查询语言      上一篇中我们掌握了基本的数据CURD方法,但更多的情况下面,由于业务逻辑的差异,CURD操作往往不是那么简单,尤其是复杂的业务逻辑下面,这也是 ActiveRecord模式的不足之处。ThinkPHP的.........
    ▪关于win8下wampserver登陆phpmyadmin403Forbidden的解决方案      相信对于新手php 开发者来说,wampserver一直用着都特别舒服,虽然有时候也会有一些问题,但是都很容易解决!问题是以前我们都是在windows XP或者win7下安装并运行的。随着win8系统的到来,wamp在win.........
    ▪php定时计划任务的实现原理      根据php手册简单介绍一些相关的知识:1.连接处理:在 PHP 内部,系统维护着连接状态,其状态有三种可能的情况:0 - NORMAL(正常)1 - ABORTED(异常退出)2 - TIMEOUT(超时)当 PHP 脚本正常地运.........

[1]ThinkPHP3.1快速入门(3)查询语言
    来源:    发布时间: 2013-10-15

上一篇中我们掌握了基本的数据CURD方法,但更多的情况下面,由于业务逻辑的差异,CURD操作往往不是那么简单,尤其是复杂的业务逻辑下面,这也是 ActiveRecord模式的不足之处。ThinkPHP的查询语言配合连贯操作可以很好解决复杂的业务逻辑需求,本篇我们就首先来深入了解下框架的查 询语言。

介绍

ThinkPHP内置了非常灵活的查询方法,可以快速的进行数据查询操作,查询条件可以用于读取、更新和删除等操作,主要涉及到 where方法等连贯操作即可,无论是采用什么数据库,你几乎采用一样的查询方法(个别数据库例如Mongo在表达式查询方面会有所差异),系统帮你解决 了不同数据库的差异性,因此我们把框架的这一查询方式称之为查询语言。查询语言也是ThinkPHP框架的ORM亮点,让查询操作更加简单易懂。下面来一 一讲解查询语言的内涵。

查询方式

ThinkPHP可以支持直接使用字符串作为查询条件,但是大多数情况推荐使用索引数组或者对象来作为查询条件,因为会更加安全。
一、使用字符串作为查询条件
    这是最传统的方式,但是安全性不高,例如在FormAction.class.php中的read方法中添加如下代码:

$User = M("User"); // 实例化User对象

        $result=$User->where('type=1 AND status=1')->select(); 

var_dump($result);

最后生成的SQL语句是

SELECT * FROM think_user WHERE type=1 AND status=1

采用字符串查询的时候,我们可以配合使用新版提供的字符串条件的安全预处理机制,暂且不再细说。

二、使用数组作为查询条件
    这种方式是最常用的查询方式,例如在FormAction.class.php的read方法中添加如下代码:

$User = M("User"); // 实例化User对象

        $condition['name'] = 'thinkphp';

        $condition['status'] = 1;

// 把查询条件传入查询方法

        $result=$User->where($condition)->select(); 

var_dump($result);

    最后生成的SQL语句是

SELECT * FROM think_user WHERE `name`='thinkphp' AND status=1

如果进行多字段查询,那么字段之间的默认逻辑关系是 逻辑与 AND,但是用下面的规则可以更改默认的逻辑判断,通过使用 _logic 定义查询逻辑:

    $User = M("User"); // 实例化User对象

        $condition['name'] = 'thinkphp';

        $condition['account'] = 'thinkphp';

        $condition['_logic'] = 'OR';

        // 把查询条件传入查询方法

        $result=$User->where($condition)->select(); 

var_dump($result);

    最后生成的SQL语句是

SELECT * FROM think_user WHERE `name`='thinkphp' OR `account`='thinkphp'

三、使用对象方式来查询
    这里以stdClass内置对象为例:

        $condition = new stdClass(); 

        $condition->name = 'thinkphp'; 

        $condition->status= 1; 

        $result=$User->where($condition)->select(); 

var_dump($result);

    最后生成的SQL语句和上面一样

SELECT * FROM think_user WHERE `name`='thinkphp' AND status=1

    使用对象方式查询和使用数组查询的效果是相同的,并且是可以互换的,大多数情况下,我们建议采用数组方式更加高效。

表达式查询

    上面的查询条件仅仅是一个简单的相等判断,可以使用查询表达式支持更多的SQL查询语法,也是ThinkPHP查询语言的精髓,查询表达式的使用格式:
$map['字段名'] = array('表达式','查询条件');
表达式不分大小写,支持的查询表达式有下面几种,分别表示的含义是:

表达式

含义

EQ

等于(=)

NEQ

不等于(<>)

GT

大于(>)

EGT

大于等于(>=)

LT

小于(<)

ELT

小于等于(<=)

LIKE

模糊查询

[NOT] BETWEEN


    
[2]关于win8下wampserver登陆phpmyadmin403Forbidden的解决方案
    来源:    发布时间: 2013-10-15

相信对于新手php 开发者来说,wampserver一直用着都特别舒服,虽然有时候也会有一些问题,但是都很容易解决!问题是以前我们都是在windows XP或者win7下安装并运行的。随着win8系统的到来,wamp在win8下运行怎么呢,今天我就遇到了个莫名奇妙的问题!
 wamp运行起来之后,登陆phpmyadmin提示403,原来也遇到过这些问题,于是修改apach的httpd.conf,将目录权限改为allow form all。重启竟然还是进不去。想呀想呀终于想到一个办法,用127.0.0.1代替localhost登陆,结果进去了!!!心情激动不已,但是为什么会这样呢,于是就在网站,php论坛里寻找答案,终于让我找到一篇文章:http://hi.baidu.com/mkr_mkr/item/7428f90dd3322c103b53ee68。如获至宝,按着上边的解决方案一步一步进行。结果还是不行!!!
 没办法,只能靠自己了!
为什么用127.0.0.1/phpmyadmin可以进而用localhost/phpadmin就不可以进呢?apach的目录权限改过了也不行?
我试着猜想:apach的目录权限是相对于apach服务器来说的,但是我们现在访问的是phpmyadmin,是不是这个目录也有自己的权限呢?
顺着这个猜想,打开phpmyadmin的别名目录发现真有一个<Directory >节点!而且权限设置为allow form 127.0.0.1 ,改为allow form all!
重启服务,登陆 ,成功!

虽然问题解决了~但是还有一个问题没想明白,为什么以前就没这种问题而在win8上却碰到这个问题呢?希望高手能给个解释!

本文链接


    
[3]php定时计划任务的实现原理
    来源:    发布时间: 2013-10-15

根据php手册简单介绍一些相关的知识:

1.连接处理:

在 PHP 内部,系统维护着连接状态,其状态有三种可能的情况:

0 - NORMAL(正常)
1 - ABORTED(异常退出)
2 - TIMEOUT(超时)

当 PHP 脚本正常地运行 NORMAL 状态时,连接为有效。当远程客户端中断连接时,ABORTED 状态的标记将会被打开。远程客户端连接的中断通常是由用户点击 STOP 按钮导致的。当连接时间超过 PHP 的时限时,TIMEOUT 状态的标记将被打开。

可以决定脚本是否需要在客户端中断连接时退出。有时候让脚本完整地运行会带来很多方便,即使没有远程浏览器接受脚本的输出。默认的情况是当远程客户端连接中断时脚本将会退出。该处理过程可由 php.ini 的 ignore_user_abort 或由 Apache .conf 设置中对应的"php_value ignore_user_abort"以及 ignore_user_abort() 函数来控制。如果没有告诉 PHP 忽略用户的中断,脚本将会被中断,除非通过 register_shutdown_function() 设置了关闭触发函数。通过该关闭触发函数,当远程用户点击 STOP 按钮后,脚本再次尝试输出数据时,PHP 将会检测到连接已被中断,并调用关闭触发函数。

脚本也有可能被内置的脚本计时器中断。默认的超时限制为 30 秒。这个值可以通过设置 php.ini 的 max_execution_time 或 Apache .conf 设置中对应的"php_value max_execution_time"参数或者 set_time_limit() 函数来更改。当计数器超时的时候,脚本将会类似于以上连接中断的情况退出,先前被注册过的关闭触发函数也将在这时被执行。在该关闭触发函数中,可以通过调用 connection_status() 函数来检查超时是否导致关闭触发函数被调用。如果超时导致了关闭触发函数的调用,该函数将返回 2。

需要注意的一点是 ABORTED 和 TIMEOUT 状态可以同时有效。这在告诉 PHP 忽略用户的退出操作时是可能的。PHP 将仍然注意用户已经中断了连接但脚本仍然在运行的情况。如果到了运行的时间限制,脚本将被退出,设置过的关闭触发函数也将被执行。在这时会发现函数 connection_status() 返回 3。

2.相关函数:

int ignore_user_abort ( [bool setting] )
This function sets whether a client disconnect should cause a script to be aborted. It will return the previous setting and can be called without an argument to not change the current setting and only return the current setting.

int connection_aborted ( void )
Returns TRUE if client disconnected.

int connection_status ( void )
Returns the connection status bitfield.

为了定时更新某一文件,需要程序自动运行,从网上搜到了两种方法:ignore_user_abort() 和crontab

ignore_user_abort()函数搭配set_time_limit(0)和sleep($interval)即可实现程序自动运行更新,下面是一个实例


ignore_user_abort(); //即使Client断开(如关掉浏览器),PHP脚本也可以继续执行.
set_time_limit(0); // 执行时间为无限制,php默认的执行时间是30秒,通过set_time_limit(0)可以让程序无限制的执行下去
$interval=60*5; // 每隔5分钟运行
do{
$fp = fopen('test.txt','a');
fwrite($fp,'test');
fclose($fp);
sleep($interval); // 等待5分钟
}while(true);

 



只要运行上面的页面,然后关掉,程序就会一直运行下去。


Linux 下有种更简单的方法,就是crontab命令

crontab命令的功能是在一定的时间间隔调度一些命令的执行。

crontab 使用方法: crontab [ -e | -l | -r ] 文件名 -e:编辑任务 -l:显示任务信息 -r:删除定时执行任务信息

crontab的格式:
*  *   *  *  *  Command
分 时 日 月 星期 要运行的命令

crontab的例子:

*/5 * * * *  lynx http://www.try2.org
每5分钟访问一次 www.try2.org

0 8 * * *  lynx http://www.try2.org
每天早上8点访问 www.try2.org

0 10 6 * 1-5 lynx http://www.try2.org
每个月的6号和每个礼拜的星期一到星期五的早上10点访问 www.try2.org

0 5 7 8 * lynx http://www.try2.org
8月7日早上5点访问 www.try2.org

上面几个特殊的意思:
"*"代表所有的取值范围内的数字,"/"代表每的意思,"*/5"表示每5个单位,"-"代表从某个数字到某个数字,","分开几个离散的数字。

原文:http://hi.baidu.com/andylu1988/item/9674d31406ed61008ebde4b6

本文链接


    
最新技术文章:
▪PHP函数microtime()时间戳的定义与用法
▪PHP单一入口之apache配置内容
▪PHP数组排序方法总结(收藏)
▪php数组排序方法大全(脚本学堂整理奉献)
▪php数组排序的几个函数(附实例)
▪php二维数组排序(实例)
▪php根据键值对二维数组排序的小例子
▪php验证码(附截图)
▪php数组长度的获取方法(三个实例)
▪php获取数组长度的方法举例
▪判断php数组维度(php数组长度)的方法
▪php获取图片的exif信息的示例代码
▪PHP 数组key长度对性能的影响实例分析
▪php函数指定默认值的方法示例
▪php提交表单到当前页面、提交表单后页面重定...
▪php四舍五入的三种实现方法
▪php获得数组长度(元素个数)的方法
▪php日期函数的简单示例代码
▪php数学函数的简单示例代码
▪php字符串函数的简单示例代码
▪php文件下载代码(多浏览器兼容、支持中文文...
▪php实现文件下载、支持中文文件名的示例代码...
▪php文件下载(防止中文文件名乱码)的示例代码
▪解决PHP文件下载时中文文件名乱码的问题
▪php数组去重(一维、二维数组去重)的简单示例
▪php小数点后取两位的三种实现方法
▪php Redis 队列服务的简单示例
▪PHP导出excel时数字变为科学计数的解决方法
▪PHP数组根据值获取Key的简单示例
▪php数组去重的函数代码示例
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3