学习PHP有一阵子,最近项目提前完成了,有不少时间,复习一下基础知识,主要从一下两个方面
1、PHP中新人常见的错误和问题
2、Mysql的使用
碰巧最近得到别人分享的PHP教程系列的文章。
一、如何避免乱码,常用的四种方法
A、文件乱码 1、入口文件的第一行,强制输出(常用)!<?php header("Content-type : text/html;charst=utf-8");?>
这段代码就相当于相当于页面里面的<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
2、html模板head部分 <meta http-equiv ="Content-Type" content ="text/html;charster=utf-8"/>
B、数据库乱码 1、数据库本身创建的时候指定编码(常用)
2、php链接mysql的时候设置
<?php
function getField($table_name){
$link =mysql_connect('localhost','root','1234abcd');
mysql_quert('use_daxue');
mysqll_query('set names utf8');
$result = mysql_query("desc{$table_name}");
}
总结就是在读取文件,数据库之前一定要将文字的解析变成utf-8的格式。
二、mysql中常见的错误总结
A、没有处理用户输入 这或者可以这样说:#1:永远不要相信用户的输入。用服务器的PHP验证每一个字符串,不要寄希望于JavaScript。最简单的SQL注入攻击会利用如下的代码:
B、相对于SQL,偏爱PHP 如果你接触Mysql不久,那么你就偏向于使用自己已经掌握的语言来解决问题,这样会导致写出一些冗余、低效率的代码。比如,不会使用 Mysql自带的AVG()函数,却会先对记录几种的值求和然后用PHP循环来计算平均值。此外,请注意PHP循环中的SQL查询。通常来说,执 行一个查询比在结果中迭代更有效率。所以,在分析数据的时候请用数据库系统的有事,懂一些SQL的知识将会大有裨益。
C、没有优化数据库查询 99%的PHP性能问题都是由数据库引起的,仅仅一个糟糕的SQL查询就能让你的web应用彻底瘫痪。MySQL的EXPLAIN statement、Query Profiler,还有很多其他的工具将会帮助你找出这些万恶的SELECT。
D、不能正确的使用数据类型
E、在查询中使用* 永远不要使用*来返回一个数据表所有列的数据。这是懒惰:你应该提取你所需要的数据。就算你需要所有字段,你的数据表也不可皮面 的会产生变化。
F、不使用索引或者过度使用索引 一般性的原则是这样:select语句中的热河一个where子句表示的字段都应该使用索引。
举个例子,假设我们有一个user表,包括numericID和email address。登录的时候,MySql必须以一个Email为依据查找正确的ID。如果使 用了索引的话,那么Mysql就能是用更快的搜索算法来定位email吗,甚至可以说是即时实现。否则,Mysql就只能顺序检查每一条记录知 道找到正确的email 啊dress。
有的人会在每一个字段上都添加索引,遗憾的是,执行了INSERT或者UPDATE之后忙着写索引都需要重新生成,这样就会影响性能。所 以,只在需要的时候添加索引。
三、几种常见的PHP特殊函数及其用法
A、echo B、print echo的别名 无论是效率,还是灵活度,都不及echo
C、exit 输出后就会终止整个php的运行,一下几种方法也都合法,但要注意:exit“a”;是不合法的:
exit; exit();exit('a');
四、学习PHP过程中必须掌握的常用函数
A、写入文件 1、打开资源(文件) fopen($filename,$mode)
2、写文件fwrite($handle,$str)
3、关闭文件fclose($handle)
4、一步写入file_put_contents($filename,$str,$mode) FILE_APPEND LOCK_EX
B、读文件 1.读文件fread($handle,字节数)
2.读一行fgets($handle);
3.读一个字符fgetc($handle)
4.读成一个数组中file($filename)
5,一步读取file_get_contents($filename)
C、目录操作
1,建目录mkdir($dirname)
2、删除目录rmdir($dirname)
3、打开目录句柄opendir($dirname)
4、读取目录条数readdir($handle)
5、关闭目录资源closedir($handle)
6、重置目录资源rewinddir($dirname)
D、目录和文件操作
1、检查文件或目录是否村子啊 file_exits($filename)
2、文件或者目录重命名rename($file)
E、文件操作
1、拷贝文件copy('原文件','目标文件')
2、删除文件unlink($filename)
3、获取文件大小filesize($filename)
4、取得文件的创建时间filectime()
5、取得文件的访问时间fileatime($filename)
6、取得文件的修改时间filemtime($filename)
F、路径操作
1、获取路径dirname($path)
2、获取文件名 basename($path)
3、获取路径信息 pathinfo($path)
G 数据函数(极其重要)
1、在数组开头插入一个元素array_unshift($arr,$v)
2、在数组的尾部添加数组袁术array_push($arr,$v,$v1...)
3、将数组的第一个元素移除,并返回此元素array_shift($arr)
4、在数组稳步删除元素array_pop($arr)
5、将数组用$separator连接成一个字符串implode($a,$arr)
6、检测变脸是否是数组is_array($arr)
7、获得数组的键名 array_keys($arr)
8、获得数组的键名 array_values($arr)
9、检索$value是否在$arr中,返回布尔值in_array($v,$arr)
10、检索在$arr中,是否有$key这个键名array_key_exits($k,$arr)
11.检索$value是否在$arr中,若存在返回键名Array_search($value,$arr)
12、将一个数组逆向排序,如果第二参数为true,则保持键名Array_reverse($arr,true)
13、交换数组的键和值Array_flip($arr)
14、统计数组元素的个数Count($arr)
15、统计数组中所有值的出现次数 Array_count_value($arr)
16、移除数组中的重复值Array_count_values($arr)
17、值由小到大排序Sort($arr)
18、值由大到小派讯Rsort($arr)
19、键由小到大排序ksort($arr)
20、键由大到小排序 ksort($arr)
21、随机从数组中取得$num个数Array_rand($arr,$num)
22、对数组的所有元素求和 Array_sum($arr)
23、合并数组array_merge($arr,$arr)
F 字符串函数
1.输出字符串 echo($str) echo
2.原样输出(区分单引号和双引号) print($str)
3.输出字符串,结束脚本执行 Die($str):die($str) die;
4.输出字符串,结束脚本执行 exit($str) exit;
5.输出格式化字符串 printf($str,$p1,...)
6.不直接输出格式化的字符串,返回格式化的字符串,保存到变量中 sprintf($str,$p1,...)
7.打印变量的相关信息 var_dump($p)
8.字符串转换为小写 strtolower($str)
9.字符串转换为大写 strtoupper($str)
10.将字符串的第一个字符转换为大写 ucfirst($str)
11.将字符串中每个单词转换为大写 ucwords($str)
12.去除字符串两端的空白字符。 Trim($str,' ,')
13.去除字符串左边空白字符。 Ltrim($str)
14.去除字符串右边空白字符。Rtrim($str)
空白字符:"","\t","\n","\r",”\0”
15取得字符串长度 strlen($str)
16统计包含的字符串个数 substr_count($str,’子串’)
17返回字符串$string中由$start开始,长度为$length的子字符串
Substr($string ,$start[,$length])
18返回字符串$string中,$search第一次出现到字符串结束的子字符串。
Strstr($string,$search)
19查找$search在$str中第一次位的置,从$offset开始。
Strpos($str,$search[,int $offset])
20.查找$search在$str中最后一次的位置,从$offset开始
Strrpos($str,$search[,int $offset])
21.替换$str中的全部$search为 $replace。
Str_replace($search,$replace,$str)
22.重复输出指定的字符串
Str_repeat()
23.加密字符串
Md5()
24.字符串翻转
Strrev()
25.使用一个字符串分割另一个字符串,形成一个数组//把字符串变成数组
Explode(“分隔符”,$str);