PHP 检测手机浏览器的代码

没有评论

2011 年 02 月 14 日 at 上午 9:00分类:PHP | WEB开发

<?php 
 
function is_mobile(){ 
 
    // returns true if one of the specified mobile browsers is detected 
 
    $regex_match="/(nokia|iphone|android|motorola|^mot\-|softbank|foma|docomo|kddi|up\.browser|up\.link|"; 
    $regex_match.="htc|dopod|blazer|netfront|helio|hosin|huawei|novarra|CoolPad|webos|techfaith|palmsource|"; 
    $regex_match.="blackberry|alcatel|amoi|ktouch|nexian|samsung|^sam\-|s[cg]h|^lge|ericsson|philips|sagem|wellcom|bunjalloo|maui|";     
    $regex_match.="symbian|smartphone|midp|wap|phone|windows ce|iemobile|^spice|^bird|^zte\-|longcos|pantech|gionee|^sie\-|portalmmm|"; 
    $regex_match.="jig\s browser|hiptop|^ucweb|^benq|haier|^lct|opera\s*mobi|opera\*mini|320x320|240x320|176x220"; 
    $regex_match.=")/i";         
    return isset($_SERVER['HTTP_X_WAP_PROFILE']) or isset($_SERVER['HTTP_PROFILE']) or preg_match($regex_match, strtolower($_SERVER['HTTP_USER_AGENT'])); 
} 
 
/* 
allow the user a way to force either the full or mobile versions of the site - use a GET parameter on requests: 
 
include likes to both versions of the site w/ the special force mode parameters, 'mobile' and 'full': 
 
<a href="http://blog.fbbin.com/?mobile">View Mobile Site</a> 
<a href="http://blog.fbbin.com/?full">View Full Site</a> 
 
Always check for 'mobile' or 'full' parameters before accounting for any User-Agent conditions: 
*/ 
 
if ($_GET['mobile']) { 
 $is_mobile = true; 
} 
  
if ($_GET['full']) { 
 $is_mobile = false; 
} 
if($is_mobile) { 
    //it's a mobile browser, do something 
    header("Location: http://blog.fbbin.com/mobile"); 
} else { 
    //it's not a mobile browser, do something else 
    header("Location: http://blog.fbbin.com/desktop"); 
    // or instead of a redirect, simply build html below 
} 
 
?> 

php对csv文件的常用操作集合

没有评论

2011 年 02 月 12 日 at 下午 9:31分类:PHP | WEB开发

1.CSV的读取操作

<?php
$file = fopen('D:/file.csv','r');
 while ($data = fgetcsv($file)) {//每次读取CSV里面的一行内容
print_r($data); //此为一个数组,要获得每一个数据,访问数组下标即可
}     fclose($file);    ?>

2.CSV的写入操作

<?php   
 $fp = fopen('d:/file/file.csv', 'w');   
 fputcsv($fp,array('aaa','bbb','cccc'));   
 fputcsv($fp,array('mmm','yyy','haha'));   //fputcsv可以用数组循环的方式进行实现   
 fclose($fp);   
 ?>  

3.输出CSV(下载功能)

<?php   
 header("Content-Type: text/csv");   
 header("Content-Disposition: attachment; filename=test.csv");   
 header('Cache-Control:must-revalidate,post-check=0,pre-check=0');   
 header('Expires:0');   
 header('Pragma:public');   
 echo "id,areaCode,areaName\n";   
 echo "1,cn,china\n";   
 echo "2,us,America\n";
?>

php中解析和生成逗号分隔的数据(CSV数据)

在php中你想把数据格式转化为逗号分隔的值(Comma-separted values, CSV),以便导入到电子表格或者数据库被其他php程序所使用。

首先我们考虑php生成CSV数据,使用fputcsv()函数生成一行CSV格式的数据。看以下的实例:

<?php
$strs = array(
 array( 'php中解析CSV数据', '2010-02-01′, 'fputcsv', 'jwork' ),
 array( 'php中生成CSV数据', '2010-02-01′, 'fgetcsv', 'jwork' ),
 array( 'php中使用流操作', '2010-02-01′, 'php://output', 'jwork' )
);
$fp = fopen( 'str.csv', 'w' ) or die( 'Can\'t open str.csv' );
foreach ( $strs as $str_line ) {
 if ( fputcsv( $fp, $str_line ) === false ) {
 die( 'Can\'t write CSV line.' );
 }
}
fclose( $fp ) or die( 'Can\'t close str.csv' );
?>

这个php代码写入文件str.csv的数据就是CSV数据。
如果想输出CSV格式的数据而不是将其写入到一个文件中,可以使用特殊的输出流–php://output
例: 将CSV数据存放在一个字符串中

<?php
$strs = array(
 array( 'php中解析CSV数据', '2010-02-01′, 'fputcsv', 'jwork' ),
 array( 'php中生成CSV数据', '2010-02-01′, 'fgetcsv', 'jwork' ),
 array( 'php中使用流操作', '2010-02-01′, 'php://output', 'jwork' )
);
ob_start();
$fp = fopen( 'php://output', 'w' ) or die( 'Can\'t open php://output' );
foreach( $strs as $str_line ) {
 if ( fputcsv( $fp, $str_line ) === false ) {
 die( 'Can\'t write CSV line' );
 }
}
fclose( $fp ) or die( 'Can\'t close php://output' );
$output = ob_get_contents();
ob_end_clean();
echo $output;   // $output为CSV数据的字符串
?>

在php中解析CSV数据,例如,一个由Excel或者数据库导出的文件,想把这些记录和字段抽取成一种可以在php处理的数据格式。
如果CSV数据包含在一个文件中,先用fopen()打开这个文件,然后使用fgetcsv()函数读取其中的数据。
例:php从文件中读取CSV数据

<?php
$fp = fopen( 'sample.csv', 'r' ) or die( 'Can\'t open file' );
// 二维数组 第一维表示每行数据 第二维表示每行中每个字段的值
$arr = array();
while ( $csv_line = fgetcsv( $fp ) ) {
 $arr_tmp = array();
 for( $i = 0; $i < count( $csv_line ); $i++ ) {
 $arr_tmp[$i] = $csv_line[$i];
 }
 array_push( $arr, $arr_tmp );
}
print_r( $arr );
?>

在PHP4中,必须为fgetcsv()提供第二个参数,这个参数是一个大于CSV文件中最大一个行长度的值(行尾的空白符计算在内)。在PHP5中,这个表示行长度的参数变成了可选择的。如果不指定这个参数,fgetcsv()函数会度取一整行的数据(在PHP5.0.4及以后的版本中,将此参数设置为0也会达到同样的效果)。当平均的行长度超过8192字节时,如果你指定了一个明确的行长度,而不是让PHP自己去计算的话,那么PHP程序运行速度会加快。

fgetcsv()函数的第三个参数可以用户替代逗号作为数据的分隔符。不过使用其他的分隔符会令CSV格式作为表列数据交换的一种简便途径的效果稍微打一些折扣。

不要试图绕过fgetcsv()函数,只用读取一行然后使用explode()按逗号进行解析。CSV的实际情况要比这种方式能够处理的格式更复杂,比如说某些字段值中包含逗号直接量,不应该将字段中包含的逗号当成是字段的分隔符。使用fgetcsv()可以保证你和你的PHP程序避免这些不明显的错误。

如何创建一个CSV文件

方法1 – 使用HTTP头

至于在Word和Excel,您需要添加头信息到PHP脚本的例子。

下面的代码片断创建一个指定的表包括其列名CSV文件。然后会提示用户下载此文件。

<?php
$table = 'table_name';
$outstr = NULL;
header("Content-Type: application/csv");
header("Content-Disposition: attachment;Filename=cars-models.csv");
$conn = mysql教程_connect("localhost", "mysql_user", "mysql_password");
mysql_select_db("db",$conn);
// Query database to get column names  
$result = mysql_query("show columns from $table",$conn);
// Write column names
while($row = mysql_fetch_array($result)){
 $outstr.= $row['Field'].',';
}  
$outstr = substr($outstr, 0, -1)."n";
// Query database to get data
$result = mysql_query("select * from $table",$conn);
// Write data rows
while ($row = mysql_fetch_assoc($result)) {
 $outstr.= join(',', $row)."n";
}
echo $outstr;
mysql_close($conn);
?>

方法2 - 使用fputcsv()

在fputcsv()函数格式作为CSV行并将其写入一个打开的文件。欲了解更多信息,看

一看http://php.net/manual/en/function.fputcsv.php看看。

下面的代码片断创建一个指定表的列名,包括CSV文件,并将其发送到浏览器。
[code]
<?php 
$table = 'table_name';
$filename = tempnam(sys_get_temp_dir(), "csv");
$conn = mysql_connect("localhost", "mysql_user", "mysql_password");
mysql_select_db("db",$conn);
$file = fopen($filename,"w");
// Write column names
$result = mysql_query("show columns from $table",$conn);
for ($i = 0; $i < mysql_num_rows($result); $i++) {
 $colArray[$i] = mysql_fetch_assoc($result);
 $fieldArray[$i] = $colArray[$i]['Field'];
}
fputcsv($file,$fieldArray);
// Write data rows
$result = mysql_query("select * from $table",$conn);
for ($i = 0; $i < mysql_num_rows($result); $i++) {
 $dataArray[$i] = mysql_fetch_assoc($result);
}
foreach ($dataArray as $line) {
 fputcsv($file,$line);
}
fclose($file);
header("Content-Type: application/csv");
header("Content-Disposition: attachment;Filename=cars-models.csv");
// send file to browser
readfile($filename);
unlink($filename);
?>

[/code]

一个PHP缓存类

没有评论

2011 年 02 月 11 日 at 下午 2:06分类:PHP | 乱七八糟

cache.inc.php:

<?php
 
class Cache {
   /**
    * $dir : 缓存文件存放目录
    * $lifetime : 缓存文件有效期,单位为秒
    * $cacheid : 缓存文件路径,包含文件名
    * $ext : 缓存文件扩展名(可以不用),这里使用是为了查看文件方便
   */
   private $dir;
   private $lifetime;
   private $cacheid;
   private $ext;
   /**
    * 析构函数,检查缓存目录是否有效,默认赋值
   */
   function __construct($dir='',$lifetime=1800) {
       if ($this->dir_isvalid($dir)) {
           $this->dir = $dir;
           $this->lifetime = $lifetime;
           $this->ext = '.Php';
           $this->cacheid = $this->getcacheid();
       }
   }
   /**
    * 检查缓存是否有效
   */
   private function isvalid() {
       if (!file_exists($this->cacheid)) return false;
       if (!(@$mtime = filemtime($this->cacheid))) return false;
       if (mktime() - $mtime > $this->lifetime) return false;
       return true;
   }
   /**
    * 写入缓存
    * $mode == 0 , 以浏览器缓存的方式取得页面内容
    * $mode == 1 , 以直接赋值(通过$content参数接收)的方式取得页面内容
    * $mode == 2 , 以本地读取(fopen ile_get_contents)的方式取得页面内容(似乎这种方式没什么必要)
   */
   public function write($mode=0,$content='') {
       switch ($mode) {
           case 0:
               $content = ob_get_contents();
               break;
           default:
               break;
       }
       ob_end_flush();
       try {
           file_put_contents($this->cacheid,$content);
       }
       catch (Exception $e) {
           $this->error('写入缓存失败!请检查目录权限!');
       }
   }
   /**
    * 加载缓存
    * exit() 载入缓存后终止原页面程序的执行,缓存无效则运行原页面程序生成缓存
    * ob_start() 开启浏览器缓存用于在页面结尾处取得页面内容
   */
   public function load() {
       if ($this->isvalid()) {
           echo "<span style='display:none;'>This is Cache.</span> ";
           //以下两种方式,哪种方式好?????
           require_once($this->cacheid);
           //echo file_get_contents($this->cacheid);
           exit();
       }
       else {
           ob_start();
       }
   }
   /**
    * 清除缓存
   */
   public function clean() {
       try {
           unlink($this->cacheid);
       }
       catch (Exception $e) {
           $this->error('清除缓存文件失败!请检查目录权限!');
       }
   }
   /**
    * 取得缓存文件路径
   */
   private function getcacheid() {
       return $this->dir.md5($this->geturl()).$this->ext;
   }
   /**
    * 检查目录是否存在或是否可创建
    */
   private function dir_isvalid($dir) {
       if (is_dir($dir)) return true;
       try {
           mkdir($dir,0777);
       }
       catch (Exception $e) {
             $this->error('所设定缓存目录不存在并且创建失败!请检查目录权限!');
             return false;            
       }
       return true;
   }
   /**
    * 取得当前页面完整url
   */
   private function geturl() {
       $url = '';
       if (isset($_SERVER['REQUEST_URI'])) {
           $url = $_SERVER['REQUEST_URI'];
       }
       else {
           $url = $_SERVER['Php_SELF'];
           $url .= empty($_SERVER['QUERY_STRING'])?'':'?'.$_SERVER['QUERY_STRING'];
       }
       return $url;
   }
   /**
    * 输出错误信息
   */
   private function error($str) {
       echo '<div style="color:red;">'.$str.'</div>';
   }
}
?>
 

demo.php:

<?php
/*
* 可自由转载使用,请保留版权信息,谢谢使用!
* Class Name : Cache (For Php5)
* Version : 1.0
* Description : 动态缓存类,用于控制页面自动生成缓存、调用缓存、更新缓存、删除缓存.
* Author : jiangjun8528@163.com,Junin
* Author Page : http://blog.csdn.Net/sdts/
* Last Modify : 2007-8-22
* Remark :
  1.此版本为Php5版本,本人暂没有写Php4的版本,如需要请自行参考修改(比较容易啦,不要那么懒嘛,呵呵!).
  2.此版本为utf-8编码,如果网站采用其它编码请自行转换,Windows系统用记事本打开另存为,选择相应编码即可(一般ANSI),Linux下请使用相应编辑软件或iconv命令行.
  3.拷贝粘贴的就不用管上面第2条了.
* 关于缓存的一点感想:
* 动态缓存和静态缓存的根本差别在于其是自动的,用户访问页面过程就是生成缓存、浏览缓存、更新缓存的过程,无需人工操作干预.
* 静态缓存指的就是生成静态页面,相关操作一般是在网站后台完成,需人工操作(也就是手动生成).
*/
 
/*
* 使用方法举例
------------------------------------Demo1-------------------------------------------
 
   require_once('cache.inc.php');
   $cachedir = './Cache/'; //设定缓存目录
   $cache = new Cache($cachedir,10); //省略参数即采用缺省设置, $cache = new Cache($cachedir);
   if ($_GET['cacheact'] != 'rewrite') //此处为一技巧,通过xx.Php?cacheact=rewrite更新缓存,以此类推,还可以设定一些其它操作
       $cache->load(); //装载缓存,缓存有效则不执行以下页面代码
   //页面代码开始
   echo date('H:i:s jS F');
   //页面代码结束
   $cache->write(); //首次运行或缓存过期,生成缓存
 
------------------------------------Demo2-------------------------------------------
 
   require_once('cache.inc.php');
   $cachedir = './Cache/'; //设定缓存目录
   $cache = new Cache($cachedir,10); //省略参数即采用缺省设置, $cache = new Cache($cachedir);
   if ($_GET['cacheact'] != 'rewrite') //此处为一技巧,通过xx.Php?cacheact=rewrite更新缓存,以此类推,还可以设定一些其它操作
       $cache->load(); //装载缓存,缓存有效则不执行以下页面代码
   //页面代码开始
   $content = date('H:i:s jS F');
   echo $content;
   //页面代码结束
   $cache->write(1,$content); //首次运行或缓存过期,生成缓存
 
------------------------------------Demo3-------------------------------------------
 
   require_once('cache.inc.php');
   define('CACHEENABLE',true);
   
   if (CACHEENABLE) {
       $cachedir = './Cache/'; //设定缓存目录
       $cache = new Cache($cachedir,10); //省略参数即采用缺省设置, $cache = new Cache($cachedir);
       if ($_GET['cacheact'] != 'rewrite') //此处为一技巧,通过xx.Php?cacheact=rewrite更新缓存,以此类推,还可以设定一些其它操作
           $cache->load(); //装载缓存,缓存有效则不执行以下页面代码    
   }
   //页面代码开始
   $content = date('H:i:s jS F');
   echo $content;
   //页面代码结束
   if (CACHEENABLE)
       $cache->write(1,$content); //首次运行或缓存过期,生成缓存
*/
?>

解决PHP输出文件为UTF-8乱码问题

没有评论

2011 年 02 月 11 日 at 上午 11:10分类:PHP | WEB开发

输出text文件:

<?php 

$f="Post.txt";

$p=iconv("ASCII","UTF-8","I love you.");

if(is_writable($f)){file_put_contents($f,chr(0xEF).chr(0xBB).chr(0xBF).$p);

}?>

人工指定输出BOM头即可。否则的话,需要有UTF8编码的字符,例如中文字符。英文则UTF8和ASCII是一样的。

解决excel输出文件:


$filename = "activity_{$tid}.csv";

ob_end_clean();
header('Content-Encoding: none');
header('Content-Type: '.('application/octet-stream'));
header('Content-Disposition: '.('attachment; ').'filename='.$filename);
header('Pragma: no-cache');
header('Expires: 0');
if(strtoupper($charset) == 'UTF-8') {
 echo chr(0xEF).chr(0xBB).chr(0xBF);
}

原理一样, 也是声明BOM头
————————————————————————–
或者是用函数mb_convert_encoding()来转换编码 如:

file_put_contents($file_name,mb_convert_encoding($content,'gbk','utf-8'),FILE_APPEND);

Mysql中Date_format函数按周、月统计总结

没有评论

2011 年 02 月 10 日 at 下午 6:00分类:MySQL | WEB开发

原文地址:http://julianna-only.javaeye.com/blog/603008
http://www.cnblogs.com/oec2003/archive/2009/06/04/1496541.html
详细:1、http://blog.csdn.net/fffy2366/archive/2010/08/09/5799104.aspx
2、http://ahzhangziqiang.blog.163.com/blog/static/441343162009112322049353/
项目中的统计报表作的很多,需求中有按周、月统计数据的。查看了Mysql的API,发现Date_format是格式化日期的,看了Date_format()的具体说明后就用这个函数按周统计,sql大致如下:
select DATE_FORMAT(check_date ,’%X-%V’) dates,avg(weight)/10000 weight from ho_body where user_id=295
and weight >0 and check_date between ’2009-02-24′ and ’2010-02-24′ group by dates
——————————————————————————————————
查出的结果为:
dates weight
2009-30 80.9
2009-31 80.425
2009-32 80.76666667
2009-33 80.75384615
2009-34 80.8
2009-35 79.88
2009-36 80.06
2009-37 79.875
2009-38 79.075
2009-39 79.26666667
2009-40 79.16666667
2009-41 78.875
2009-42 78.33333333
2009-43 78.77272727
2009-44 77.625
2009-45 77.825
2009-46 77.575
2009-47 77.45
2009-48 81.25
2009-49 76.5
2009-50 77.83333333
2009-52 79.8
2010-02 79.2

检查了一下,大致没有问题,然后又开始寻找如何按月统计,然后就看Date_format的语法,
%m表示数值,%M表示名称,看后很兴奋的试一下:
select distinct DATE_FORMAT(check_date ,’%X-%m’) c1,avg(weight)/10000 wei from ho_body where user_id=295
and weight >0 and check_date between ’2009-02-24′ and ’2009-10-31′ group by c1
——————————————————————————————————————
c1 wei
2009-08 80.66388889
2009-09 79.70555556
2009-10 78.83714286

然后测试这样计算的结果是否正确,经过测试,果然是没问题的,很有成就感。然后就用这个方法统计,拿取数据,然后将这些统计的结果作为数据集,用JfreeChart画图。后期测试时,发现画的统计图横轴日期有问题,时间范围为2009-02-24~2010-02-24时,图片中竟然多出一个2009年1月,并且在最右侧。我确信我是经过排序的,不可能2009年1月会在最右侧,之后再调试,竟然发现数据库中根本就没有09年1月的数据,更直观的错误是,以between ’2009-02-24′ and ’2009-10-31′ 条件,根本不可能出现2009-01。

然后将错误原因定位在sql语句上,执行这个语句,果然,原因就在这里:
select distinct DATE_FORMAT(check_date ,’%X-%m’) c1,avg(weight)/10000 wei from ho_body where user_id=295
and weight >0 and check_date between ’2009-02-24′ and ’2010-02-24′ group by c1
————————————————————————————————————————
c1 wei
2009-01 79.8
2009-08 80.66388889
2009-09 79.70555556
2009-10 78.83714286
2009-11 77.64285714
2009-12 78.75
2010-01 79.2
这个09年1月到底是哪里出来的,我先确定2009年1月是否有数据,结果测试最早的数据为2009-08-01,并没有1月的任何数据。既然最早的数据是8月,那么就测试这个多出来的2009-01是从哪里冒出来的。
我就用最笨的方法测试:
select distinct DATE_FORMAT(check_date ,’%X-%m’)c1 from ho_body where user_id=295 and check_date between ’2009-08-01′ and ’2009-08-31′ order by c1
————————————————————————————————————————
c1
2009-08
问题不在8月。继续测试:
select distinct DATE_FORMAT(check_date ,’%X-%m’)c1 from ho_body where user_id=295 and check_date between ’2009-9-01′ and ’2009-09-30′ order by c1
——————————————————————————————————————
c1
2009-09

……
……
直到2010年时,

select distinct DATE_FORMAT(check_date ,’%X-%m’)c1 from ho_body where user_id=295 and check_date between ’2010-01-01′ and ’2010-01-31′ order by c1
————————————————————————————————————————
c1
2009-01
2010-01
问题就是2010年1月,并且,如果将条件改为between ’2010-01-02′ and ’2010-01-31′ 则不会多出2009-01。难道是Date_format函数有bug,在跨年时没有考虑正确,将2010年1月1日归为2009年的1月中?当然我也有怀疑过是我的sql语句有问题,仔细再看了看Date_format()的语法,
%X表示年,周日为一周第一天
%x表示年,周一为一周第一天
%M表示月,名称
%m表示月,数值,01形式
%V表示周,周日为第一天
%v表示周,周一为第一天
………..

看来看去,感觉没什么错误呀,感觉自己对这个研究的够清楚明白了,一定没有问题的。
mysql有bug的想法我坚持了一下午,在我和一个同事说这个bug的时候,老大听到了,问我具体怎么回事,我就给她讲解,特别奇怪的地方在于数据库根本没有09年1月的数据,用mysql中的Date_format的按月统计函数时,在跨年时有问题。老大也觉得这个问题不可思议,这时那个同事说,你怎么用X表示年呀,一般不都是有Y表示年吗?我还反驳说,这个没区别的呀,都是一样的,表示年嘛,4位的。。。。
后来和他争论之中,为了表明修改这个X,Y什么的没效果,我就改成了%Y-%m,结果却是2009-01没有了!!!!
怎么会这样????也太低级了吧,之前一直怀疑mysql的bug,竟然是这个原因?然后再仔细看Date_format()的语法,看后快晕过去了,这么低级的错误我怎么之前一直没有发现呢?
%M
月名
%m
月,数值(00-12)
%X
年,其中的星期日是周的第一天,4 位,与 %V 使用
%x
年,其中的星期一是周的第一天,4 位,与 %v 使用
%Y
年,4 位
%y
年,2 位

难道%X只能与%V一起用表示年-周,并且周日为一周开始,
%x与%v一起用,表示年-周,周一为一周开始?
再看到前面的
%V
周 (01-53) 星期日是一周的第一天,与 %X 使用
%v
周 (01-53) 星期一是一周的第一天,与 %x 使用
看来是这个意思了,我之前怎么就没有注意到这个特别之处呢?可能是当时作完以周统计,然后再写月统计时,一看m表示月,数值,就直接把Date_format(‘%X-%V’)改为Date_format(‘%X-%m’)了。再加上%Y年,4位,%m月,没有具体说明,所以一直没有发现,并且用%X-%m按月统计,测试了许多数据,发现年-月,数值全是正确的。结果在跨年的情况下有问题了。。。一般情况下我是会考虑跨年的情况的,比如在求一个日期属于这一年的第几周,在这个问题上,我测试2009-12-31,2010-01-01属于哪一周,2010-01-03是哪一周,发现之前的方法有bug,后来作了修正才正确。而这是用mysql函数统计,测试一些数据没问题就觉得ok了,根本没有想到这样写在跨年时有问题了。。。。

为了将这个问题彻底整理清楚,下面是我找到的详细解读:
Date_format可以使用的格式有:

mysql 按年度、季度、月度、周、日SQL统计查询

没有评论

2011 年 02 月 10 日 at 下午 5:57分类:MySQL | WEB开发

一、年度查询

查询 本年度的数据

SELECT *

FROM blog_article

WHERE year( FROM_UNIXTIME( BlogCreateTime ) ) = year( curdate( ))

二、查询季度数据

查询数据附带季度数

SELECT ArticleId, quarter( FROM_UNIXTIME( `BlogCreateTime` ) )

FROM `blog_article`

其他的同前面部分:查询 本季度的数据

SELECT *

FROM blog_article

WHERE quarter( FROM_UNIXTIME( BlogCreateTime ) ) = quarter( curdate( ))

三、查询月度数据

本月统计(MySQL)

select * from booking where month(booking_time) =

month(curdate()) and year(booking_time) = year(curdate())

本周统计(MySQL)

select * from spf_booking where month(booking_time) =

month(curdate()) and week(booking_time) = week(curdate())

四、时间段

N天内记录

WHERE TO_DAYS(NOW()) – TO_DAYS(时间字段) <= N 当天的记录 where date(时间字段)=date(now()) 或 where to_days(时间字段) = to_days(now()); 查询一周: select * from table where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(column_time); 查询一个月: select * from table where DATE_SUB(CURDATE(), INTERVAL INTERVAL 1 MONTH) <= date(column_time); 查询'06-03'到'07-08'这个时间段内所有过生日的会员: Select * From user Where DATE_FORMAT(birthday,'%m-%d') >= ’06-03′ and DATE_FORMAT(birthday,’%m-%d’)

<= ’07-08′; 统计一季度数据,表时间字段为:savetime group by concat(date_format(savetime, ‘%Y ‘),FLOOR((date_format(savetime, ‘%m ‘)+2)/3)) 或 select YEAR(savetime)*10+((MONTH(savetime)-1) DIV 3) +1,count(*) from yourTable group by YEAR(savetime)*10+((MONTH(savetime)-1) DIV 3) +1; 五、分组查询 1、年度分组 2、月度分组 3、先按年度分组,再按月度分组 4、按年月分组 SELECT count(ArticleId), date_format(FROM_UNIXTIME( `BlogCreateTime`),’%y%m’) sdate FROM `blog_article` group by sdate 结果: count( ArticleId ) sdate 17 0901 11 0902 5 0903 6 0904 2 0905 1 0907 12 0908 6 0909 11 0910 3 0911

PHP函数set_magic_quotes_runtime()的作用

没有评论

2011 年 02 月 09 日 at 下午 2:23分类:PHP | WEB开发

新手经常遇到的问题是特殊字符提交的时候提示数据库错误,今天给大家介绍一个set_magic_quotes_runtime函数,来帮助我们过滤里面的内容

php函数 set_magic_quotes_runtime(0); 可以修改php.ini中 magic_quotes_runtime boolean的设置当你的数据中有一些
\


这样的字符要写入到数据库里面,又想不被过滤掉的时候,它就很有用,会在这些字符前加上\

中国\地大物博”哈哈”

中国\\地大物博\”哈哈\”set_magic_quotes_runtime是用来设置PHP 环境配置的变量 magic_quotes_runtime 值。
0-关闭 1-打开

php程序中检测状态用get_magic_quotes_runtime,返回 0 表示关闭本功能;返回 1 表示本功能打开。若 magic_quotes_runtime 打开时,所有外部引入的数据库资料或者文件等等都会自动转为含有反斜线溢出字符的资料。

例如在用PHP导入数据库的时候就会用到。

php中的exec函数用法

没有评论

2011 年 02 月 09 日 at 上午 11:18分类:PHP | WEB开发

函数的原型:exec(string command,$ar,$status)如果status的值是1说明没运行程序,如果是0说明程序运行成功
其中的命令是指常见的linux命令;
如下:

<?php


exec( "mkdir   c:\\test ",$out); 

echo $out ? "执行成功" : "执行失败";

?>

更加详细的内容请见:http://topic.csdn.net/u/20070627/10/39bd28ed-05e7-41b1-984d-f205ee4672ac.html