composer安装ThinkPHP5
D:\wamp64\www\17xiu>php think build --config build.php
Successed
***********************************
1.多表联查 users userinfo detail 表
select id,detail,phone,age from users inner join userinfo on users.id = userinfo.user_id inner join detail on userinfo.user_id = detail.detail_id;
select * from T1 left join T2 on T1.userid = T2.userid
$res = $a->join('left join a on a.id = b.id left join b.id = c.id')->select();
原生:分组联合查询
SELECT * from tb_user a LEFT JOIN (select count(app_id),user_id from tb_app GROUP BY user_id) b on a.user_id = b.user_id;
SELECT * from tb_user u INNER JOIN tb_user_role ur on u.user_id = ur.uid;
删除表中所有数据并清除auto_increment:truncate table items;
普通索引:最基本的索引,不具备唯一性,就是加快查询速度
注:可以使用key,也可以使用index 。index 索引名称(字段) ,索引名称,可以加也可以不加,不加使用字段名作为索引名。。
mysql> create table demo( id int(4), name varchar(20), pwd varchar(20), index(pwd) );
删除索引
mysql> alter table demo drop key pwd; 注意此处的pwd指的是索引的名称,而不是表中pwd的那个字段
再用alter添加
mysql> alter table demo add key(pwd);
唯一索引
与普通索引基本相同,但有一个区别:索引列的所有值都只能出现一次,即必须唯一,用来约束内容,字段值只能出现一次。应该加唯一索引。唯一性允许有NULL值<允许为空>。
mysql> create table demo3(id int(4) auto_increment primary key, uName varchar(20), uPwd varchar(20), unique index (uName));
php think build --config build.php
++++++++++++++++++++++++++++++++++++++++++++++++++++======================================
2.Mysql原生语句拼接
$where['_string'] = 'find in set';
如果字符串str是在的strlist组成的N子串的字符串列表,返回值的范围为1到N。
SQL> SELECT FIND_IN_SET('b','a,b,c,d');
+---------------------------------------------------------+
| SELECT FIND_IN_SET('b','a,b,c,d') |
+---------------------------------------------------------+
| 2 |
+---------------------------------------------------------+
1 row in set (0.00 sec) ;
$where['_string'] = 'datetime > '.time().;
++++++++++++++++++++++++++++++++++++++++++++++++++++======================================
3.SQL函数
dayofweek(date)
返回日期date是星期几(1=星期天,2=星期一,……7=星期六,odbc标准)
mysql> select dayofweek('1998-02-03');
-> 3
weekday(date)
返回日期date是星期几(0=星期一,1=星期二,……6= 星期天)。
mysql> select weekday('1997-10-04 22:23:00');
-> 5
mysql> select weekday('1997-11-05');
-> 2
dayofmonth(date)
返回date是一月中的第几日(在1到31范围内)
mysql> select dayofmonth('1998-02-03');
-> 3
dayofyear(date)
返回date是一年中的第几日(在1到366范围内)
mysql> select dayofyear('1998-02-03');
-> 34
month(date)
返回date中的月份数值
mysql> select month('1998-02-03');
-> 2
dayname(date)
返回date是星期几(按英文名返回)
mysql> select dayname("1998-02-05");
-> 'thursday'
monthname(date)
返回date是几月(按英文名返回)
mysql> select monthname("1998-02-05");
-> 'february'
quarter(date)
返回date是一年的第几个季度
mysql> select quarter('98-04-01');
-> 2
week(date,first)
返回date是一年的第几周(first默认值0,first取值1表示周一是
周的开始,0从周日开始)
mysql> select week('1998-02-20');
-> 7
mysql> select week('1998-02-20',0);
-> 7
mysql> select week('1998-02-20',1);
-> 8
year(date)
返回date的年份(范围在1000到9999)
mysql> select year('98-02-03');
-> 1998
hour(time)
返回time的小时数(范围是0到23)
mysql> select hour('10:05:03');
-> 10
minute(time)
返回time的分钟数(范围是0到59)
mysql> select minute('98-02-03 10:05:03');
-> 5
second(time)
返回time的秒数(范围是0到59)
mysql> select second('10:05:03');
-> 3
period_add(p,n)
增加n个月到时期p并返回(p的格式yymm或yyyymm)
mysql> select period_add(9801,2);
-> 199803
period_diff(p1,p2)
返回在时期p1和p2之间月数(p1和p2的格式yymm或yyyymm)
mysql> select period_diff(9802,199703);
-> 11
4.前一天,后一天函数
echo "今天:",date("Y-m-d",strtotime("18 june 2008")),"
";
echo "昨天:",date("Y-m-d",strtotime("-1 day")), "
";
echo "明天:",date("Y-m-d",strtotime("+1 day")), "
";
echo "一周后:",date("Y-m-d",strtotime("+1 week")), "
";
echo "一周零两天四小时两秒后:",date("Y-m-d G:H:s",strtotime("+1 week 2 days 4 hours 2 seconds")), "
";
echo "下个星期四:",date("Y-m-d",strtotime("next Thursday")), "
";
echo "上个周一:".date("Y-m-d",strtotime("last Monday"))."
";
echo "一个月前:".date("Y-m-d",strtotime("last month"))."
";
echo "一个月后:".date("Y-m-d",strtotime("+1 month"))."
";
echo "十年后:".date("Y-m-d",strtotime("+10 year"))."
";
++++++++++++++++++++++++++++++++++++++++++++++++++++======================================
4.OOP笔记
面向对象OOP
// 完整类结构
===========================================================================
[修饰词] class A extends B implements C,D
{
public $name;
protected $age;
private function fun()
{}
}
面向对象三大特点:
======================================================================
1.(*)封装
本类
子类
外部
public
可以
可以
可以
protected
可以
可以
不可以
private
可以
不可以
不可以
2.(*)继承
class Demo extends parent
{
}
3.(*)多态
抽象类
abstract class demo
{
public abstract function fun();
}
接口
interface A
{
const HOST = 'localhost';
public function fun();
}
class B implements A
{
public function fun(){}
}
常见的关键字
======================================================================
(*)this
(*)parent::fun()
(*)self:类内部调用静态属性,常量
final:修饰类和方法,类不能被继承,方法不能被覆盖
static:
静态属性:
(*)内部:self::属性名
(*)外部:类名::属性名
对象名::属性名
静态方法:
(*)内部:self::方法名
外部:
$obj->方法名
(*)类名::方法名
对象::方法名
// 在静态方法中不可以使用非静态方法和属性
static function fun(){
echo $this->name;
}
clone:普通赋值
$p = $obj;
引用赋值
$p = clone $obj;
普通赋值
(*)const:常量
const HOST = 'localhost';
instanceof:(类型约束)
魔术方法
(*)__set($param,$value):设置非公有属性时自动调用
(*)__get($param):获取非公有属性时自动调用
(*)__construct():实例化(new 类)自动调用的方法
__destruct():对象被删除的时候,自动调用的方法
__isset($param):判断非公有属性是否存在(isset或者empty)
__unset($param):删除一个非公有属性时
(*)__call($functionName,$arguments)):调用一个不存在的方法的时候
(*)__toString():输出一个对象的时候
__sleep():串行化的时候
__wakeup():反串行化
__clone():克隆对象的时候
__call():
魔术函数
(*)__autoload():自动加载不存在的类函数
serialize():串行化
unserialize():反串行化
类函数
get_class($obj):获取对象的类名
get_class_methods($className):获取类的方法名
get_object_vars($obj):获取对象的属性
class_exists():判断一个类是否存在
get_parent_class():获取父类名
method_exists()
property_exists()
(*)PDO对象
===============================================
1.query()
2.exec()
3.setAttribute()
4.getAttribute()
5.beginTransaction()
6.commit()
7.rollback()
8.prepare()
注意:query()和prepare()返回的是pdostatements对象
(*)PDOStatement
=================================================
1.fetch() PDO::FETCH_ASSOC(关联数组)
PDO::FETCH_OBJ
2.fetchAll()
3.execute()
4.rowCount()
5.bindValue()
6.bindParam()
异常处理 PDOException
============ =====================================
try
{
throw new Exception('错误消息');
}catch(Exception $e){
echo $e->getMessage();
}
********++++++++++++++++++++++++++++++++++++++++======================================
5.JS处理图片加载失败
a.$('img').error(function(){
$(this).attr('src', "default.jpg(默认图片的url地址)");
});
b.
********++++++++++++++++++++++++++++++++++++++++======================================
6.数据表设计三范式的设计与理解
a.1NF是关系型数据库中的最基本要求,就是要求记录的属性是原子性,不可分,就是属性不能分,这是关系型数据库的基本要求,不满足这个就不能叫关系型数据库了(原子不可再分性)
b.2NF是不能有部分依赖,部分依赖的前提条件是有组合主键,就是每条记录是需要一个主键的,这个主键可以是一个单独的属性,但也可以是组合主键,就是由记录的多个属性来唯一确定一条记录,那么只要出现了组合主键就可以产生部分依赖,部分依赖是组合主键出现的前提下,剩余的属性,不完全依赖于组合主键,也是部分依赖组合主键,比如该表的N条记录中由组合主键中的一条或者几条就可以确定剩余属性的属性,那么就可以说产生部分依赖,而在实际开发中,一般不采用组合主键,而是自己增加一个字段id自增长,作为主键,这样的单属性主键是不会产生部分依赖的!
c.3NF的理解:不能出现传递依赖:就是主键,非主键1,非主键2三者之间不能出现传递依赖关系,如果出现由主键可以推出非主键1,然后由非主键1可以推出非主键2,那么主键与非主键2就产生了传递依赖关系,这就不满足三范式,通俗来讲,在一个表的,当然以一条记录为单位,主键和非主键之间可以产生父子关系,但是非主键之间是不能出现父子关系的!
********++++++++++++++++++++++++++++++++++++++++======================================
7.数据库优化
A 对数据表的设计要符合三范式
B 添加适当的索引(index) 四种: 普通索引 index
主键索引 primary key
唯一索引 unique
全文索引 --鸡肋
复合索引
C 分表技术(水分分割) (垂直分割)
D 读(select)写(update | delete | create)分离
E 存储过程
F 对mysql的配置优化 配置最大并发数 调整缓存大小
E 定时清除不需要的数据
H 没有什么不是钱解决不了的-----硬件升级
delimiter 修改mysql结束符
********++++++++++++++++++++++++++++++++++++++++======================================
8.拼接whereTP5
Db::table('think_user')
->where([
'name' => ['like','thinkphp%'],
'title' => ['like','%thinkphp'],
'id' => ['>',0],
'status'=> 1
])
->select();
9.页面传id
var id = $(this).data('id'); jQuery data属性
//接收页面js传递过来的值 嵌入html页面
var src="{:url('Model/zmkindex')}"+"?id="+id;
window.loca获取r')->insertGetId($data);
php think build --module admin --添加admin模块
text-align:justify; 文字左右对齐
10.JS只能输入数字(连小数都不可以) οnkeyup="this.value=this.value.replace(/\D/g,'')" onafterpaste="this.value=this.value.replace(/\D/g,'')" 11.严格区分大小写 PHP虽然是弱语言,但是上传到服务器上面服务器上面不认识 LINUX严格区分大小写 mysql 2MXA7sH3U66VKnd3 12.获取一小时内的数据 select * from 表名 where 时间字段 BETWEEN (select DATE_SUB(NOW(), INTERVAL 1 HOUR)) and NOW() 13. PHP $_SERVER['HTTP_REFERER'] 获取前一页面的 URL 地址 14.登陆之后 阻止浏览器后退回登录页
15. $_SERVER["QUERY_STRING"] 获取查询 语句,实例中可知,获取的是?后面的值 $_SERVER["REQUEST_URI"] 获取 http://localhost 后面的值,包括/ $_SERVER["SCRIPT_NAME"] 获取当前脚本的路径,如:index.php $_SERVER["PHP_SELF"] 当前正在执行脚本的文件名 16.mysql 表id重新自增 ① TRUNCATE TABLE tableName ② alter table tableName AUTO ③ $sql="delete from $table_vote"; mysql_query($sql, $link); $sql="alter table $table_vote auto_increment=1"; mysql_query($sql, $link); ④ ISAM表 如果把一个NULL插入到一个AUTO_INCREMENT数据列里去,MySQL将自动生成下一个序列编号。编号从1开 始,并1为基数递增。 把0插入AUTO_INCREMENT数据列的效果与插入NULL值一样。但不建议这样做,还是以插入NULL值为好。 当插入记录时,没有为AUTO_INCREMENT明确指定值,则等同插入NULL值。 当插入记录时,如果为AUTO_INCREMENT数据列明确指定了一个数值,则会出现两种情况,情况一,如果 插入的值与已有的编号重复,则会出现出错信息,因为AUTO_INCREMENT数据列的值必须是唯一的 信息。truncate表后,表的主键就会重新从1开始。 16.传入一个条件查询出所有满足条件的值 CONCAT()函数 SELECT * FROM `tb_behavior_log` WHERE CONCAT (`behavior_log_action`,`behavior_log_controller`,`behavior_log_id`,`behavior_log_opname`) LIKE '%index%' 17. replace into 跟 insert 功能类似,不同点在于:replace into 首先尝试插入数据到表中, 1. 如果发现表中已经有 此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据。 2. 否则,直接插入新数据。 要注意的是:插入数据的表必须有主键或者是唯一索引!否则的话,replace into 会直接插入数据,这将导致表中出现重 复的数据。 1. replace into tbl_name(col_name, ...) values(...) 2. replace into tbl_name(col_name, ...) select ... 3. replace into tbl_name set col_name=value, ... 18.ajax 中加参数 traditional:true, 19.生成随机字符串 function getrandomstring($len,$chars=null){ if(is_null($chars)){ $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; } mt_srand(1000*(double)time()); $str = ''; for($i = 0,$lc = strlen($chars)-1;$i<$len;$i++){ $str.= $chars[mt_rand(0,$lc)]; } return $str; } 20.规避关键字 function strFilter($str,$preg='*'){ $sensitivewords='党|国家'; if(!$str || !$sensitivewords){ return false; } $sensitivewords = explode('|',$sensitivewords); $newsensitivewords = array_combine($sensitivewords,array_fill(0,count($sensitivewords),$preg)); $result =strtr($str,$newsensitivewords); return $result; } echo strFilter($str=调用外部的家,我爱中国共产党,我爱你中国,我爱我的国家'); 21.PHP 执行系统外部命令的函数 system(),exec(),passthru()
22.接口请求方式 GET方式的直接使用 $file_contents = file_get_content('http://localhost/openUser.php?act=get_user_list&type=json') POST方式得用下面的(需要开启PHP curl支持)。 $url = 'http://localhost/openUser.php?act=get_user_list&type=json'; $ch = curl_init (); curl_setopt ( $ch, CURLOPT_URL, $url ); curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 ); curl_setopt ( $ch, CURLOPT_CONNECTTIMEOUT, 10 ); curl_setopt ( $ch, CURLOPT_POST, 1 ); //启用POST提交 $file_contents = curl_exec ( $ch ); curl_close ( $ch ); 23.password_hash 加密 //查看哈希值的相关信息 array password_get_info (string $hash) //创建hash密码 string password_hash(string $password , integer $algo [, array $options ]) //判断hash密码是否特定选项、算法所创建 boolean password_needs_rehash (string $hash , integer $algo [, array $options ] boolean password_verify (string $password , string $hash) //验证密码 $password = 'password123456';//原始密码 $hash_password = password_hash($password, PASSWORD_BCRYPT);//使用BCRYPT算法加密密码 if (password_verify($password , $hash_password)){ echo "密码匹配"; }else{ echo "密码错误"; } 24.H5本地存储 ⑴.localStorage 方法存储的数据没有时间限制。第二天、第二周或下一年之后,数据依然可用。 eg. ⑵.sessionStorage 方法针对一个 session 进行数据存储。当用户关闭浏览器窗口后,数据会被删除。 eg. 25.pattern 属性 pattern 属性规定用于验证 input 域的模式(pattern)。 模式(pattern) 是正则表达式。您可以在我们的 JavaScript 教程中学习到有关正则表达式的内容。 注释:pattern 属性适用于以下类型的 标签:text, search, url, telephone, email 以及 password。 下面的例子显示了一个只能包含三个字母的文本域(不含数字及特殊字符): 实例 Country code: 26.验证表单是否为空 required 属性规定必须在提交之前填写输入域(不能为空)。 pattern="[A-z]{3}" title="Three letter country code" /> 26.Jquery引用库 jquery-3.1.1(最新) 官网jquery压缩版引用地址: jquery-3.0.0 官网jquery压缩版引用地址: jquery-2.1.4 百度压缩版引用地址: 微软压缩版引用地址: 官网jquery压缩版引用地址: jquery-2.1.1 百度压缩版引用地址: 微软压缩版引用地址: 官网jquery压缩版引用地址: jquery-2.0.0 百度压缩版引用地址: 微软压缩版引用地址: 官网jquery压缩版引用地址: jquery-1.11.3 百度压缩版引用地址: 微软压缩版引用地址: 官网jquery压缩版引用地址: jquery-1.11.1 百度压缩版引用地址: 微软压缩版引用地址: 官网jquery压缩版引用地址: jquery-1.10.2 百度压缩版引用地址: 微软压缩版引用地址: 官网jquery压缩版引用地址: jquery-1.9.1 百度压缩版引用地址: 微软压缩版引用地址: 官网jquery压缩版引用地址: jquery-1.8.3 百度压缩版引用地址: 微软压缩版引用地址: 官网jquery压缩版引用地址: jquery-1.7.2 百度压缩版引用地址: 微软压缩版引用地址: 官网jquery压缩版引用地址: jquery-1.6.4 百度压缩版引用地址: 微软压缩版引用地址: 官网jquery压缩版引用地址: jquery-1.5.2 百度压缩版引用地址: 微软压缩版引用地址: 官网jquery压缩版引用地址: jquery-1.4.4 百度压缩版引用地址: 微软压缩版引用地址: 官网jquery压缩版引用地址: jquery-1.4.2 百度压缩版引用地址: 微软压缩版引用地址: 官网jquery压缩版引用地址: jquery-1.3.2 百度压缩版引用地址: 微软压缩版引用地址: 官网jquery压缩版引用地址: jquery-1.2.3 百度压缩版引用地址: 微软压缩版引用地址: 官网jquery压缩版引用地址: 27.表单加密 标签规定用于表单的密钥对生成器字段。 当提交表单时,私钥存储在本地,公钥发送到服务器。 28.组合表单如果表单周围没有边框,说明您的浏览器太老了。
29. 标签定义字符(中文注音或字符)的解释或发音。 30.JavaScript 中的所有事物都是对象:字符串、数字、数组、日期,等等。 在 JavaScript 中,对象是拥有属性和方法的数据 31.JS中 test() 方法检索字符串中的指定值。返回值是 true 或 false。exec() 方法检索字符串中的指定值。返回值是被找到的值。如果没有发现匹配,则返回 null。 32.location.href 属性返回当前页面的 URL location.pathname 属性返回 URL 的路径名。 window.navigator 对象包含有关访问者浏览器的信息。 33.setTimeout() 未来的某时执行代码 clearTimeout() 取消setTimeout() 34. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ | $(this) | 当前 HTML 元素 | |---------------------------|-------------------------------------------------------| | $("p") | 所有 元素 | |---------------------------|-------------------------------------------------------| | $("p.intro") | 所有 class="intro" 的
元素 | |---------------------------|-------------------------------------------------------| | $(".intro") | 所有 class="intro" 的元素 | |---------------------------|-------------------------------------------------------| | $("#intro") | id="intro" 的元素 | | $("ul li:first") | 每个
的第一个 元素 | | $("[href$='.jpg']") | 所有带有以 ".jpg" 结尾的属性值的 href 属性 | | $("div#intro .head") | id="intro" 的 元素中的所有 class="head" 的元素|
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
35.
========================================================================================
||$(document).ready(function) || 将函数绑定到文档的就绪事件(当文档完成加载时) ||
========================================================================================
||$(selector).dblclick(function) || 触发或将函数绑定到被选元素的双击事件
||
========================================================================================
36.
$(selector).hide(speed,callback);
可选的 speed 参数规定隐藏/显示的速度,可以取以下值:"slow"、"fast" 或毫秒。
可选的 callback 参数是隐藏或显示完成后所执行的函数名称。
37.
通过 jQuery,您可以使用 toggle() 方法来切换 hide() 和 show() 方法。(可用于实现权限树)
eg.
切换 这是一个段落。
这是另一个段落。
ssss
38.
⑴.Jquery 淡入淡出
jQuery Fading 方法
通过 jQuery,您可以实现元素的淡入淡出效果。
jQuery 拥有下面四种 fade 方法:
a.fadeIn() 淡入已隐藏的元素。 $(selector).fadeIn(speed,callback);
b.fadeOut()
淡出可见元素。 $(selector).fadeOut(speed,callback);
c.fadeToggle()
如果元素已淡出,则 fadeToggle() 会向元素添加淡入效果。
如果元素已淡入,则 fadeToggle() 会向元素添加淡出效果。
d.fadeTo()
方法允许渐变为给定的不透明度(值介于 0 与 1 之间)。 $(selector).fadeTo(speed,opacity,callback); 0为完全隐藏
⑵.jQuery 效果 - 滑动 (可用来实现权限树效果)
39.jQuery 动画 - animate() 方法
40.jQuery remove() 方法删除被选元素<及其>子元素。 jQuery empty() 方法删除被选元素<的>子元素。
41.微信昵称有表情 urldecode php
42. levenshtein() 比较出两个字符串的不同程度
eg.
$str1 = "carrot";
$str2 = "carrrott";
echo levenshtein($str1, $str2); //Outputs 2
43.get_defined_vars() 这个函数返回一个多维数组,里面包含了所有定义过的变量。
44.ignore_user_abort() 这个函数用来拒绝浏览器端用户终止执行脚本的请求。正常情况下客户端的退出会导致服务器端脚本停止运行。
eg.
ignore_user_abort();
?>
45.highlight_string() 当你想把PHP代码显示到页面上时,highlight_string()函数就会显得非常有用。这个函数会把你提供的PHP代码用内置的PHP语 法突出显示定义的颜色高亮显示。这个函数有两个参数,第一个参数是一个字符串,表示这个字符串需要被突出显示。第二个参数如果设置成TRUE,这个函数就 会把高亮后的代码当成返回值返回。
highlight_string(' ');
?>
46.highlight_file() 这是一个非常有用的PHP函数,它能返回指定的PHP文件,并按照语法语义用高亮颜色突出显示文件内容。其中的突出显示的代码都是用HTML标记处理过的。
highlight_file("php_script.php");
?>
47.get_browser 这个函数会读取browscap.ini文件,返回浏览器兼容信息。
echo $_SERVER['HTTP_USER_AGENT'];
$browser = get_browser();
print_r($browser);
?>
48.memory_get_usage(),memory_get_peak_usage(),getrusage()
这些函数用来获取内存和CPU使用情况,memory_get_usage()函数返回内存使用 量,memory_get_peak_usage()函数返回内存使用峰值,getrusage()返回CUP使用情况,在调试PHP代码性能时,这些函 数会给你提供一些有用信息。但有一点请注意,在这些函数中Window上无效。
echo "Initial: ".memory_get_usage()." bytes \n";
echo "Peak: ".memory_get_peak_usage()." bytes \n";
$data = getrusage();
echo "User time: ".
($data['ru_utime.tv_sec'] +
$data['ru_utime.tv_usec'] / 1000000);
echo "System time: ".
($data['ru_stime.tv_sec'] +
$data['ru_stime.tv_usec'] / 1000000);
?>
49.gzcompress(), gzuncompress()
这两个函数用来压缩和解压字符串数据。它们的压缩率能达到50% 左右。另外的函数 gzencode() 和 gzdecode() 也能达到类似结果,但使用了不同的压缩算法。https://yq.aliyun.com/articles/81501?utm_campaign=wenzhang&utm_medium=article&utm_source=QQ-qun&2017517&utm_content=m_21209
50.tp5生成模块 php think build --module demo
51.二维码API http://www.topscan.com/pingtai
52.get_declared_classes(),返回由已定义类的名字所组成数组。
53.阿里云apache配置https,阿里云安全策略需要开启443端口访问,免费ssl证书->配置完成之后,apache开启域名自动跳转
二级域名->cert目录下建立子目录放置子域名ssl证书->复制ssl配置->设置servername 为子域名并设置端口为443
多个子域名 同理 https://segmentfault.com/a/1190000009220479
54.当只要一行数据时使用 LIMIT 1。MySQL数据库引擎会在找到一条数据后停止搜索,而不是继续往后查少下一条符合记录的数据。
55.把IP地址存成 UNSIGNED INT 便于后期查询
56.动态获取URL
$protocol = (!empty($_SERVER[HTTPS]) && $_SERVER[HTTPS] !== off || $_SERVER[SERVER_PORT] == 443) ? "https://" : "http://";
$url = "$protocol"."$_SERVER[HTTP_HOST]"."$_SERVER[REQUEST_URI]"
57.微信分享图片size大于300*300
58. 过滤提交的数据
function post_input($data)
{
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
58.进行select 查询时使其区分大小写加关键字binary ->比如:select * from usertable where binary id = 'AbC';
59.
#测试网址: http://localhost/blog/testurl.php?id=5
//获取域名或主机地址
echo $_SERVER['HTTP_HOST']."
"; #localhost
//获取网页地址
echo $_SERVER['PHP_SELF']."
"; #/blog/testurl.php
//获取网址参数
echo $_SERVER["QUERY_STRING"]."
"; #id=5
//获取用户代理
echo $_SERVER['HTTP_REFERER']."
";
//获取完整的url
echo 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
echo 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'];
#http://localhost/blog/testurl.php?id=5
//包含端口号的完整url
echo 'http://'.$_SERVER['SERVER_NAME'].':'.$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
#http://localhost:80/blog/testurl.php?id=5
//只取路径
$url='http://'.$_SERVER['SERVER_NAME'].$_SERVER["REQUEST_URI"];
echo dirname($url);
#http://localhost/blog
60.随机查询5条数据
SELECT * FROM `tb_img`
WHERE img_id >= (SELECT floor(RAND() * (SELECT MAX(img_id) FROM `tb_img`)))
ORDER BY img_id LIMIT 5;
61.为图片或DIV增加灰度
.brightness {
-webkit-filter: brightness(0.30);
filter: brightness(0.30);
}
.contrast {
-webkit-filter: contrast(180%);
filter: contrast(180%);
}
62.str_pad(param1, param2, param3, param4) param1是要改变的值,param2是要想定param1位数,param3是如果param1位数不够param2位要补充的数,param4是在左边补还是右边补还是左右两侧
62.str_pad(param1, param2, param3, param4) param1是要改变的值,param2是要想定param1位数,param3是如果param1位数不够param2位要补充的数,param4是在左边补还是右边补还是左右两侧 63.SQL统计当前月有多少天 SELECT TIMESTAMPDIFF(day,'2018-02-05',(DATE_add('2018-02-05',INTERVAL 1 month))) as daycount
63.内网穿透工具 https://www.ngrok.cc/login.html
64. var close; close = layer.load(2); close = layer.load(2, {content:'loading...',time: 10*1000,success: function(layero){ layero.find('.layui-layer-content').css('left', '160px'); layero.find('.layui-layer-loading2').css('left', '180px'); }}) setTimeout('loading()',800); function loading(){ layer.close(close); layer.msg('Hello World');
}
65. 技术图谱
https://github.com/xingshaocheng/architect-awesome/blob/master/README.md
66. curl请求远程地址
$url = 'url'; $timeout = 60; $data = array(); $header = array(); $ch = curl_init(); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true); // 从证书中检查SSL加密算法是否存在 curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); //CURLOPT_TIMEOUT 设置cURL允许执行的最长秒数 $response = curl_exec($ch); if($error=curl_error($ch)){ die($error); } curl_close($ch);
var_dump($response);
67. 加密解密
$str = '终风且暴,顾我则笑。谑浪笑敖,中心是悼。终风且霾,惠然肯来。莫往莫来,悠悠我思。';
$mi = '123456';
$pwd = base64_encode($str.$mi);
// echo $pwd;
$ni = base64_decode($pwd);
echo str_replace($mi,"",$ni);
68. 鼠标选中文字变色CSS
::-moz-selection{background:#93C; color:#FCF;} ::selection {background:#93C; color:#FCF;}