您好,欢迎访问一九零五行业门户网

PHP札记(PHP高级篇)

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 3byte 1000-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不支持的功能不支持全文索引占用空间比较大功能 myisam innodb
事务处理 不支持 支持
数据行锁定 不支持 支持
外键约束 不支持 支持
表空间占用 相对较小 较大
全文索引 支持 不支持
mysql默认字符集
推荐utf8字符集:用来定义mysql存储字符串的方式使用character set关键字指定字符集校对规则:对规则定义了比较字符串的方式使用collate指定校对规则数据操作语言(dml)
主要有三种形式:1) 插入:insertinsert 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长度的字符串为insertlower(str),upper(str):将字符串转换为大写,小写left(str,x) right(str,x) 返回str左边(右边)x个字符,x为null则返回nulllpad(str,n,pad) rpad(str,n,pad)  用pad对字符串str从最左边(右边)进行填充,直到总长度ntrim(str),ltrim(str),rtrim(str)去掉两边,左边,右边空格replace(str,a,b) 在字符串str中用字符串b替换所有的字符串astrcmp(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,返回fifnull(value1,value2):如果value1为空,则返回value2,如果value1不为空,返回value1case 
        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():将网络字节序转为ippassword():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,则返回falsemysql_affected_rows():获取受影响的行数从结果集中取出数据mysql_fetch_row($result):从结果集中取得一条数据,返回索引数组mysql_fetch_assoc($result):从结果集中取得一条数据,返回关联数组mysql_fetch_array($result):从结果集中取得一条数据,返回索引数组和关联数组mysql_fetch_object($result):从结果集中取得一条数据,返回对象mysql_data_seek($result,$row):将指针移动到指定位置从结果集中获取字段mysql_num_rows($result):获取结果集的字段数mysql_num_fields($result):获取结果集的列数mysql_field_name($result):获取结果集的字段名mysqli操作数据库
php5以后的新添加的功能都是面向对象的,所以mysqli是以对象的形式添加的mysqli优点表示改进功能增加效率大大增加更稳定mysqli扩展提供的三个类mysqli:和连接有关的类构造方法mysqli([$host [, $username [, $passd[, $dbname [,$port [, $socket ]]]]]] )连接成功返回对象,失败返回false查看连接失败信息connect_errno():返回连接错误号码connect_error():返回连接错误信息sql语句输入query(sql):执行sql语句,若语句有返回结果集,则函数执行成功返回结果集对象mysqli_result,若语句没有返回结果集,函数执行成功返回true方法affected-rows():返回影响行数errno():返回错误号error():返回错误信息insert_id():返回自动增长的id关闭资源
close():关闭连接mysqli_result:表达对数据库的查询所返回的结果集属性:$num_rows:结果集中记录数$field_count:结果集中字段数$current_field:获取当前列的位置方法:处理记录fetch_row():与mysql_fetch_row()一致fetch_assoc():与mysql_fetch_assoc()一致fetch_array():与mysql_fetch_array()一致fetch_object():与mysql_fetch_object()一致data_seek():与mysql_data_seek()一致free():释放结果集处理字段fetch_field():取出列信息,并作为对象返回fetch_fields():取出所有列信息,并作为对象返回field_seek():移动字段指针执行多条sql语句
multi_query(sql1[;sql2]):可执行多条sql语句,语句间用“;”隔开,若有多个结果集,则均会被返回next_result():返回multi_query()的下一个结果集more_results():检查是否含有下一个结果集mysqli_stmt:预处理类优点:mysqli和mysqli_result能完成的功能,mysqil_stmt都能完成效率比较高,执行多条相同的sql语句,只有数据不同的话,不用重复传语句,直接传数据即可防止sql注入,因为出入的数据只会当做值类使用,不会当做可执行语句创建对象创建好mysqli对象后,使用该对象的stmt_init()方法初始化mysqli_stmt对象准备并发送语句语句中的参数值要使用占位符“?”代替使用mysqli_stmt中的prepare($sql)方法将语句发送到服务器准备不用创建mysqli_stmt对象,直接使用mysqli中的prepare($sql)准备sql语句,并返回mysqli_stmt对象给占位符传值(绑定参数)使用bind_param($type,$var1[,$var2...])绑定参数$type可以为i、d、s、b,分别代表integer、double、string和二进制资源$type中的类型个数要与占位符相同,$var个数也要与占位符个数相同给变量$var赋值执行sql语句没有结果集返回使用execute()方法执行插入的参数,返回boolean类型有结果集返回使用bind_result($var1[,$var2...])绑定结果集使用fetch()执行语句,每次获取一条结果,并传递到bind_result()中的变量使用store_result()执行语句,将所有结果一次性取出,返回结果集,再用fetch()获取每一条记录result_matedate()返回结果集,用于获取字段信息使用result_free()释放结果集关闭资源使用close()方法关闭函数
mysqli和mysqli_result支持函数,mysqli_stmt基本都支持事务处理建立表表类型为myisam不支持事务功能,需要建立innodb类型的表关闭自动提交autocommit():参数为0或false时,关闭自动提交提交事务commit():提交事务(多条执行后的sql语句)回滚事务rollback():回滚事务(多条已执行的sql语句)其他方法set_charset($string):设置取出字符集pdo
优点:更换数据库时,不用更改代码缺点:效率不如mysql和mysqli高三个类pdo:代表 php 和数据库服务之间的一个连接创建pdo对象dpo($dsn,$username,$passd[,$array]):$dsn连接mysql数据库时,设置为'mysql:host=ip:port;dbname=$string',$array为调优参数dsn(data source name)数据源:包括主机位置、库名和不同数据库所需驱动可用getattribute($attribute)查看属性,使用setattribute($attribute,$value)设置属性执行sql语句
query($string):执行有结果集返回的语句,返回预处理对象pdostatementexec($string):执行对表有影响的语句,返回被影响行数设计错误报告使用setattribute()设置错误报告模式errmode_silent:不显示错误,开发人员自行检查错误errorcode:返回错误号码errorinfo:返回错误信息数组errmode_warning:发生错误,显示一个e_warning消息errmode_exception:发生错误,抛出pdoexception异常事务处理使用setattribute(),设置开启事务处理,关闭自动提交使用commit()提交已执行的sql语句使用rollback()回滚已执行的sql语句pdostatement:代表一条预处理语句,并在该语句被执行后代表一个相关的结果集作用准备一条语句处理结果集准备并发送语句语句中的参数值可使用占位符“?”占位符“:占位符名字”代替使用pdo::prepare($sql)方法将语句发送到服务器准备,返回pdostatement对象,存储结果集给占位符传值(绑定参数)使用bind_param($key,$value)绑定参数“?”占位符$key设置为索引号,$value设置为传送值名字占位符$key设置为键名$value设置为传送值sql语句执行使用execute()方法执行已绑定参数的语句使用execute($array),$array数组中添加参数,避免绑定参数记录获取
使用fetch()获取结果集中的每一条记录,返回索引和关联混合数组参数为pdo::fetch_assoc,返回关联数组参数为pdo::fetch_num,返回索引数组参数为pdo::fetch_both,返回索引关联混合数组fetchall()获取结果集的每一条记录,返回二维数组使用setfatchmode()设置获取模式,就可以避免每次获取都要设置模式字段获取
columncount()获取字段数getcolumnmeta()返回结果集中一列的元数据pdoexception:代表一个由 pdo 产生的错误。在自己的代码不应抛出一个 pdoexception 异常使用try catch捕获各种异常,包括连接异常、sql语句异常等mamcache/memcached
一个高性能的分布式的内存对象缓存系统。通过在内存中维护一个巨大的hash表,维护内存中的数据工作原理php第一次查询数据时,会将数据存储在mamcache中,下次查询时,先访问mamcache。安装linux下安装基于libevent事件,所以必须先安装libevent库
windows下安装默认端口11211memcache命令commanddescriptionexample
get reads a value get mykey
set set a key unconditionally set mykey 0 60 5
add add a new key add newkey 0 60 5
replace overwrite existing key replace key 0 60 5
append append data to existing key append key 0 60 15
prepend prepend data to existing key prepend key 0 60 15
incr increments numerical key value by given number incr mykey 2
decr decrements numerical key value by given number decr mykey 5
delete deletes an existing key delete mykey
flush_all invalidate specific items immediately flush_all
invalidate all items in n seconds flush_all 900
stats prints general statistics stats
prints memory statistics stats slabs
prints memory statistics stats malloc
print higher level allocation statistics stats items
  stats detail
  stats sizes
resets statistics stats reset
version prints server version. version
verbosity increases log level verbosity
quit terminate telnet session quit
php中使用memcache
类:memcache连接:memcache::connect($host,$port)1 php2 $memcache = new memcache;3 $memcache->connect(localhost,11211) or die(could not connect);
其他方法add:添加数据set/replace:修改数据get:获取数据delete:删除数据......何时使用memcache数据库中读出来的数据,方便下次使用会话控制中使用技巧用sql语句作为key用md5()修改sql语句,使sql语句变短,便于保存会话控制:面向连接的可靠的连接方式,通过会话控制,判断用户的登录行为
cookie技术服务器给客户端的一个文件,通过客户端的这个文件,保存用户信息,服务器根据文件,区分用户设置cookiesetcookie($key,$value,$time):头信息,不能有任何输出获取cookie使用全局数组$_cookie[]获取cookie内容删除cookieti用setcookie设置$value为空或不设置,$time设置为0或不设置session技术在服务器中保存用户数据,会产生一个sessionid,可使用cookie和url传递该idsession配置配置服务器端的php.ini开启会话session_start():让php的核心程序将和session有关的内建环境变量预先载入到内存中开启一个会话基于cookie的session,使用该函数不能有任何输出返回已开启的会话设置和获取session使用$_session[]设置和获取sessionsession_id()获取和设置session的id删除session$_session=array();将session设置为空数组删除cookie中的sessionsession_destory():销毁session基于url传递sessionid,设置url的参数为session_name,session_start()后,会自动寻找该参数常量sid,当用户关闭cookie时,该常量表示session_name和session_id;当用户开启cookie时,该常量为空设置php.ini中的session.use_trans_sid=1,会使页面跳转(超链接、header、表单)后面自动添加sidsession高级技术php.ini中,session的设置session_name:设置存在cookie以及sid中的session_namesession.use_trans_sid:设置sid是否开启,开启后,可自动添加sidsession.save_path:设置session文件的保存位置,如果不设置,则不生成session文件session.gc_maxlifetime:设置session文件有效时间,超过该时间session未刷新,session文件将失效session.gc_probability和session.gc_divisor结合使用,定义session垃圾回收概率,算法为session.gc_probability/session.gc_divisorsession.use_cookie:设置session写入到cookie中session.cookie_path:设置哪些文件的session写入到cookie中session.cookie_lifetime:设置session的生命周期session.save_handler:设置session写入方式及位置,当值为user时,可使用session_set_save_handler()函数session_set_save_handler(open(),close(),read(),write(),destroy(),gc()):可自定义session文件的存储路径及存储方式等使用该函数定义了各个方法,像往常一样使用sessionopen():在执行session_start()时,被调用close():在执行session_write_close()时,被调用read():在调用open()后,被调用write():脚本结束时和session_write_close()执行时,被调用destroy():当session使用session_destroy()或者session_regenerate_id()被销毁时,被调用gc():由session.gc_probability和session.gc_divisor决定,任何时候军可能被调用 具体用法将session写入数据库将session写入memcache至此,php的基础学习算是完成了,需要多做多学,方能提高!
其它类似信息

推荐信息