PHP学习日记

  • 格式:docx
  • 大小:116.62 KB
  • 文档页数:3

PHP学习日记
1、$_POST[]、$_GET[]一般的写法是变量用单引号,字符串等用双引号,如$_POST[‘submit’]。

至于加引号的区别:加单引号的效率比不加引号效率高,原因在于,不加引号的$_POST[submit],php会先去检查php全文中是否有定义submit这个常量,如果找不到,才会把submit当着字符串,然后去找$_POST['submit']的值;而如果加了引号,就不会有去判断submit是否为常量这一步,而是直接找$_POST['submit']的值;所以,最好是每个地方都应该加上引号,至于sql语句里面加单引号,出错,那是你外面用了单引号,里面还用单引号,自然要出错,需要进行斜杠转义。

如:"INSERT INTO message(id,user,title,content,lastdate) values ('','$_POST[user]','$_POST[title]','$_POST[content]',now())"中再用$_POST[‘user’]则会报错。

2、PHP防SQL注入,有PDO->prepare及正则表达式规范用户输入即可,无需addslashes 之类的来防注入,因为addslashes问题更多,如提交的正文中确实包含the students's union , 替换后将篡改本来的内容,滥杀无辜。

3、索引会加快查询(select)的速度,但是会减慢(insert和delete)的速度,需要自己根据业务和数据权衡使用,很难有定论。

4、为查询缓存优化你的查询
大多数的MySQL服务器都开启了查询缓存。

这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的。

当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样,后续的相同的查询就不用操作表而直接访问缓存结果了。

这里最主要的问题是,对于程序员来说,这个事情是很容易被忽略的。

因为,我们某些查询语句会让MySQL不使用缓存。

请看下面的示例:
上面两条SQL语句的差别就是CURDATE(),MySQL的查询缓存对这个函数不起作用。

所以,像NOW()和RAND()或是其它的诸如此类的SQL函数都不会开启查询缓存,因为这些函数的返回是会不定的易变的。

所以,你所需要的就是用一个变量来代替MySQL的函数,从而开启缓存。

5、不用timestamp时间戳数据类型(CURRENT_TIMESTAMP预设当前时间)
日期类型存储空间日期格式日期范围
datetime8 bytes YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 timestamp 4 bytes YYYY-MM-DD HH:MM:SS 1970-01-01 00:00:01 ~ 2038 timestamp比较受时区timezone的影响以及MYSQL版本和服务器的SQL MODE的影响
6、设置MySql数据库外键,保证数据的完整及一致性
外键必须是另外一个表的主键,建立关联关系,可能取值为No Action与Restrict(删除外表中某条数据时,首先检查该记录是否有对应外键,如果有则不允许删除), Cascade(级
联删除,即删除外表中的某条数据,自动删除引用此表的关联数据),Set Null(设置子表中该外键值为null,不过这就要求该外键允许取null)属性。

7、为搜索字段建索引
索引并不一定就是给主键或是唯一的字段。

如果在你的表中,有某个字段你总要会经常用来做搜索,那么,请为其建立索引吧。

从上图你可以看到那个搜索字串“last_name LIKE …a%‟”,一个是建了索引,一个是没有索引,性能差了4倍左右。

另外,你应该也需要知道什么样的搜索是不能使用正常的索引的。

例如,当你需要在一篇大的文章中搜索一个词时,如:“WHERE post_content LIKE …%apple%‟”,索引是没有意义的。

MySQL只对以下操作符才使用索引:<,<=,=,>,>=,between,in,以及某些时候的like(不以通配符%或_开头的情形)
8、int型数据unsigned(无符号)表示为正整数,默认为负整数至正整数,所以设置每个表的ID,都最好设置为INT,属性为unsigned,自增,主键。

9、静态变量(static),不会因为重新调用函数而重新赋值,而是会保存每次运算完的结果,第二次调用get_count()前,$count已经为1,不会被static $count = 0;重新赋值
<?php
$count= 5;
function get_count(){
static$count= 0;
return$count++;
}
echo$count;//5
++$count;
echo get_count();//0
echo get_count();//1
?>
10、PHP中的=>,->是什么意思?
=>用于数组的键=>值
->一般用于对象的对象->对象属性和对象->对象方法。

11、函数list()可以在遍历数组时一次赋给变量,通常和each()函数配合使用。

用list()函数使访问each()返回的键和值变得更加简单了。

实例:
代码如下复制代码
<?php
$date=array(1=>"Monday",
2=>"Tuesday",
3=>"Wednesday");
list($key,$value)=each($date); /* 遍历函数 */
echo "$key $value" ."<br>"; /* 输出第一个数组 */
$next=next($date); /* 指针后移 */
echo "$next";
?>
ps:list()函数刚好与array()函数相反,array()将一系列数据构造成数组,而list()则将数组拆分成数据。

12、使用count(*)与fetchColumn()来统计总数
<?php
$sql = $pdo->prepare("SELECT COUNT(*) FROM foo");
$sql->execute();
$col = $sql->fetchColumn();
echo$col;
?>
一般使用fetchColumn()来进行count统计或者某些只需要单字段的记录很好操作。