·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> 网站建设开发 >> php网站开发 >> PHP笔记(PHP高级篇)

PHP笔记(PHP高级篇)

作者:佚名      php网站开发编辑:admin      更新时间:2022-07-23
php笔记(PHP高级篇)

高级篇中将涉及数据库的使用以及Cookie和session会话,提高PHP的开发效率和运行效率

PHP程序员需要掌握的MySQL操作

  • 为项目设计表
  • 使用SQL语句
  • MySQL的目录结构
    • data目录中存放的是库文件
    • bin目录中存放的是MySQL管理命令
    • *.ini文件记录的是MySQL的配置

连接MySQL DB:

  • mysql -h sql地址 -u 用户名 -p密码,如mysql -h localhost -u root -p123456
  • 安全的方法:先输入“mysql -h sql地址 -u 用户名 -p”,回车,再输入密码

数据定义语言(DDL)

  • 定义:用来创建数据库中的各种对象-----表、视图、索引、同义词、聚簇等
  • SQL语句
    • 创建数据库
    • CREATE DATABASE [IF NO EXISTS] DatabaseName
    • 创建表
CREATE TABLE [IF NOT EXISTS] TableName (colname1 type [PRoperty] [index],colname2 type [property] [index],...)[tableType] [tableCharSet];
  • 修改表
    • alter table 操作
  • 数据类型
    • 数值型
      • UNSIGNED:指定为无符号存储
      • 整型
        • TINYINT 1 Byte(-128,127) (0,255) 小整数值SMALLINT 2 Byte (-32 768,32 767) (0,65 535) 大整数值MEDIUMINT 3 Byte (-8 388 608,8 388 607) (0,16 777 215) 大整数值INT或INTEGER 4 Byte (-2 147 483 648,2 147 483 647) (0,4 294 967 295) 大整数值BIGINT 8 Byte (-9 233 372 036 854 775 808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) 极大整数值
      • 浮点型
        • FLOAT 4 字节 (-3.402 823 466 E+38,1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) 0,(1.175 494 351 E-38,3.402 823 466 E+38)
        • DOUBLE 8 字节 (1.797 693 134 862 315 7 E+308,2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)
    • 字符型
      • CHAR 0-255Byte 定长字符串,VARCHAR 0-255Byte 变长字符串,必须指定长度TINYBLOB 0-255Byte 不超过 255 个字符的二进制字符串TINYTEXT 0-255Byte 短文本字符串BLOB 0-65 535Byte 二进制形式的长文本数据TEXT 0-65 535Byte 长文本数据MEDIUMBLOB 0-16 777 215Byte 二进制形式的中等长度文本数据MEDIUMTEXT 0-16 777 215Byte 中等长度文本数据LOGNGBLOB 0-4 294 967 295Byte 二进制形式的极大文本数据LONGTEXT 0-4 294 967 295Byte 极大文本数据
      • CHAR的处理速度比较快,VARCHAR具有可变大小
      • 二进制保存主要用于保存非文本文件
      • ENUM,枚举类型,最多能存储65535个值,一个字段只能存一个值
      • SET,集合类型,最多可存储64个值,一个值段可存多个值
    • 日期型
      • DATE 3Byte1000-01-01/9999-12-31 YYYY-MM-DD 日期值TIME 3Byte '-838:59:59'/'838:59:59' HH:MM:SS 时间值或持续时间YEAR 1Byte 1901/2155 YYYY 年份值DATETIME 8Byte 1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和时间值TIMESTAMP 8Byte 1970-01-01 00:00:00/2037 年某时 YYYYMMDD HHMMSS 混合日期和时间值,时间戳

※任何数据类型以字符串的形式存入,都可以自动转换类型

※将时间保存为php时间戳,方便运算

数据字段属性

  • unsigned:设置该字段为无符号数值,只能是数值型
  • zerofill:设置该字段的记录的值未达到指定位数时,用“0”填充,只能是数值型
  • auto_increment:设置该字段的值自动增长,也可设定自定义值,需要同时设定索引或主键,只能是数值型
  • null和not null:设置该字段是否允许为空,建议设定为非空,配合default使用
  • default:设置该字段的默认值,若不输入,使用默认值

索引

  • 优点:
    • 提高查询速度
  • 缺点:
    • 创建和维护成本比较高
    • 占用资源
  • 主键索引(primary key):索引值必须唯一,每张表只有一个
  • 唯一索引(unique):索引值必须唯一,但一张表可以有多个
  • 常规索引(index):最基本的索引,没有太多的限制
  • 全文索引(filltext):只能在MyISAM上使用,表越大,效果越好,但速度较慢
  • 创建和使用,可查看MySQL索引类型一览表 让MySQL高效运行起来

数据表类型及存储位置

  • MySQL可以针对不同的存储引擎需求可以选择最优的存储引擎
  • 数据表类型即存储引擎
  • 使用type或engine关键字指定表类型
  • 常用的表类型
    • MyISAM
      • 强调快速读取操作
      • 对一些功能不支持(事务)
    • InnoDB
      • 支持一些MyISAM不支持的功能
      • 不支持全文索引
        • 占用空间比较大
          功能MyISAMInnoDB
          事务处理不支持支持
          数据行锁定不支持支持
          外键约束不支持支持
          表空间占用相对较小较大
          全文索引支持不支持

MySQL默认字符集

  • 推荐utf8
  • 字符集:用来定义MySQL存储字符串的方式
    • 使用character set关键字指定字符集
  • 校对规则:对规则定义了比较字符串的方式
    • 使用collate指定校对规则

数据操作语言(DML)

  • 主要有三种形式:
    • 1) 插入:INSERT
      • insert into tablename[(字段列表)] values(值列表1)[,(值列表2)...]
        • 表名后面,若有字段列表,则值列表与字段列表一一对应,若没有字段列表,则值列表与表中的字段一一对应
    • 2) 更新:UPDATE
      • update tablename set 字段名='值' [条件]
    • 3) 删除:DELETE
      • delete from tablename [条件]
    • 可以使用运算符,包括算术运算符、逻辑运算符、比较运算符、位运算符

数据查询语言(DQL)

  • 基本结构是由SELECT[ALL|DISTINCT]子句,FROM子句,WHERE
    • 子句组成的查询块:
      • SELECT <字段列表>
      • FROM <表或视图名>
      • [WHERE<查询条件>/GROUP BY/ORDER BY]
    • DISTINCT表示不显示重复的记录
    • 使用as关键字,可为字段名起别名,用于可能产生歧义的字段名

数据控制语言(DCL)

  • 定义:用来授予或回收访问数据库的某种特权,并控制数据库操纵事务发生的时间及效果,对数据库实行监视等。

MySQL内置函数

  • 位置:select语句,及子句where order by having 中,update delete语句及子句
  • 函数中可以将字段名当作变量来用,变量的值就是该列对应的所有值
  • 常用
    • 字符串函数
      • concat:把传入的参数连接成一个字符串
      • insert(str,x,y,insert):从str的x位置开始,替换y长度的字符串为insert
      • lower(str),upper(str):将字符串转换为大写,小写
      • left(str,x) right(str,x) 返回str左边(右边)x个字符,x为null则返回null
      • lpad(str,n,pad) rpad(str,n,pad) 用pad对字符串str从最左边(右边)进行填充,直到总长度n
      • trim(str),ltrim(str),rtrim(str)去掉两边,左边,右边空格
      • replace(str,a,b) 在字符串str中用字符串b替换所有的字符串a
      • strcmp(s1,s2):如果S1比S2小,返回-1;如果S1比S2大则返回1;如果相等则返回0(比较的是ASCII码)

      • substring(str,x,y) 返回字符串str中从位置x起,长度为y的子字符串
    • 数值函数
      • abs(x):返回绝对值
      • ceil(x):返回大于x的最小整数
      • floor(x):返回小于x的最大整数
      • mod(x,y):返回x与y的模
      • rand():返回0-1之间的随机数
      • round(x,y):返回参数x的y位小数的四舍五入结果
      • truncate(x,y):返回数字x截断为y位小数的结果
    • 日期函数
      • curdate():返回当前年月日
      • curtime():返回当前时分秒
      • now():返回当前日期
      • unix_timestamp(time):返回unix时间戳
      • from_unixtime():将Unix时间戳转换为日期
      • week():返回时间戳的周
      • year():返回时间戳的年
      • hour():返回时间戳的小时
      • minute():返回时间戳的分钟
      • month():返回时间戳的月
      • date_format(time,"%Y-%m-%d %H:%i:%s"):格式化返回时间
    • 流程控制函数
      • if(value,t,f):如果value值为true,返回t,如果value值为false,返回f
      • ifnull(value1,value2):如果value1为空,则返回value2,如果value1不为空,返回value1
      • case when value1 then value2 when value3 then value4 ...... else fault END
        • 当value1为true,返回value2,当value3位true,返回value4,以此类推,否则返回fault
        • 其他用法:mysql 语句case when
    • 其他函数
      • database():返回数据库名
      • version():返回MySQL版本
      • user():返回MySQL的用户
      • inet_aton(ip):将IP转换为网路字节序
      • inet_nton():将网络字节序转为IP
      • passWord():MySQL用户密码加密
      • md5(str):将字符串加密

PHP操作数据库

  • 连接数据库
    • mysql_connect(IP,user,psw):IP为数据库地址,user为用户名,psw为用户密码,连接成功,返回数据库资源,连接失败,返回false
  • 选择库
    • mysql_select_db($dbname,[$res]):$dbname为库名称;$res为连接数据库是返回的资源,若不添加该参数,则默认为最近创建的数据库资源
  • SQL语句输入
    • mysql_query():执行SQL语句,若语句有返回结果集,则函数执行成功返回结果集,若语句没有返回结果集,函数执行成功返回true
  • 解决错误
    • mysql_errno():返回错误号
    • mysql_error():返回错误信息
  • 关闭数据库资源
    • mysql_close():关闭数据库资源,不使用参数,默认关闭开启的资源(推荐)
  • 函数
    • mysql_insert_id():返回自动增长的id,若没有设置AUTO_INCREMENT,则返回false
    • mysql_affected_rows():获取受影响的行数
  • 从结果集中取出数据
    • mysql_fetch_row($result):从结果集中取得一条数据,返回索引数组
    • mysql_fetch_assoc($result):从结果集中取得一条数据,返回关联数组
    • mysql_fetch_array($result):从结果集中取得一条数据,返回索引数组和关联数组