PHP学习日记1、$_POST[]、$_GET[]一般的写法是变量用单引号,字符串等用双引号,如$_POST[‘submit’]。至于加引号的区别:加单引号的效率比不加引号效率高,原因在于,不加引号的$_POST[submit],php会先去检查php全文中是否有定义submit这个常量,如果找不到,才会把submit当着字符串,然后去找$_POST['submit']的值;而如果加了引号,就不会有去判断submit是否为常量这一步,而是直接找$_POST['submit']的值;所以,最好是每个地方都应该加上引号,至于sql语句里面加单引号,出错,那是你外面用了单引号,里面还用单引号,自然要出错,需要进行斜杠转义。如:INSERTINTOmessage(id,user,title,content,lastdate)values('','$_POST[user]','$_POST[title]','$_POST[content]',now())中再用$_POST[‘user’]则会报错。2、PHP防SQL注入,有PDO-prepare及正则表达式规范用户输入即可,无需addslashes之类的来防注入,因为addslashes问题更多,如提交的正文中确实包含thestudents'sunion,替换后将篡改本来的内容,滥杀无辜。3、索引会加快查询(select)的速度,但是会减慢(insert和delete)的速度,需要自己根据业务和数据权衡使用,很难有定论。4、为查询缓存优化你的查询大多数的MySQL服务器都开启了查询缓存。这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的。当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样,后续的相同的查询就不用操作表而直接访问缓存结果了。这里最主要的问题是,对于程序员来说,这个事情是很容易被忽略的。因为,我们某些查询语句会让MySQL不使用缓存。请看下面的示例:上面两条SQL语句的差别就是CURDATE(),MySQL的查询缓存对这个函数不起作用。所以,像NOW()和RAND()或是其它的诸如此类的SQL函数都不会开启查询缓存,因为这些函数的返回是会不定的易变的。所以,你所需要的就是用一个变量来代替MySQL的函数,从而开启缓存。5、不用timestamp时间戳数据类型(CURRENT_TIMESTAMP预设当前时间)日期类型存储空间日期格式日期范围datetime8bytesYYYY-MM-DDHH:MM:SS1000-01-0100:00:00~9999-12-3123:59:59timestamp4bytesYYYY-MM-DDHH:MM:SS1970-01-0100:00:01~2038timestamp比较受时区timezone的影响以及MYSQL版本和服务器的SQLMODE的影响6、设置MySql数据库外键,保证数据的完整及一致性外键必须是另外一个表的主键,建立关联关系,可能取值为NoAction与Restrict(删除外表中某条数据时,首先检查该记录是否有对应外键,如果有则不允许删除),Cascade(级联删除,即删除外表中的某条数据,自动删除引用此表的关联数据),SetNull(设置子表中该外键值为null,不过这就要求该外键允许取null)属性。7、为搜索字段建索引索引并不一定就是给主键或是唯一的字段。如果在你的表中,有某个字段你总要会经常用来做搜索,那么,请为其建立索引吧。从上图你可以看到那个搜索字串“last_nameLIKE‘a%’”,一个是建了索引,一个是没有索引,性能差了4倍左右。另外,你应该也需要知道什么样的搜索是不能使用正常的索引的。例如,当你需要在一篇大的文章中搜索一个词时,如:“WHEREpost_contentLIKE‘%apple%’”,索引是没有意义的。MySQL只对以下操作符才使用索引:,=,=,,=,between,in,以及某些时候的like(不以通配符%或_开头的情形)8、int型数据unsigned(无符号)表示为正整数,默认为负整数至正整数,所以设置每个表的ID,都最好设置为INT,属性为unsigned,自增,主键。9、静态变量(static),不会因为重新调用函数而重新赋值,而是会保存每次运算完的结果,第二次调用get_count()前,$count已经为1,不会被static$count=0;重新赋值?php$count=5;functionget_count(){static$count=0;return$count++;}echo$count;//5++$count;echoget_count();//0echoget_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(SELECTCOUNT(*)FROMfoo);$sql-execute();$col=$sql-fetchColumn();echo$col;?一般使用fetchColumn()来进行count统计或者某些只需要单字段的记录很好操作。