下面整理了是一些在学习php mysql中我们一些常用的知识点,包括有分页,连接数据库及时登录与文件上会以的知识点,希望对各位有帮助。
代码如下 |
复制代码 |
<?php
$con = mysql_connect("localhost","root","222222");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
echo "成功"
//mysql_close($con); 关闭连接
//var_dump($row); 打印出来
//print_r(); 打印出来 没有上面功能强
-------------------------------------------
strlen("Hello world!"); //用于计算字符串的长度。
strpos("Hello world!","world"); //用于在字符串内检索一段字符串或一个字符。
-------------------------------------------
介绍数据库中常用字段类型
//整数型:TINYINT,SMALLINT,INT,BIGINT
//小数型:FLOAT,DOUBLE,DECIMAL(M,D)
//字符型:CHAR,VARCHAR
//日期型:DATETIME ,DATE,TIMESTAMP
//备注型:TINYTEXT ,TEXT ,LONGTEXT
//sql语句 大小写不敏感(系统的尽量大写)
CREATE TABLE `test` ( //需要把整理设置成utf8_general_ci
`id` int(10) NOT NULL auto_increment,
`uid` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL default '0',
`regdate` date NOT NULL,
`remark` text NULL,
PRIMARY KEY (`id`) //id为主键关键贞
)
//NOT NULL 不能为空 www.111cn.net
//auto_increment 自动累加
//varchar(10) default '0' 10个字符长度默认为0
-------------------------------------------
SELECT查询语句
//SELECT 查询字段 FROM 表名 WHERE 条件
查询字段 : 可以使用通配符 * ,字段名,字段别名
表名:数据库.表名,表名
常用条件 :=等于,<>不等于,in包含,not in 不包含,like匹配
BETWEEN在范围,not BETWEEN不在范围<,>
条件运算:and ,or ,()
//eg: SELECT id, uid FROM `test` WHERE 1;指定查询id uid
别名使用
//SELECT remark as r FROM `test` WHERE 1 别名使用 r 代替 remark
=等于
//SELECT * FROM `test` WHERE id=2; 查询id=2的
<>不等于
//SELECT * FROM `test` WHERE id<>2 查询id不等于2 的
in包含
//SELECT * FROM `test` WHERE id in(1,2,4);查询包含1,2,4的信息
not in 不包含
//SELECT * FROM `test` WHERE id not in (1,2,3);查询不包含1,2,3的信息
like匹配
//SELECT * FROM `test` WHERE `uid` like '%王%'; %是前后匹配,匹配到所有姓王的 `uid`是varchar 字符型要加上``
BETWEEN在范围
//SELECT * FROM `test` WHERE id BETWEEN 1 and 3 查询1-3这个范围内所有的信息
not BETWEEN不在范围
//SELECT * FROM `test` WHERE id not BETWEEN 1 and 3 查询不在1-3这个范的信息
多条件
//SELECT * FROM `test` WHERE id=2 and `uid`='吕辉' 多个条件查询,查询id=2并且uid=吕辉 的信息
---------------------------------------------------------
注:以下三个方法语句顺序不能乱; group by - order by - limit
分组语句:group by 字段(这里不需要条件语句)
//SELECT * FROM `test` group by `remark`
排序语句:order by 字段 ,字段ASC(正序)/DESC(倒序)
//SELECT * FROM `test` order by `regdate` DESC 倒序查询最新注册的
//SELECT * FROM `test` order by `regdate` DESC , id ASC 注册日期倒序,id正序查询
指针查询:limit 初始值,结束值(这里不需要条件语句)
//SELECT * FROM `test` limit 0,3 查询0到3条信息
//SELECT * FROM `test` limit 4 (等同上,省略掉0,初始值省略)
---------------------------------------------------------
计算:
COUNT(*)统计函数
MAX(*)最大值函数
MIN(*)最小值函数
AVG(*)平均值函数
SUM(*)累计值函数(∑)
//SELECT MIN(id) FROM `test` WHERE 1 查询最小值的Id
---------------------------------------------------------
insert插入语句
//insert into 表名(字段...,...)values(值..,...);规范的
//insert into 表名values(值..,..);不推荐使用
eg:
//insert into test (`id`,`uid`,`regdate`,`remark`) values('','张三',now(),'工人') id是auto++的可省略,now()系统现在时间
//insert into test values('','李四',now(),'学生') 同样可以插入,但不推荐使用
Update更新语句(不需要FROM)
//UPDATE 表名 SET 字段 = 值 WHERE 条件 limit(可省略)
eg:
//update test set uid='php200' where id=6 更新id=6的uid=php200
Delete 删除语句(删除是无法恢复的)
//DELETE FROM 表名 WHERE 条件 limit(可省略)
eg:
delete FROM test WHERE id=3 删除id=3 的信息 (尽量少使用,)
-------------------------------------------------------------
其他常用Mysql函数介绍
mysql_num_rows() //用于计算查询结果中共多少条信息
//$sq = " SELECT * FROM messages order by id DESC "; //查找数据表并倒序
//$sque = mysql_query($sq);
//echo mysql_num_rows($sque);
mysql_insert_id //传回最后一次使用 INSERT 指令的 ID。
mysql_tablename //取得数据库名称
mysql_error //返回错误信息
mysql_close //关闭 MySQL 链接
----------------------------------------------------------
isset($views) //判断变量是否存在
function_exists() //判断函数是否存在
两种查询函数array / row区别
//mysql_fetch_row(result);(不常用)
//mysql_fetch_array($sque,MYSQL_ASSOC);(常用)
//以上二种需配合while($row=mysql_fetch_array($sque,MYSQL_ASSOC)){}循环使用才能输出数据库全部内容;
延时跳转
header("Refresh:5;url=login.php");
----------------------------------------------------------
str_relace(被替换的值,替换的值,被替换的内容)
$lin='ss sd df';
//str_relace(" "," ",$lin);替换空格
function htmtocode($con) {空格和换行替换成html标签
// $con=str_replace("n","<br>",str_replace(" "," ",$con));
// return $con;
}
------------------------------------------------------------
htmlspecialchars格式化html
//主要功能是将html格式化,防止在输出html时被浏览器执行;
//htmlspecialchars(所要格式化对象,定义单双引号,编码)
------------------------------------------------------------
setcookie("TEST","value",3600,"/dir",".domains.com",true);
//TEST cookie名
//value cookie值
//3600 保存时间
//dir cookie保存路径
//.domains.com 起效域名
//true https 发送
//注意:使用php cookie当场不能生效,需要刷新一次
----------------------------------
PHP会话Session的具体使用方法解析
//PHP会话Session与Cookie的最大不同之处是,其实存储在服务器端的,对于远程用户来说,
//是无法对PHP会话Session文件的内容进行任何修改的。
开始 PHP Session
//详细 http://www.w3school.com.cn/php/php_sessions.asp
session_start(); //1,启动必须在html标签前面
$_SESSION['views']=1;//2,设置
$_SESSION[''];//3,获取
unset($_SESSION['views']);//4,删除
session_destroy()//,彻底终结 将重置 session,您将失去所有已存储的 session 数据。
isset() //函数检测是否已设置 "views" 变量
//if(isset($_SESSION['views']))
file_exists("welcome.txt") //检测文件是否存在
------------------------------------------------------------
PHP+MYSQL分页原理
1.SQL语句中的limit用法
分页原理
//所谓分页显示,也就是将数据库中的结果集,分成一段一段来显示
需要的条件
//前10条记录:select*form table limit 0,10
//第11至20条记录:select * from table limit 10,10
//第21至30条记录:select * from table limit 20,10
公式:
(当前页数-1)*每页条数,每页条数
// select * from table limit($Page-1)*$PageSize,$PageSize
----------------------------------------------------------
parse_url()
//是将URL解析成为固定键值名称的数组和函数
---------------------------------------------
$_SERVER["REQUEST_URI"];
//REQUEST_URL的作用是取得当前URL,也就是除域名外后面的完整的地址路径;
eg:
// http://www.php100.com/home.php?id=22&cid=21
//echo $SERVER["REQUEST_URI"]
//结果为:/home.php?id=22&cid=21
--------------------------------------------------------
PHP上传原理及应用
1、FORM标签enctype属性
2、$_FILES 系统函数
3、move_uploaded_file函数
4、is_uploaded_file 函数
---------------------------------------------------------
fopen() 函数用于在 PHP 中打开文件。
//fopen("welcome.txt","r");
// 模式 描述
// r 只读。在文件的开头开始。
// r+ 读/写。在文件的开头开始。
// w 只写。打开并清空文件的内容;如果文件不存在,则创建新文件。
// w+ 读/写。打开并清空文件的内容;如果文件不存在,则创建新文件。
// a 追加。打开并向文件文件的末端进行写操作,如果文件不存在,则创建新文件。
// a+ 读/追加。通过向文件末端写内容,来保持文件内容。
// x 只写。创建新文件。如果文件已存在,则返回 FALSE。
// x+
// 读/写。创建新文件。如果文件已存在,则返回 FALSE 和一个错误。
// 注释:如果 fopen() 无法打开指定文件,则返回 0 (false)。
//如果 fopen() 不能打开指定的文件,下面的例子会生成一段消息:
//$file=fopen("welcome.txt","r") or exit("Unable to open file!");
fclose() 函数用于关闭打开的文件。
//$file = fopen("test.txt","r"); fclose($file);
feof() 函数检测是否已达到文件的末端 (EOF)。
在循环遍历未知长度的数据时,feof() 函数很有用。
//if (feof($file)) echo "End of file";
fgets() 函数用于从文件中逐行读取文件。
// $file = fopen("welcome.txt", "r") or exit("Unable to open file!");
// while(!feof($file))
// {
// echo fgets($file). "<br />";
// }
// fclose($file)
fgetc() 函数用于从文件逐字符地读取文件。
// $file=fopen("welcome.txt","r") or exit("Unable to open file!");
while (!feof($file))
// {
// echo fgetc($file);
// }
// fclose($file);
------------------------------------------------------
PHP 文件上传
// <form action="upload_file.php" method="post" enctype="multipart/form-data">
// <input type="file" name="file" id="file" />
// </form>
$_FILES["file"]["name"] - 被上传文件的名称
$_FILES["file"]["type"] - 被上传文件的类型
$_FILES["file"]["size"] - 被上传文件的大小,以字节计
$_FILES["file"]["tmp_name"] - 存储在服务器的文件的临时副本的名称
$_FILES["file"]["error"] - 由文件上传导致的错误代码
eg:
if ($_FILES["file"]["error"] > 0)
{
echo "Error: " . $_FILES["file"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Stored in: " . $_FILES["file"]["tmp_name"];
}
|
在php中像数组中添加元素比较常见的是array_push函数,即数组的入栈操作,但是这个函数是将元素添加到数组的末尾,如果需要将数组元素压入到数组的头部(即第一个元素)该如何操作呢?
使用php内置函数 array_unshift ,下面就将 array_unshift 这个函数的用法列举一下。
array_unshift
该函数的作用是在数组开头插入一个或多个元素。被加上的元素作为一个整体添加,这些添加的元素在数组中的顺序和在参数中的顺序一样。修改后的数组中所有的数值键名将修改为从零开始重新计数,所有的文字键名保持不变。该函数会返回操作后数组中元素的个数。
语法:int array_unshift ( array &$array ,mixed $var [,mixed $... ] )
例如:
代码如下 |
复制代码 |
<?php
$queue = array("111cn.net",".com");
array_unshift($queue,"apple","raspberry");
print_r($queue);
以上例程会输出:
Array
(
[0] => apple
[1] => raspberry
[2] => 111cn.net
[3] => .com
)
|
当然我们还可以直接使用其它的办法了,如创建一个数组重新给他赋值即可
今天我看到有朋友在问preg_replace和str_replace函数的区别在哪里,下面我就来给大家整理了一些关于这两个函数的使用技巧,希望文章来给你带来帮助哦。
str_replace可查找替换常规字符,
preg_replace可查找替换回车换行字符(\r\n)
preg_replace常用在
代码如下 |
复制代码 |
<meta name="description" content="<?php echo htmlspecialchars(utf_substr(preg_replace('/\r\n/','',str_replace(' ','',strip_tags($this->getDescription()))),400)) ?>">
|
内容的过滤,过滤回车换行(\r\n)等
把
代码如下 |
复制代码 |
<a href="/%E5%8A%A8%E4%BD%9C%E5%86%92%E9%99%A9_1.html1">首页</a> <a href="/%E5%8A%A8%E4%BD%9C%E5%86%92%E9%99%A9_1.html0" class="a1">上一页</a>
|
用str_replace函数和preg_replace函数替换成
代码如下 |
复制代码 |
<a href="/%E5%8A%A8%E4%BD%9C%E5%86%92%E9%99%A9_1.html">首页</a> <a href="/%E5%8A%A8%E4%BD%9C%E5%86%92%E9%99%A9_1.html" class="a1">上一页</a>
|
例子
代码如下 |
复制代码 |
$pages = $keyword_data_db->pages;
$pages = str_replace('?page=', '', $pages);
$pages = preg_replace('/_([0-9]+).html([0-9]+)/', '_$2.html', $pages);
$pages = str_replace('_0.html', '_1.html', $pages);
|
再看个比较例子
代码如下 |
复制代码 |
$str =
'111111110000000000000000000000000000000111000001000100010000010010000010010000010100000010
';
$str = str_repeat($str, 1);
$pattern1 = array('12345'=>'', '67891'=>'');
$pattern2 = array('a'=>'', '1234567890'=>'');
$pattern3 = '/12345|67891/';
$pattern4 = '/a|1234567890/';
$pattern5 = array('12345', '67891');
$pattern6 = array('a', '1234567890');
$t = microtime(true);
echo microtime(true)-$t, "/n"; //0.4768660068512 2.7257590293884
$t = microtime(true);
for($i=0; $i<10000; $i++)
{
preg_replace($pattern3, '', $str);
}
echo microtime(true)-$t, "/n"; //0.30504012107849 1.0864448547363
$t = microtime(true);
for($i=0; $i<10000; $i++)
{
preg_replace($pattern4, '', $str);
}
echo microtime(true)-$t, "/n"; //0.30298089981079 1.117014169693
$t = microtime(true);
for($i=0; $i<10000; $i++)
{
str_replace($pattern5, '', $str);
}
echo microtime(true)-$t, "/n"; //0.18029189109802 0.22510504722595
$t = microtime(true);
for($i=0; $i<10000; $i++)
{
str_replace($pattern6, '', $str);
}
echo microtime(true)-$t, "/n"; //0.18104100227356 0.23055601119995
//说明:当str_repeat的第二个参数为1时输出第一个数字,当为8时输出第二个数字
|
区别
区别就是str_replace被替换(查找)的内容是固定的、确定的,当然可以使用变量,但是变量也表示固定的、确定的内容,比如可以完成把所有的\n替换为<br>等场合。
而preg_replace被替换(查找)的内容是用规则来描述的,比如可以把所有的<和>之间的内容(HTML代码)替换掉。当然preg_replace也可以用来替换固定内容。
根据以上规则,所有str_replace能做的事情preg_replace都能办到,但是preg_replace的速度要慢些,使用也要复杂些,所以我们应该尽力使用str_replace。
星际的一些兵种会有不止一种状态,比如坦克可以架起来,机枪兵可以打兴奋剂,甚至还有一些被动的,比如被虫族女王喷洒绿色液体后,敌人的行动变慢。
如果按照一般的思路,每次我们对一个小兵进行操作的时候,比如一辆坦克,我们都要用if判断他的状态,这样代码中会有很多的if,else或者swith。
不过我们可以发现,我们需要的是他在某个状态下的行为,如果把这些行为按照状态封装起来,就可以减少大量的判断。
待解决的问题:封装坦克的状态,让状态自己去控制行为。
思路:把状态作为属性,兵种类本身只控制状态的变化,具体的行为由状态类定义。
状态(State)模式示例:
代码如下 |
复制代码 |
<?php
//坦克状态的接口
interface TankState
{
//坦克的攻击方法
public function attack();
}
//坦克普通状态
class TankState_Tank implements TankState
{
//坦克的攻击方法
public function attack()
{
//这里简单的输出当前状态
echo "普通状态";
}
}
//坦克架起来的状态
class TankState_Siege implements TankState
{
//坦克的攻击方法
public function attack()
{
//这里简单的输出当前状态
echo "架起来了";
}
}
//坦克类
class Tank
{
//状态
public $state;
//坦克的攻击方法
public function __construct()
{
//新造出来的坦克当然是普通状态
$this->state = new TankState_Tank();
}
//设置状态的方法,假设参数为玩家点击的键盘
public function setState($key)
{
//如果按了s
if($key = 's')
{
$this->state = new TankState_Siege();
}
//如果按了t
elseif($key = 't')
{
$this->state = new TankState_Tank();
}
}
//坦克的攻击方法
public function attack()
{
//由当前状态自己来处理攻击
$this->state->attack();
}
}
//新造一辆坦克
$tank = new Tank();
//假设正好有个敌人路过,坦克就以普通模式攻击了
$tank->attack();
//架起坦克
$tank->setState('s');
//坦克再次攻击,这次是架起模式
$tank->attack();
?>
|
用途总结:状态模式可以将和状态相关的行为和属性封装,除了切换状态时,其它地方就不需要大量的判断当前状态,只要调用当前状态的方法等。
实现总结:用一个接口规范状态类需要实现的方法,比如上面的TankState规定了attack()。把各个状态封装成类,将不同状态下的不同方法放入各自的状态类,比如上面的攻击方法,同时所有的状态执行接口。原来的事务类,比如上面的Tank类,只负责状态切换,一旦需要某一个方法的调用,只要交给当前状态就可以了
在这里我们可以利用strtotime函数与date函数同时使用来获取了,例子非常的简单在此我就不介绍其它的了,直接上代码。
PHP获得今天凌晨时间戳,百度了一下,没看见有,也可能是我理解错了。
直接上代码:
比如,今天是2102年11月2号,那么php要获取2102年11月2号的时间戳是怎么办的呢?
代码:echo strtotime(date('Y-m-d')),'
';
获取明天凌晨的时间戳
代码:echo strtotime(date('Y-m-d',strtotime('+1 day'))),'
';
最后再附一串代码
<?php
echo "今天:".date("Y-m-d")."<br>";
echo "昨天:".date("Y-m-d",strtotime("-1 day")), "<br>";
echo "明天:".date("Y-m-d",strtotime("+1 day")). "<br>";
echo "一周后:".date("Y-m-d",strtotime("+1 week")). "<br>";
echo "一周零两天四小时两秒后:".date("Y-m-d G:H:s",strtotime("+1 week 2 days 4 hours 2 seconds")). "<br>";
echo "下个星期四:".date("Y-m-d",strtotime("next Thursday")). "<br>";
echo "上个周一:".date("Y-m-d",strtotime("last Monday"))."<br>";
echo "一个月前:".date("Y-m-d",strtotime("last month"))."<br>";
echo "一个月后:".date("Y-m-d",strtotime("+1 month"))."<br>";
echo "十年后:".date("Y-m-d",strtotime("+10 year"))."<br>";
strtotime()函数的作用是将日期时间描述解析为 Unix 时间戳
int strtotime ( string time [, int now] )
?>