mysql(二)

一.重要函数总结

1.数组函数的概述

 Array_reverse($arr); 翻转数组的值,其索引不翻转

 Array_reverse($arr,true);翻转数组的值,其索引也发生了翻转

 Array_push($arr,'');  作用是往数组的尾部压入单元。返回值是压入单元成功后,数组的单元个数。/在数组的末尾添加一个值

 Array _pop($arr); 弹出并返回数组的最后一个单元,并且数组的长度减一  /在数组的末尾移除一个值

 Array_shift($arr); 将数组开头的单元移除数组

 Array_unshift($arr,’bei’); 在数组的开头插入一个或多个单元

 Array_merge($arr1,$arr2);合并一个或多个数组

 Array_unique($arr);移除数组中重复值

 Array_count_values($arr);统计数组中所有值出现的次数

 Array_sum($arr);计算数组中所有值得和

 Array_diff($arr1,$arr2);计算数组的差集

 Array_diff_assoc($arr1,$arr2);根据索引来计算数组的差集

 Array_intersect($arr1,$arr2);计算数组的交集

 Array_intersect_assoc($arr1,$arr2);根据索引来计算数组的交集

 Array_key_exists(‘键’,$arr);检查给定的键名和索引是否在数组中/key_exists();

 List();给多个变量赋值,即把数组的多个单元分别赋给多个值

 Array_filter(‘输入的数组’,’自定义的函数名’)用回调函数过滤数组中的元素

 list($arr[0],$arr[1],$arr[2]) = array(3=>'赵',1=>'钱',5=>'孙',2=>'李',0=>'燕');

2.字符串函数

addslashes();函数在指定的预定义字符前添加反斜杠预定义字符是:单引号/双引号/反斜杠/null ;//防止sql注入

Stripslashes();函数删除由addslashes()函数添加的反斜杠;

Htmlspecialchars();将字符串中一些字符转换为HTML实体;//防止XSS攻击

Htmlspecialchars_decode();HTML实体转换为字符

Implode(‘-’,$arr) 将数组以特定的分隔符转变为字符串;

Explode() 将字符串用分割符转变成一个数组;

Str_replace(‘要替换的字符’,’替换字符’,’包含要替换的字符’); 匹配和替换字符串;

Trim();去除字符串两边的空白字符或者指定的字符;

Ucfirst();把字符串中的首字符转换为大写

Ucwords();把字符串中每个单词的首字符转换为大写

Str_repeat(‘字符串’, 5);把字符串重复指定的次数

Strtoupper();把字符串转换为大写

Strtolower();把字符串转换为小写

Strrev();字符串翻转

Mb_substr(‘字符串’,’开始位置’,’截取的长度’,’utf-8’);截取中文字符无乱码

Substr(‘字符串’,’开始位置’,’截取的长度’);截取字符串

Str_split($str,2);将字符串分割成数组;其中最后一个参数代表分割数组中值得个数

strrchr() 函数查找字符在指定字符串中从正面开始的最后一次出现的位置

is_readable() 函数判断指定文件名是否可读

Str_pad(‘要填充的字符串’,’填充的长度’,’填充的位置(STR_PAD_RIGHT/STR_PAD_LEFT/STR_PAD_BOTH)’)函数 把字符串填充为新的长度 

二.mysql数据库的操作

1.数据库cmd的常用命令

a.配置计算机的环境变量path中变量值添加:D:wampinmysqlmysql5.5.8in;

B.登录mysql命令:mysql -hlocalhost -uroot -p 123

C.显示数据库:show databases

D.创建数据库:create database  shujuku

  删除数据库:drop database shujuku

F.选择数据库:use shujuku 

  设置cmd的显示编码:set names gbk;

G.查看表:show tables;

H.查看表结构:desc aa(表名);

I.创建表:create table if not exists `aa`(id int auto_increment primary key, user_name varchar(20) not null default ‘’ comment”用户名”);

J.查看创建的表:show create table aa;

K.修改表名:alter table aa rename aa1;

L.修改字段的数据类型:alter table aa modify  id  bigint; idint类型改为bigint

M.修改字段名:alter table aa change id iid bigint ;id这个字段更名为iid

N.添加字段:alter table aa add name1 varchar(20) not null;

O.删除字段:alter table aa drop name1;

P.删除外键约束:alter table aa drop foreign key;

 删除主键约束:alter table aa drop primary key;

Q. ---MyISAM引擎

  CREATE TABLE TEST

  (

    ID int unsigned not null auto_increment,

    name varchar(10) not null,

    key(name,id)

   )engine=MYISAM auto_increment=100;

  ---innodb引擎

  CREATE TABLE TESTIdentity

   (

     ID int unsigned   not null auto_increment,

     NID INT UNSIGNED ,

     name varchar(10) not null,

     key(id)

   )engine=INNODB auto_increment=100;

MyISAMinnodb的区别:

1.Innodb不支持全文索引 MyISAM支持全文索引

2.Innodb支持事务和外键

3.MyISAM是表锁 innodb是行锁

4.执行大量的select 时用MyISAM 执行大量的insertupdate时用innodb

2.数据类型

Mysql中的数据类型可以指定显示宽度

Tinyint:-128-----127

        0------255

Smallint:-32768----32767

         0---------65535

Mediumint:0-----16777215

Int:  0-----4294967295

Bigint:最大值

Float:单精度浮点型数据

double:双精度浮点型数据

Decimal:自定义精度浮点型数据 decimal(10,2);

Char();固定长度的字符串  最大255字符

Varchar();可变长度的字符串  255

Test     最大长度限制的可变长度

Date  yyyy-mm-dd格式的日期

Time  hh:mm:ss格式的时间

Datetime yyyy-mm-dd hh:mm:ss格式的日期 时间

Timestamp yyyy-mm-dd hh:mm:ss格式的日期 时间

Enum  一个数组,用户可从中选择其中一个

3.数据库查询

Select 属性列表 from 表名 [where 条件表达式] [group by 属性名 [having 条件表达式]]  [order by 属性名 [asc|desc]] [limit(0,2)];

1.常用查询:

  Select * from 表名;

  Select name from 表名 where name=’张三’;

  Select name from 表名 where name=”” AND id=””;

  Select name form 表名 where name=”” OR id=””;

  Select id,name from 表名 where id  IN(101,102);

  Select id,name from 表名 where id NOT IN (101,102);

  Select id,name from 表名 where price (not)BETWEEN 2 AND 20;

  Select * from 表名 where city IS (NOT) NULL

  select *,IF(sva=1,’男’,’女’) as 别名 from 表名 where id=1;

    SELECT * FROM t1 LEFT JOIN t2 ON t1.id=t2.id WHERE t2.id IS NULL;

2.like的字符匹配查询

  Select id,name from 表名 where name like ‘s%’;

3.distinct去除数据库重复的

  Select distinct name from 表名;

4.group by分组

  Select id,count(1)  AS 别名 from 表名 group by  id;

5.过滤分组

 Select id, group_concat(name) AS 别名 from 表名 group by  id having count(name)>2; 

6.limit 限制查询结果数量

 Select * from 表名 limit 0,3;

7.order by 排序查询

 Select * from 表名 order by 字段名 desc(asc);

8.正则表达式查询

 Select * from 表名 where name REGEXP ‘^b’;

  拓展:字符“^”匹配以特定字符或者字符串开头的文本

         字符“$”匹配以特定字符或者字符串结束的文本

         字符“.”匹配任意一个字符

         星号“*”匹配前面的字符任意多次,包括0次。加号“+”匹配前面的字符至少一次

         方括号“[]”指定一个字符集合,只匹配其中任何一个字符,即为所查找的文本

        “[^字符集合]”匹配不在指定集合中的任何字符

        “字符串{n,}”,表示至少匹配n次前面的字符;“字符串{n,m}”表示匹配前面的字符串不少于n次,不多于m次。

 9.GROUP_CONCAT 将某一字段的值按指定的字符进行累加,separator是分割符

 select  group_concat(f_a  separator  '_') from 表名 group by f_b;
  separator  是一个关键字,后面跟着要进行分隔的字符

4.数据库的添加,更新和删除

   添加:INSERT INTO 表名(id,NAME,age,info) VALUES (NULL,'feicy',33,'student');

更新:UPDATE 表名 SET name ='police' WHERE id=17;

删除: DELETE FROM  表名 WHERE id=17;

索引

  索引的优点:

1、通过创建唯一索引,保证数据库表每行数据的唯一性

2、大大加快数据查询速度

3、在使用分组和排序进行数据查询时,可以显著减少查询中分组和排序的时间

 

索引的缺点:

1、维护索引需要耗费数据库资源

2、索引需要占用磁盘空间,索引文件可能比数据文件更快达到最大文件尺寸

3、当对表的数据进行增删改的时候,因为要维护索引,速度会受到影响

 

索引的分类

1、普通索引和唯一索引

主键索引是一种特殊的唯一索引,不允许有空值

2、单列索引和复合索引

单列索引只包含单个列

复合索引指多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。使用复合索引时遵循最左前缀集合

3、全文索引

全文索引类型为FULLTEXT,在定义索引的列上支持值的全文查找,允许在这些索引列中插入重复值和空值。全文索引可以在

CHAR、VARCHAR、TEXT类型列上创建。MYSQL只有MYISAM存储引擎支持全文索引

4、空间索引

空间索引是对空间数据类型的字段建立的索引,MYSQL中的空间数据类型有4种,

分别是GEOMETRY、POINT、LINESTRING、POLYGON。

MYSQL使用SPATIAL关键字进行扩展,使得能够用于创建正规索引类型的语法创建空间索引。创建空间索引的列,必须

将其声明为NOT NULL,空间索引只能在存储引擎为MYISAM的表中创建

普通索引

 CREATE TABLE `book` (

  `bookid` INT(11) NOT NULL,

  `bookname` VARCHAR(255) NOT NULL,

  `authors` VARCHAR(255) NOT NULL,

  `info` VARCHAR(255) DEFAULT NULL,

  `comment` VARCHAR(255) DEFAULT NULL,

  `year_publication` YEAR(4) NOT NULL,

  KEY `year_publication` (`year_publication`)

) ENGINE=MYISAM DEFAULT CHARSET=latin1

唯一索引

 CREATE TABLE `t1` (                                                                                                                        

          `id` int(11) NOT NULL,                                                                                                                   

          `name` char(30) NOT NULL,                                                                                                                

          UNIQUE KEY `UniqIdx` (`id`)                                                                                                              

  ) ENGINE=MyISAM DEFAULT CHARSET=utf8 

复合索引

CREATE TABLE `t3` (                                                                                                                                                                                             

          `id` int(11) NOT NULL,                                                                                                                                                                                        

          `NAME` char(30) NOT NULL,                                                                                                                                                                                     

          `age` int(11) NOT NULL,                                                                                                                                                                                       

          `info` varchar(255) DEFAULT NULL,                                                                                                                                                                             

          KEY `MultiIdx` (`id`,`NAME`,`age`)                                                                                                                                                                            

 ) ENGINE=MyISAM DEFAULT CHARSET=utf8  

全文索引

 CREATE TABLE `t4` (                                                                                                                                                                                             

          `id` int(11) NOT NULL,                                                                                                                                                                                        

          `name` char(30) NOT NULL,                                                                                                                                                                                     

          `age` int(11) NOT NULL,                                                                                                                                                                                       

          `info` varchar(255) DEFAULT NULL,                                                                                                                                                                             

          FULLTEXT KEY `FulltxtIdx` (`info`)                                                                                                                                                                            

) ENGINE=MyISAM DEFAULT CHARSET=utf8 

空间索引

CREATE TABLE `t5` (                                                                                            

          `g` GEOMETRY NOT NULL,                                                                                       

          SPATIAL KEY `spatIdx` (`g`)                                                                                  

) ENGINE=MYISAM DEFAULT CHARSET=utf8

数据库的备份

  数据库导出

 Mysqldump -hlocalhost -uroot -p 数据库名称 [表名称] > C:/filename.sql;

 数据库的导入

 Mysqldump -hlocalhost -uroot -p 数据库名 <C:/filename.sql;

 登录mysql后导入sql的命令

 Source:”路径名”/filename.sql;

utf8mb4字符集

utf8mb4 字符集:支持 emoji 表情符号

限制:需要 >= MySQL 5.5.3版本、从库也必须是5.5的了、低版本不支持这个字符集、复制报错

php中的文件上传处理

Form表单中的enctype 属性

要完成文件上传处理首先要在html的表单中的enctype属性改为multipart/form-data

upload_tmp_dir:当进行文件上传时,临时文件存放的目录,对于 Linux/UNIX 用户来说,要特别注意,当前 PHP 用户必须拥有这个目录的写权限。 upload_max_filesize:这个配置项指定了允许上传文件大小的最大值, php.ini 默认值是 2M

全局变量$_FILES

$_FILES[‘input里面的name’][‘name’];表示客户端文件的原始名称

$_FILES[‘input里面的name’][‘type’];表示上传的文件类型

$_FILES[‘input里面的name’][‘size’];表示已上传的文件的大小

$_FILES[‘input里面的name’][‘tmp_name’];表示文件上传后,在服务器端存储的临时文件

$_FILES[‘input里面的name’][‘error’];表示文件上传的相关错误信息

Move_uploaded_file(filename,destination);

Move_uploaded_file()函数 将上传的文件移动到指定的目录下

 Filename:合法的上传文件

Destination:移动后的目标文件

PHP中强制类型转换

(int)--转换为整型

(bool)--转换为bool型

(float)--转换为浮点型

(string)--转换为字符串型

(array)--转换为数组

(object)--转换为对象

PHP中三目运算

条件运算符( ? :)的用法是:expr1 ? expr2 : expr2可以看出,条件运算符有 个操作数,所以它是三目运算符。它的计算规则是:如果表达式 expr1的值为 TRUE,那么整个表达式的值就取 expr2 的值,否则,就取 expr3 的值。

下面的代码使用条件运·86·算符来获取两个数中最大的那个数。

$max = ($a>=$b) ? $a : $b当表达式$a>=$b 为 TRUE,那么整个表达式的值就是变量$a 的值,这意味着,会将$a 的值赋给变量$max,从而取得$a $b 之间较大的那个数

break 和 continue 语句

continue 语句和 break 语句的区别是, continue 语句只是结束本次循环,而 break 语句是终止整个循环的执行,不再做条件的判断。

代码break 语句的使用

<?php

         define(PI,3.14);

         for($r=1;$r<=10;$r++){

         $area = PI * $r * $r;

         if($area>100)

           break;

       echo "r=$r, area=$area";

        echo "<br/>";

       echo "<br/>";

     }

?>

上述程序计算半径 到 10 的圆的面积,直到面积大于 100 时为止。当面积 area>100 时,执行 break语句,中断循环,不再执行剩余的几次循环。程序的执行结果如图 2.25 所示。从程序的执行结果可以看出, for 循环只执行了 次就因 break 语句而退出,剩下的 次循环没有执行。

代码continue 语句的使用

<?php

     for($a=100;$a<=200;$a++){

         if($a%3==0)

           continue;

         echo $a;

         echo "<br/>";

     }

?>

上述程序将 100 到 2000 之间不能被 整除对数输出。当$a 能被 整除时,执行 continue 语句,结束本次循环,继续执行 for 循环语句。只有$a 不能被 整除时,才使用 echo 语句将该数字输出。

PHP 函数的传值与传址

传址方式传递函数参数

<?php

         $i = 100;

         function func(&$n){

             $n = $n+100; //因为传址传入变量$i,所以这里的变量$n 引用的就是$i 本身,此句等价于$i = $i+100

            }

        echo "调用函数 func 前: $i=$i";

        echo "<br/>";

        echo "<br/>";

        func($i); //$i 传入函数 func,因为是传址方式,所以此时函数内的变量$n 就是变量$i

        echo “调用函数 func 后: $i=$i";

  ?>

 传值方式传递函数参数

<?php

$i = 100;

function func($n){

$n = $n+100;

}

echo "调用函数 func 前: $i=$i";

echo "<br/>";

echo "<br/>";

func($i);

echo "调用函数 func 后: $i=$i.<br/>";

?>

函数和变量作用域

变量作用域演示程序

<?php

    $var = "some text";

function test(){

   $var = "some text in function";

    echo '这是局部变量$var: '.$var;

}

echo '这是全局变量$var: '.$var;

echo '<br/>';echo '<br/>';

test();

?>

在函数内部使用 global 关键字

<?php

      $a = 1997;

      $b = 1998;

      function sum(){

        global $a,$b;//声明全局变量

        $b = $a + $b;  //3995

   }

   echo '$a='.$a;  //1997

   echo '<br/>';

   echo '$b='.$b;  //1998

   echo '<br/>';

   echo '<br/>';

   sum();

   echo '$a + $b = '.$b; //1998

?>

PHP 的预定义变量

$GLOBALS:包含指向当前程序中全局范围内有效的变量,它是一个数组,该数组的索引(或键名)就是全局变量的名称。

$SERVER:该全局变量是一个包含诸如头信息、路径和脚本位置的数组。

常见的$_SERVER 的元素包括 PHP_SELF(当前正在执行的脚本的文件名)、 

                          SERVER_ADD(当前执行脚本所在服务器的 IP 地址)、

                          SERVER_NAME (当前执行脚本所在服务器主机的名称)、

                          DOCUMENT_ROOT(当前脚本所在文档的根目录)、 

                          SCRIPT_FILENAME(当前执行脚本的绝对路径)、

                          SCRIPT_NAME(当前脚本的路径)、 

                          HTTP_REFERER(链接到当前页面的前一页面的 URL)、

                          REQUEST_URI(访问此页面所需的 URI)等。

$_GET:通过 HTTP 的 GET 方法提交至脚本的表单变量。

$_POST:通过 HTTP 的 POST 方法提交至脚本的表单变量。

$_FILE:通过 HTTP 的 POST 文件上传提交至脚本的变量。

$_COOKIE:通过 HTTP 的 Cookies 方法提交至脚本的变量。

变量的类型

判断变量的类型

is_integer 判断变量是否为整数

is_string 判断变量是否为字符串。

is_double 判断变量是否为浮点数。

is_array 判断一个变量是否为数组。

设置变量的类型

Settype 设置一个变量的类型

$a=100; 

Settype($a,’string’);//此时变量a被设置为字符串类型

获取变量的类型

Gettype()取得一个变量的类型

$a=100;

Gettype($a);//获取变量a的类型

escape() 函数可对字符串进行编码

Document.cookie;//js中获取cookie

Sprintf()printf()函数区别

sprintf的作用是将一个格式化的字符串输出到一个目的字符串中,

<?php

$number = 2;

$str = "Shanghai";

$txt = sprintf("There are %u million cars in %s.",$number,$str);

echo $txt;

//There are 2 million cars in Shanghai.

?>

printf是将一个格式化的字符串输出到屏幕。

<?php

   $number = 9;

   $str = "北京";

   printf("在%s有 %u 百万辆自行车。",$str,$number);

//在北京有 百万辆自行车。

?>

获取url地址后面的后缀名

<?php 

$url = "http://www.abc.com/abc/de/fg.php?id=1";

//这个是自己写的

function getUrl($url) {

    $date = explode('?', $url);

    $date = basename($date[0]);

    $date = explode('.', $date);

    return $date[1];

}

echo getUrl($url);//php

<?php

 $file=”www.baidu.com”;

 PHP.ini中的有关配置

   Register_globals=off 如果设置为on,表单,url会话和cookie变量会成为全局变量

   Magic_quotes_gpc=off 这个设置会自动转义提交的数据,其在开发代码应根据需求对数据经行转义,而不能依赖于这个设置,因此要将其禁用

自动打印

function window.onload() {

        factory.printing.header = "" //页眉

        factory.printing.footer = "" //页脚

        factory.printing.portrait = false //true为纵向打印,flase为横向打印

        factory.printing.leftMargin = 0 //左页边距

        factory.printing.topMargin = 0 //上页边距

        factory.printing.rightMargin = 0 //右页边距

        factory.printing.bottomMargin = 0 //下页边距

}

原文地址:https://www.cnblogs.com/chenchenphp/p/5271004.html