欢迎大家光临我的个人官方网站。在dlf5.net工作室没上线之前,我把dlf5.net域名跳转到dlf5.com个人博客。
搜索
广告而之
标签
-
已屏蔽的垃圾评论
欢迎大家光临我的个人官方网站。在dlf5.net工作室没上线之前,我把dlf5.net域名跳转到dlf5.com个人博客。
1. Nginx配置
在nginx.conf的server {段添加类似如下代码:
Nginx.conf代码:
location / {
if (!-e $request_filename){
rewrite ^/(.*) /index.php last;
}
}
2. 在Yii的protected/conf/main.php去掉如下的注释
Php代码:
'urlManager'=>array(
'urlFormat'=>'path',
'rules'=>array(
'/'=>'/view',
'//'=>'/',
'/'=>'/',
),
),
抛开cookie使用session
PHP中SESSION不能跨页传递问题的解决办法
在PHP中使用过SESSION的朋友可能会碰到这么一个问题,SESSION变量不能跨页传递。这令我苦恼了好些日子,最终通过查资料思考并解决了这个问题。我认为,出现这个问题的原因有以下几点:
1、客户端禁用了cookie
2、浏览器出现问题,暂时无法存取cookie
3、php.ini中的session.use_trans_sid = 0或者编译时没有打开–enable-trans-sid选项
为什么会这样呢?下面我解释一下:
Session储存于服务器端(默认以文件方式存储session),根据客户端提供的session id来得到用户的文件,取得变量的值,session id可以使用客户端的Cookie或者Http1.1协议的Query_String(就是访问的URL的“?”后面的部分)来传送给服务器,然后服务器读取Session的目录……。也就是说,session id是取得存储在服务上的session变量的身份证。当代码session_start();运行的时候,就在服务器上产生了一个session文件,随之也产生了与之唯一对应的一个session id,定义session变量以一定形式存储在刚才产生的session文件中。通过session id,可以取出定义的变量。跨页后,为了使用session,你必须又执行session_start();将又会产生一个session文件,与之对应产生相应的session id,用这个session id是取不出前面提到的第一个session文件中的变量的,因为这个session id不是打开它的“钥匙”。如果在session_start();之前加代码session_id($session id);将不产生新的session文件,直接读取与这个id对应的session文件。
PHP中的session在默认情况下是使用客户端的Cookie来保存session id的,所以当客户端的cookie出现问题的时候就会影响session了。必须注意的是:session不一定必须依赖cookie,这也是session相比cookie的高明之处。当客户端的Cookie被禁用或出现问题时,PHP会自动把session id附着在URL中,这样再通过session id就能跨页使用session变量了。但这种附着也是有一定条件的,即“php.ini中的session.use_trans_sid = 1或者编译时打开打开了–enable-trans-sid选项”。
明白了以上的道理,现在我们来抛开cookie使用session,主要途径有三条:
1、设置php.ini中的session.use_trans_sid = 1或者编译时打开打开了–enable-trans-sid选项,让PHP自动跨页传递session id。
2、手动通过URL传值、隐藏表单传递session id。
3、用文件、数据库等形式保存session_id,在跨页过程中手动调用。
通过例子来说明吧:
s1.php
<?php
session_start();
$_SESSION['var1']=”中华人民共和国”;
$url=”<a href=”.”\”s2.php\”>下一页</a>”;
echo $url;
?>
s2.php
<?php
session_start();
echo ”传递的session变量var1的值为:”.$_SESSION['var1'];
?>
运行以上代码,在客户端cookie正常的情况下,应该可以在得到结果“中华人民共和国”。
现在你手动关闭客户端的cookie,再运行,可能得不到结果了吧。如果得不到结果,再“设置php.ini中的session.use_trans_sid = 1或者编译时打开打开了–enable-trans-sid选项”,又得到结果“中华人民共和国”
这也就是上面所说的途径1。
下面再说途径2:
修改的代码如下:
s1.php
<?php
session_start();
$_SESSION['var1']=”中华人民共和国”;
$sn = session_id();
$url=”<a href=”.”\”s2.php?s=”.$sn.”\”>下一页</a>”;
echo $url;
?>
s2.php
<?php
session_id($_GET['s']);
session_start();
echo ”传递的session变量var1的值为:”.$_SESSION['var1'];
?>
办法3还是通过例子来说明:
login.html
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>
<html>
<head>
<title>Login</title>
<meta http-equiv=”Content-Type” content=”text/html; charset=??????”>
</head>
<body>
请登录:
<form name=”login” method=”post” act
用户名:<input type=”text” name=”name”><br>
口 令:<input type=”password” name=”pass”><br>
<input type=”submit” value=”登录”>
</form>
</body>
</html>
mylogin1.php
<?php
$name=$_POST['name'];
$pass=$_POST['pass'];
if(!$name || !$pass) {
echo ”用户名或密码为空,请<a href=\”login.html\”>重新登录</a>”;
die();
}
if (!($name==”laogong” && $pass==”123″)) {
echo ”用户名或密码不正确,请<a href=\”login.html\”>重新登录</a>”;
die();
}
//注册用户
ob_start();
session_start();
$_SESSION['user']= $name;
$psid=session_id();
$fp=fopen(“e:\\tmp\\phpsid.txt”,”w+”);
fwrite($fp,$psid);
fclose($fp);
//身份验证成功,进行相关操作
echo “已登录<br>”;
echo “<a href=\”mylogin2.php\”>下一页</a>”;
?>
<?php
$fp=fopen(“e:\\tmp\\phpsid.txt”,”r”);
$sid=fread($fp,1024);
fclose($fp);
session_id($sid);
session_start();
if(isset($_SESSION['user']) && $_SESSION['user']=”laogong” ) {
echo ”已登录!”;
}
else {
//成功登录进行相关操作
echo “未登录,无权访问”;
echo “请<a href=\”login.html\”>登录</a>后浏览”;
die();
}
?>
同样请关闭cookie测试,用户名:laogong 密码:123 这是通过文件保存session id的,文件是:e:\tmp\phpsid.txt,请根据自己的系统决定文件名或路径。
至于用数据库的方法,我就不举例子了,与文件的方法类似。
总结一下,上面的方法有一个共同点,就是在前一页取得session id,然后想办法传到下一页,在下一页的session_start();代码之前加代码session_id(传过来的session id);
原文:http://hi.baidu.com/%D0%A1code/blog/item/3d36130b0f034ca32fddd47a.html
林锋博客:http://www.dlf5.com/
这是Yii CDbCriteria的一些笔记和常用用法:
原文:http://blog.sina.com.cn/s/blog_4291fcdb0100tg3r.html
查询本周记录
select * from ht_invoice_information where WEEKOFYEAR(create_date)=WEEKOFYEAR(NOW());
#查询上周记录
select * from ht_invoice_information where create_date>=date_add(now(),interval -(8 + weekday(now())) day)
and create_date< =date_add(now(),interval -(1 + weekday(now())) day);
#或者
select * from `ht_invoice_information` where WEEKOFYEAR(create_date)=WEEKOFYEAR(DATE_SUB(now(),INTERVAL 1 week));
#查询本月数据
select * from ht_invoice_information where MONTH(create_date)=MONTH(NOW()) and year(create_date)=year(now());
#查询上月数据
select * from ht_invoice_information where create_date<=last_day(date_add(now(),interval -1 MONTH))
and create_date>=DATE_FORMAT(concat(extract(year_month from date_add(now(),interval -1 MONTH)),’01′),’%Y-%m-%d’);
#或者
select * from `ht_invoice_information` where MONTH(create_date)=MONTH(DATE_SUB(NOW(),interval 1 month))
and year(create_date)=year(now());
#查询本季度数据
select * from `ht_invoice_information` where QUARTER(create_date)=QUARTER(now());
#查询上季度数据
select * from `ht_invoice_information` where QUARTER(create_date)=QUARTER(DATE_SUB(now(),interval 1 QUARTER));
#查询本年数据
select * from `ht_invoice_information` where YEAR(create_date)=YEAR(NOW());
#查询上年数据
select * from `ht_invoice_information` where year(create_date)=year(date_sub(now(),interval 1 year))
—————————————————————
$sql = “SELECT total_guest,total_user,active_guest,guest_new,active_user,login_user,visit_time FROM client_tool_detail WHERE visit_time > date_sub( now( ) , INTERVAL 32 DAY ) and app_id = $req_app_id “;
原文:http://wangqiaowqo.iteye.com/blog/1465970
最近写YII博客的存档日志portlet 或许会用到这个。记下来慢慢转化为YII的!
"select year(date),month(date),count(id) from Article Group by year(date),month(date) order by year(date) desc,month(date) desc"
Web开发是今后分布式程式开发的主流,通常的web开发都要涉及到与数据库打交道,客户端从服务器端读取通常都是以分页的形式来显示,一页一页的阅读起来既方便又美观。所以说写分页程序是web开发的一个重要组成部分,在这里,我们共同来研究分页程序的编写。
一、分页程序的原理
分页程序有两个非常重要的参数:每页显示几条记录($pagesize)和当前是第几页($page)。有了这两个参数就可以很方便的写出分页程序,我们以MySql数据库作为数据源,在MySQL里如果要想取出表内某段特定内容可以使用的T-SQL语句:select * from table limit offset,rows来实现。这里的offset是记录偏移量,它的计算方法是offset=$pagesize*($page-1),rows是要显示的记录条数,这里就是$page。也就是说select * from table limit 10,10这条语句的意思是取出表里从第11条记录开始的20条记录。
二、主要代码解析
$pagesize=10; //设置每一页显示的记录数
$conn=mysql_connect("localhost","root",""); //连接数据库
$rs=mysql_query("select count(*) from tb_product",$conn); //取得记录总数$rs
$myrow = mysql_fetch_array($rs);
$numrows=$myrow[0];
//计算总页数
$pages=intval($numrows/$pagesize);
//判断页数设置
if (isset($_GET['page'])){
$page=intval($_GET['page']);
}
else{
$page=1; //否则,设置为第一页
}
create table myTable (id int NOT NULL auto_increment,news_title varchar(50), news_cont text,add_time datetime,PRIMARY KEY(id))
四、完整代码
<html>
<head>
<title>php分页示例</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<?php
$conn=mysql_connect("localhost","root","");
//设定每一页显示的记录数
$pagesize=1;
mysql_select_db("mydata",$conn);
//取得记录总数$rs,计算总页数用
$rs=mysql_query("select count(*) from tb_product",$conn);
$myrow = mysql_fetch_array($rs);
$numrows=$myrow[0];
//计算总页数
$pages=intval($numrows/$pagesize);
if ($numrows%$pagesize)
$pages++;
//设置页数
if (isset($_GET['page'])){
$page=intval($_GET['page']);
}
else{
//设置为第一页
$page=1;
}
//计算记录偏移量
$offset=$pagesize*($page - 1);
//读取指定记录数
$rs=mysql_query("select * from myTable
order by id desc limit $offset,$pagesize",$conn);
if ($myrow = mysql_fetch_array($rs))
{
$i=0;
?>
<table border="0" width="80%">
<tr>
<td width="50%" bgcolor="#E0E0E0">
<p align="center">标题</td>
<td width="50%" bgcolor="#E0E0E0">
<p align="center">发布时间</td>
</tr>
<?php
do {
$i++;
?>
<tr>
<td width="50%"><?=$myrow["news_title"]?></td>
<td width="50%"><?=$myrow["news_cont"]?></td>
</tr>
<?php
}
while ($myrow = mysql_fetch_array($rs));
echo "</table>";
}
echo "<div align='center'>共有".$pages."页(".$page."/".$pages.")";
for ($i=1;$i< $page;$i++)
echo "<a href='fenye.php?page=".$i."'>[".$i ."]</a> ";
echo "[".$page."]";
for ($i=$page+1;$i<=$pages;$i++)
echo "<a href='fenye.php?page=".$i."'>[".$i ."]</a> ";
echo "</div>";
?>
</body>
</html>
本例代码在windows2000 server+php4.4.0+mysql5.0.16上运行正常。该示例显示的分页格式是[1][2][3]…这样形式。假如想显示成“首页 上一页 下一页 尾页”这样形式,请加入以下代码:
$first=1;
$prev=$page-1;
$next=$page+1;
$last=$pages;
if ($page > 1)
{
echo "<a href='fenye.php?page=".$first."'>首页</a> ";
echo "<a href='fenye.php?page=".$prev."'>上一页</a> ";
}
if ($page < $pages)
{
echo "<a href='fenye.php?page=".$next."'>下一页</a>
echo "<a href='fenye.php?page=".$last."'>尾页</a> ";
}
其实,写分页显示代码是很简单的,只要掌握了它的工作原理。原文:http://linux.chinaitlab.com/PHP/722000.html
林锋博客 http://www.dlf5.com
创建数据库
create databse 数据库名称;
显示MySQL中的数据库
show databases;
进入数据库
use 数据库名称;
显示数据库中的表
show tables;
显示表结构
desc 表名称;
批量执行sql脚本
\. d:\test.sql
备份数据库,可以到命令行下,执行如下命令
mysqldump –u root –p drp>d:\drp.sql
恢复数据
source d:\drp.sql
注意乱码问题,my.ini文件
第一招、mysql服务的启动和停止
net stop mysql
net start mysql
第二招、登陆mysql
语法如下: mysql -u用户名 -p用户密码
键入命令mysql -uroot -p, 回车后提示你输入密码,输入12345,然后回车即可进入到mysql中了,mysql的提示符是:
mysql>
注意,如果是连接到另外的机器上,则需要加入一个参数-h机器IP
第三招、增加新用户
格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by “密码”
如,增加一个用户user1密码为password1,让其可以在本机上登录, 并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入mysql,然后键入以下命令:
grant select,insert,update,delete on *.* to user1@localhost Identified by “password1″;
如果希望该用户能够在任何机器上登陆mysql,则将localhost改为”%”。
如果你不想user1有密码,可以再打一个命令将密码去掉。
grant select,insert,update,delete on mydb.* to user1@localhost identified by “”;
第四招: 操作数据库
登录到mysql中,然后在mysql的提示符下运行下列命令,每个命令以分号结束。
1、 显示数据库列表。
show databases;
缺省有两个数据库:mysql和test。 mysql库存放着mysql的系统和用户权限信息,我们改密码和新增用户,实际上就是对这个库进行操作。
2、 显示库中的数据表:
use mysql;
show tables;
3、 显示数据表的结构:
describe 表名;
4、 建库与删库:
create database 库名;
drop database 库名;
5、 建表:
use 库名;
create table 表名(字段列表);
drop table 表名;
6、 清空表中记录:
delete from 表名;
7、 显示表中的记录:
select * from 表名;
第五招、导出和导入数据
1. 导出数据:
mysqldump –opt test > mysql.test
即将数据库test数据库导出到mysql.test文件,后者是一个文本文件
如:mysqldump -u root -p123456 –databases dbname > mysql.dbname
就是把数据库dbname导出到文件mysql.dbname中。
2. 导入数据:
mysqlimport -u root -p123456 < mysql.dbname。
不用解释了吧。
3. 将文本数据导入数据库:
文本数据的字段数据之间用tab键隔开。
use test;
load data local infile "文件名" into table 表名;
1:使用SHOW语句找出在服务器上当前存在什么数据库:
mysql> SHOW DATABASES;
2:2、创建一个数据库MYSQLDATA
mysql> CREATE DATABASE MYSQLDATA;
3:选择你所创建的数据库
mysql> USE MYSQLDATA; (按回车键出现Database changed 时说明操作成功!)
4:查看现在的数据库中存在什么表
mysql> SHOW TABLES;
5:创建一个数据库表
mysql> CREATE TABLE MYTABLE (name VARCHAR(20), sex CHAR(1));
6:显示表的结构:
mysql> DESCRIBE MYTABLE;
7:往表中加入记录
mysql> insert into MYTABLE values (“hyq”,”M”);
8:用文本方式将数据装入数据库表中(例如D:/mysql.txt)
mysql> LOAD DATA LOCAL INFILE “D:/mysql.txt” INTO TABLE MYTABLE;
9:导入.sql文件命令(例如D:/mysql.sql)
mysql>use database;
mysql>source d:/mysql.sql;
10:删除表
mysql>drop TABLE MYTABLE;
11:清空表
mysql>delete from MYTABLE;
12:更新表中数据
mysql>update MYTABLE set sex=”f” where name=’hyq’;
posted on 2006-01-10 16:21 happytian 阅读(6) 评论(0) 编辑 收藏 收藏至365Key
13:备份数据库
mysqldump -u root 库名>xxx.data
14:例2:连接到远程主机上的MYSQL
假设远程主机的IP为:110.110.110.110,用户名为root,密码为abcd123。则键入以下命令:
mysql -h110.110.110.110 -uroot -pabcd123
(注:u与root可以不用加空格,其它也一样)
3、退出MYSQL命令: exit (回车)
本人在百度文库下载的,来源不清!
最近用到mysql找了一些记下来!
转载:http://taoistwar.iteye.com/blog/376065
最全的mysql 查询语句(审精)
– 基本查询
select * from pet
– 列出指定的列
select name, owner form pet
– 直接进行算术运算,对字段起别名
select sin(1+2) as sin
–where 条件
select * from pet where (birth>'1980' and species='dog') or species='bird'
– 对null 的条件
select * from pet where sex is not null
– 所有名字第四位是n 的宠物信息是
select * from pet where owner like '___n%'
– 所有主人名叫gwen 或benny 的宠物
select * from pet where owner in ('gwen' , 'benny')
– 查询出生日期在90 年代是宠物,相当与 >= and < =
select * from pet where birth between ’1990′ and ’1999′
– 按主人姓名排序,相同的按宠物姓名倒序排列
select * from pet order by owner, name desc
– 查询性别为公的宠物,按生日倒序排列
select * from pet where sex='m' order by birth desc
–char_lenngth() 返回的字符的长度,length() 返回字节长度
SELECT owner,length(owner),char_length(owner) FROM pet p;
– 列出养有宠物狗的人名
select distinct owner from pet where species='dog'
– 用两种方法查询出所有狗和猫的名字、出生年份、出生月份
select name, left(birth,4) as year, mid(birth, 6, 2) as month from pet
where species='dog' or species='cat'
select name, year(birth) as year, month(birth) as month from pet
where species in('dog','cat')
– 查询所有名字中存在字母’e’ 的人,将他们养的宠物按类别、年龄排序
select name, species, birth
from pet
where owner like '%e%'
order by species,birth desc
– 数字函数
select round(2.345,2), truncate(2.345,2), mod(323,5)
– 日期函数
select now(), curdate(), curtime()
select adddate('2007-02-02', interval 31 day)
– 求出所有宠物的年龄
select name,birth,
truncate(datediff(now(),birth)/365,0) as age1,
year(now())-year(birth) - (dayofyear(birth)>dayofyear(now())) as age2
from pet
– 分组函数
select min(birth),max(birth),avg(birth),count(*),count(sex),
sum(birth)
from pet
– 每种宠物各有几只
select species,count(*)
from pet
group by species
– 查询年龄最大的宠物的信息
select * from pet where birth =
(select max(birth) from pet)
– 每年各出生了几只宠物
select year(birth), count(*) from pet group by year(birth)
– 鸟和猫的性别比例
select species, sex, count(*)
from pet
where species in ('cat','bird')
group by species, sex
– 各种宠物年龄的和
select species, sum(truncate(datediff(now(),birth)/365,0)) as SumAge
from pet
group by species
– 数量大于1 的宠物种类
select species, count(*) as c
from pet
group by species
having c>=2
– 基本双表关联
select a.name,a.species, a.sex,b.date, b.type, b.remark
from pet a,event b
where a.name = b.name
– 查询宠物产仔时的年龄
select a.name, a.species,
truncate(datediff(b.date,a.birth)/365,0) as age
from pet a,event b
where a.name = b.name and b.type='litter'
–90 年代出生的狗的事件列表
select a.name,birth,species,sex,date,type,remark
from pet a,event b
where a.name=b.name and birth between '1990' and '1999'
and species='dog'
– 活着的宠物按发生的事件类型分组,看各种事件发生的次数
select type, count(*)
from pet a, event b
where a.name=b.name and a.death is null
group by type
– 记录的事件数量超过1 条的宠物信息
select a.name,species,sex,count(*)
from pet a, event b
where a.name = b.name
group by b.name
having count(*)>=2
– 列出发生了两件事情的宠物的事件记录信息
select a.name,type,date,remark,b.species,b.sex,b.owner
from event a, pet b
where a.name=b.name and
b.name in
(
select name
from event
group by name
having count(*)=2
)
– 插入语句
insert into pet (name,species,birth)
values ('KKK','snake','2007-01-01');
insert into pet
values ('KK','Diane','cat','f',null,null);
insert into pet set name='k',owner='Benny'
– 更新语句
update pet set species='snake',sex='f',birth=now()
where name='k'
– 将事件表中生日的日期,更新到pet 表中相应宠物的birth 字段
update pet a
set birth = (
select date
from event b
where a.name=b.name and b.type='birthday'
)
where a.name in (
select name
from event
where type='birthday'
)
– 删除语句
delete from pet where name like 'k%'
DELIMITER $$
CREATE FUNCTION `func_get_split_string_total`(
f_string varchar(1000),f_delimiter varchar(5)
) RETURNS int(11)
BEGIN
return 1+(length(f_string) - length(replace(f_string,f_delimiter,'')));
END$$
DELIMITER ;
DELIMITER $$
CREATE FUNCTION `func_get_split_string`(
f_string varchar(1000),f_delimiter varchar(5),f_order int) RETURNS varchar(255) CHARSET utf8
BEGIN
declare result varchar(255) default '';
set result = reverse(substring_index(reverse(substring_index(f_string,f_delimiter,f_order)),f_delimiter,1));
return result;
END$$
DELIMITER ;
需要设置下参数:
SET GLOBAL log_bin_trust_function_creators = 1;
测试下:
CREATE TABLE "t" (
-> "t1" varchar(100) DEFAULT NULL,
-> "t2" int(11) DEFAULT NULL
-> ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
mysql> insert into t(t1,t2) values('a,b,c,d',1);
Query OK, 1 row affected (0.00 sec)
mysql> insert into t(t1,t2) values('a b c d',2);
Query OK, 1 row affected (0.00 sec)
mysql> select * from t;
+---------+------+
| t1 | t2 |
+---------+------+
| a,b,c,d | 1 |
| a b c d | 2 |
+---------+------+
2 rows in set (0.00 sec)
首先用func_get_split_string_total函数得到符合匹配的数量
mysql> select func_get_split_string_total(t1,',') from t where t2=1;
+-------------------------------------+
| func_get_split_string_total(t1,',') |
+-------------------------------------+
| 4 |
+-------------------------------------+
1 row in set (0.00 sec)
然后用func_get_split_string得出你想要的字符串
mysql> select func_get_split_string(t1,',',1) from t where t2=1;
+---------------------------------+
| func_get_split_string(t1,',',1) |
+---------------------------------+
| a |
+---------------------------------+
1 row in set (0.00 sec)
mysql> select func_get_split_string(t1,',',2) from t where t2=1;
+---------------------------------+
| func_get_split_string(t1,',',2) |
+---------------------------------+
| b |
+---------------------------------+
1 row in set (0.00 sec)
mysql> select func_get_split_string(t1,',',3) from t where t2=1;
+---------------------------------+
| func_get_split_string(t1,',',3) |
+---------------------------------+
| c |
+---------------------------------+
1 row in set (0.00 sec)
mysql> select func_get_split_string(t1,',',4) from t where t2=1;
+---------------------------------+
| func_get_split_string(t1,',',4) |
+---------------------------------+
| d |
+---------------------------------+
1 row in set (0.00 sec)
转载:http://blog.csdn.net/guzicheng/article/details/5874867