项目中的个人笔记整理
1、$_SERVER['DOCUMENT_ROOT'] 代表文件根目录
2、goto操作符可以用来跳转到程序中的某一指定位置。该目标位置可以用目标名称加上冒号来标记。PHP中的goto有一定限制,只能在同一个文件和作用域中跳转,也就是说你无法跳出一个函数或类 方法,也无法跳入到另一个函数。你也无法跳入到任何循环或者switch 结构中。常见的用法是用来跳出循环或者switch,可以代替多层的break。
(跳转) (语句)
例如:goto End;————》End: ......
3、autocmomit(自动提交)autocommit是mysql中的InnoDb数据表特有的语句。
4、HttpRequest 通过封装 HTML XMLHttpRequest 对象提供了对 HTTP 协议的完全的访问,包括做出 POST 和 HEAD 请求以及普通的 GET 请求的能力。 HttpRequest 只提供以异步的形式返回 Web 服 务器的响应,并且能够以文本或者二进制的形式返回内容。
注意:建议每次请求都使用新的 HttpRequest 对象,因为每次调用该对象的send方法时,都会清空之前设置的数据,并重置 HTTP 请求的状态,这会导致之前还未返回响应的请求被重置,从而得 不到之前请求的响应结果。
5、startTrans()开启事物
6、execute();用于pdo 增删改 $pro = $mysqli -> query($sql); $product = $pro -> fetch_assoc();查
7、$_SERVER['HTTP_HOST']我们一般通过$_SERVER['HTTP_HOST']来活得URL中网站的域名或者ip地址。
8、php://input 是个可以访问请求的原始数据的只读流。 POST 请求的情况下,最好使用 php://input 来代替 $HTTP_RAW_POST_DATA(原生的post数据),因为它不依赖于特定的 php.ini 指令,内 存消耗更少
9、我们把Zend的Filter\Dir.php 放到Vendor目录下面,这个时候Dir文件的路径就是Vendor\Zend\Filter\Dir.php,我们使用vendor方法导入就是:Vendor('Zend.Filter.Dir');
10、$aaasql = M()->_sql(); file_put_contents("test.txt",$aaasql); TP中打印sql语句到文件test.txt中
11、想要进行远程桌面连接,可以同时按住键盘上的windows+R键,调出运行对话框,然后在打开里边输入远程桌面连接命令 mstsc ;
12、<notempty name="order['contact2']"></notempty> 写法
13、在表里添加 Timestamp 类型的字段以后,每次插入或更新,该字段将记录每一个数据行的计数器值(基本不会重复,select into 除外)。
16、复选框获取选中id jquery方法
var chk_value =[];
$('input[name="checkbox"]:checked').each(function(){
chk_value.push($(this).val());
});
17、define('APP_PATH','./Application/'); TP3.2定义常量:APP_PATH的定义支持相对路径和绝对路径,但必须以“/”结束
18、控制器类的命名方式是:控制器名(驼峰法,首字母大写)+Controller 例如:IndexController.class.php
19、JSON.parse(data) HTML解析json格式(记得加判断)
20、layer提示方法
layer.msg("提现成功",{
icon: 1,//提示的样式
time: 3000, //2秒关闭(如果不配置,默认是3秒)//设置后不需要自己写定时关闭了,单位是毫秒
end:function(){
location.href='https://zs.kxsp.net/paimai/Home/Trade/tx';
}
});
21、ajax格式:$.ajax({
url:"https://zs.kxsp.net/paimai/APi/Pay/operaTx",
type:"POST",
data:{"id":id ,"status":status},
success:function(data){
}
})
22、弹窗:var url=$('.detail_on').attr('data-url');
url=url+"?acution_id="+id;
layer.open({
type: 2,
title:'参加竞拍详情',
shadeClose:true,
shade:0.5,
area: ['75%', '70%'], //宽高
content: url,
});
23、TP3.2中指定XML格式返回数据(ajaxReturn方法调用)
$data['status'] = 1;
$data['content'] = 'content';
$this->ajaxReturn($data,'xml');
返回数据data可以支持字符串、数字和数组、对象,返回客户端的时候根据不同的返回格式进行编码后传输。如果是JSON/JSONP格式,会自动编码成JSON字符串,如果是XML方式,会自动 编码成XML字符串,如果是EVAL方式的话,只会输出字符串data数据。
24、js返回上一页:javascript:history.back(-1); PHP返回上一页:使用 $_SERVER['HTTP_REFERER'] 将很容易得到链接到当前页面的前一页面的地址。
25、strip_tags() 函数剥去字符串中的 HTML、XML 以及 PHP 的标签。 htmlspecialchars() 函数把预定义的字符转换为 HTML 实体。
26、PHP音频文件读取、处理:
if(($_FILES["audio"]["type"]=="audio/mpeg" || $_FILES["audio"]["type"]=="mp3/mp3") &&$_FILES["file"]["size"]<2500000){
$audio=$_FILES['audio']['name'];$savePath = '/Public/Uploads/myMusic/';
$saveName = $audio;
//存入二维码
$res = move_uploaded_file($_FILES["audio"]["tmp_name"], $_SERVER['DOCUMENT_ROOT'] . "/paimai" . $savePath . $saveName);
if ($res === false) {
$this->ajaxReturn(array('code' => 300, 'msg' => '音频文件添加失败'));
}else{
$url = IMG_PATH . "myMusic/" . $saveName;
$data['audio']=$url;
$re_id=M('myself_audio')->add($data);
}
}
27、D方法实例化模型类的时候通常是实例化某个具体的模型类,如果你仅仅是对数据表进行基本的CURD操作的话,使用M方法实例化的话,由于不需要加载具体的模型类,所以性能会更高。
28、$Model = M();
//进行原生的SQL查询
$Model->query('SELECT * FROM think_user WHERE status = 1');
29、如果需要显式获取当前数据表的字段信息,可以使用模型类的getDbFields方法来获取当前数据对象的全部字段信息,例如:$User = M('User');$fields = $User->getDbFields();
结果:"id",
"openid",
"username",
"phone",
"sex",
"city",
"province",
"country",
"language",
"ctime",
"last_time",
"avater",
"amount",
"session_key",
"authorization"
30、alias用于设置当前数据表的别名,便于使用其他的连贯操作例如join方法等。$Model = M('User');$Model->alias('a')->join('__DEPT__ b ON b.user_id= a.id')->select();
31、TP查询统计排序:
$User= M('pay_records');
$con['is_complete']=1;
$con['order_id']=1164;
$con['status']=1;
$data=$User->field("sum(money) as total")->where($con)->group('user_id')->order("sum(money) desc")->limit('0,1')->select();
原生sql:$sql="select user_id,sum(money) as total from wemall_pay_records where order_id =$auction_order_id and is_complete=1 and status=1 group by user_id order by sum (money) desc limit 0,1";
32、Create方法创建的数据对象是保存在内存中,并没有实际写入到数据库中,直到使用add或者save方法才会真正写入数据库。
33、fetchSql 不执行SQL而只是返回SQL 3.2.3版本开始,可以支持不执行SQL而只是返回SQL语句
34、如果写入了数据表中不存在的字段数据,则会被直接过滤,例如:$data['name'] = 'thinkphp';$data['email'] = '[email protected]';$data['test'] = 'test';$User = M('User');$User- >data($data)->add();
批量生成$User->add($data);//不采用
35、读取字段值其实就是获取数据表中的某个列的多个或者单个数据,最常用的方法是 getField方法。例如:
$nickname = M("User")->where('id=3')->getField('username'); 结果:"泪舞思醉"
36、$User = M("User"); // 实例化User对象
$User->where('id=5')->setInc('score',3); // 用户的积分加3
$User->where('id=5')->setInc('score'); // 用户的积分加1
$User->where('id=5')->setDec('score',5); // 用户的积分减5
$User->where('id=5')->setDec('score'); // 用户的积分减1
37、ThinkPHP可以支持直接使用字符串作为查询条件,但是大多数情况推荐使用【数组】或者【对象】来作为查询条件,因为会更加安全。
38、表达式查询: $map['字段名'] = array('表达式','查询条件');
39、$map['status&title'] =array('1','thinkphp','_multi'=>true); 等价于 status= 1 AND title = 'thinkphp'
40、$map['id'] = array(array('neq',6),array('gt',3),'and'); 等价于 ( id != 6) AND ( id > 3)
41、用于原生: query 方法用于执行SQL查询操作,如果数据非法或者查询错误则返回false,否则返回查询结果数据集(同select方法)。
execute 用于更新和写入数据的sql操作,如果数据非法或者查询错误则返回false ,否则返回影响的记录数。
42、$this->display('Member:read');表示调用Member模块下面的read模板。
43、们可以给变量输出提供默认值,例如:{$user.nickname|default="这家伙很懒,什么也没留下"}
44、{$user.score+10} //错误的
{$user['score']+10} //正确的
45、{$info['status']?$info['msg']:$info['error']} 三元运算
46、{__NOLAYOUT__}模板不解析
48.HTML中css设置超出文字用省略号 overflow: hidden;white-space: nowrap;
text-overflow: ellipsis;
display: inline-block;
width:400px;
49.连表查询别名 M('User')->alias('a')->join('__DEPT__ b ON b.user_id= a.id')->select();
50.Windows版本workerman的启动与停止 启动时直接运行 php 文件.php 即可,停止运行按ctrl+c