notes-19-05-10

  mysql查找一个表中字段相同的数据  2019-05-10 15:51:03   

SELECT product_record_id FROM `t_warehouse_record` where document_id = 112 and document_type = 1 GROUP BY `product_record_id` HAVING COUNT(*) > 1 

 

      多字段

SELECT * FROM `t_warehouse_record` a WHERE 1 and a.document_id = 112 and a.document_type = 1 and a.product_record_id in (SELECT product_record_id FROM `t_warehouse_record` where document_id = 112 and document_type = 1 GROUP BY `product_record_id` HAVING COUNT(*) > 1)  

   二  Referer的作用?2019-05-17 10:03:48 (来自网络)

1.防盗链
我在www.google.com里有一个www.baidu.com链接,那么点击这个www.baidu.com,它的header信息里就有:
Referer=http://www.google.com
那么可以利用这个来防止盗链了,比如我只允许我自己的网站访问我自己的图片服务器,那我的域名是www.google.com,那么图片服务器每次取到Referer来判断一下是不是我自己的域名www.google.com,如果是就继续访问,不是就拦截。
这是不是就达到防盗链的效果了?
将这个http请求发给服务器后,如果服务器要求必须是某个地址或者某几个地址才能访问,而你发送的referer不符合他的要求,就会拦截或者跳转到他要求的地址,然后再通过这个地址进行访问。
2.防止恶意请求
比如静态请求是*.html结尾的,动态请求是*.shtml,那么由此可以这么用,所有的*.shtml请求,必须 Referer 为我自己的网站。
Referer=http://www.google.com

注意:只有通过链接访问当前页的时候,才能获取上一页的地址,以下情况是获取不到值的:

 只有通过链接访问当前页的时候,才能获取上一页的地址

 1,window.open

 2,直接输入地址

 3,改变location

 4,<a href="javascript:location='url'">xx</a>

 

 

  三  通过引用方式实现无限极分类

 

/**
 * 把返回的数据集转换成Tree
 * @param array $list 要转换的数据集
 * @param string $pk 自增字段(栏目id)
 * @param string $pid parent标记字段
 * @return array
 * @author dqs <1696232133@qq.com>
 */
function make_tree($list,$pk='id',$pid='pid',$child='_child',$root=0){
    $tree=array();
    $packData=array();
    foreach ($list as  $data) {
        $packData[$data[$pk]] = $data;
    }
    foreach ($packData as $key =>$val){     
        if($val[$pk]==$root){//代表跟节点        
            $tree[]=& $packData[$key];
        }else{
            //找到其父类
            $packData[$val[$pid]][$child][]=& $packData[$key];
        }
    }
    return $tree;
}

   

 

  四  TP5 闭包传参的whereOr 查询  2019-08-13 

 

                $where['id'] = $document_id;
                $where['from__id'] = $own_warehouse;  
                $where['from_type'] = 0;
                $whereor['id'] = $document_id;
                $whereor['receiving_id'] = $own_warehouse;
                $whereor['receiving_type'] = 0;
                $document_info = db('insurance')->where(function($query) use ($where){$query->where($where);
                                })->whereOr(function($query) use ($whereor){$query->where($whereor);
                                })->order('create_time desc')->find();                

 

 

 

 

  五  tp5 hasone()   2019-08-13

 

 

 

<?php
namespace app\model;
use think\Model;
class insurance extends Model{
    public function logistics(){
        return $this->hasOne('logisticsCompany', 'id', 'logistics_company');
    }
}

 

$detail = model('insurance')->find();
$logisticsName = $detail['logistics']['name'];

   注意:

    model的hasone函数不要下划线,直接写成一个单词(暂未验证驼峰是否可行). 如果logistics() 写成logistics_ok(),则取不到关联,可以写成logisticsok(),暂未验证logisticsOk().

  六  mysql delete drop truncate   2019-09-09 

     当你不需要该表时, 用 drop;当你仍要保留该表,但要删除所有记录时, 用 truncate;当你要删除部分记录时(always with a WHERE clause), 用 delete.

 

  

  七  php脚本全执行完的之后 才会输出内容 2019-10-14 16:19

 

  

echo date("Y-m-d H:i:s")."<br />";
sleep(5);
echo date("Y-m-d H:i:s");

 

      页面会在5s之后才渲染内容,两个时间差为5s

 

  八 php sleep()导致所有网页都没响应了 2019-10-14 17:18:17

 

q:
打开那个页面,60秒后才有输出,这个是正常的;
但是在这60秒内我网站中的其他网页也都是loading的状态,直到这个页面出现了

a:
1. 程序里是否只有一句sleep()代码?是否有类似 session_start() ? 或者是你修改过php.ini开启了自动开启session.
如果是,那就是session文件锁导致
2. 你php-fpm中最大子进程是几个?如果只有一个,也会造成拥堵的状况
(sleep不占用系统资源,它会把cpu的控制权交换给内核,内核会再schedule到另一个进程。
这种简单的事情,你写个while (true) sleep(1)的程序然后top一下就能判断的。)


  九 php文件为什么不加?>   2019-11-21 10:28:38


加与不加,视情况而定。先定义一下两者的区别。

加结尾的:之后的内容视为 纯文本直接输出,直到再次碰到 <? 或 <?php
不加的:之后的内容视为 PHP 代码,除非没有代码了。

像一些函数库,类库这类文件,不加结尾比较好。这样当它们被其他文件包含的时候,可以避免一些因为有输出而导致的错误。比如

<?PHP
//如果 a.php 有结尾,并且后面多一个回车或空格。下面这行一定报错。
include("a.php");
session_start():
?>

另外,不加结尾还有个好处,如果服务器被病毒感染,病毒会在你的 PHP 文件最后加上 HTML 码。例如:< img src="他的带毒地址" />

不加结尾的话,等效于直接在 PHP 文件里书写 HTML 码,PHP 报错运行中断。至少你网站的访客不会因为这个中毒,你也能马上发现染毒了。。

总的来说,我个人认为,纯 PHP 的程序,不加结尾符,比加结尾符更具有优势。如果你程序后面还有 HTML 码之类的文本输出,那你一定要加结尾。
 
  十 限制input框只能输入6位数字,其他字符均不可输入   2019-11-21  11:01:44 

 

<input type="text" oninput="value=value.replace(/[^\d]/g,'')" maxlength="6" />

 

  十一 批量插入数据  2019-11-21  11:03:42
在项目中,会遇到批量插入数据,如果还是使用insert into() values(),只要其中有一条数据失败,整个就失败。

在我们项目中,允许失败,正常的数据需要插入成功。

解决方法:

1.insert ignore into

当插入数据时,如出现错误时,如重复数据,将不返回错误,只以警告形式返回。所以使用ignore请确保语句本身没有问题,否则也会被忽略掉。例如:

INSERT IGNORE INTO books (name) VALUES (1, 'MySQL'),(1,'JAVA')

(1, 'MySQL')将会插入成功。



2.replace into

如果存在primary or unique相同的记录,则先删除掉。再插入新记录。

REPLACE INTO books (name) VALUES (1, 'MySQL'),(1,'JAVA')

(1,'JAVA')将会插入成功。


  十二 mysql删除所有表  2020-10-19 17:31:15
SELECT CONCAT('DROP TABLE ', table_name,';') FROM information_schema.`TABLES` WHERE table_schema='testdb';   -- testdb 为数据库名称

复制结果集,再执行一次即可

 

 




  
posted @ 2019-05-10 15:56  布叔喂丶  阅读(195)  评论(0编辑  收藏  举报