PHP官方目前已经将此系列函数标记为弃用状态,添加PHP对mysql的支持,编译时使用下面的参数
--enable-mysqlnd
--with-pdo-mysql
--with-mysqli
--with-mysql=mysqlnd
mysql_*系列函数不支持 预处理语句,事务,存储过程,异步查询,多条语句查询, 这也是强烈建议使用pdo_mysql或者mysqli的原因. pdo是PHP的数据数据抽象层,为了扩展升级考虑,最好使用pdo_mysql
使用pdo_mysql扩展,查询前进行sql语句预处理,不仅能很有效的避免sql注入,同时一个查询如果被执行多次,那么只需要给预处理的sql语句重新绑定参数,大大提升查询的性能,降低资源(cpu)消耗
good style:
<?php
phpinfo();
bad style:
<?php
phpinfo();
?>
在最后一行加上闭合标签,很可能会由于不小心,在闭合标签之后加入空白字符,比如换行,示例如下:
<?php
phpinfo();
?>
//here ,some of whitespace
那么假设此文件包含在另外一个文件中,且在上述代码之后使用header函数输出,那么就会报错,这种错误很难被发现 只有当你在模板文件中才会需要闭合标签 如下
<h1><?php echo $title; ?></h1>
<p><?php echo $description; ?></p>
知道如何避免上述提到的安全问题 比如使用pdo_msyql预处理语句,防范sql注入 比如对用户输入进行过滤,防范xss攻击等等 始终记着对用户输入进行验证,即使客户端使用js对用户数据进行验证了,也不能取代服务器端的验证,客户端js验证是可以绕过的 具体请查看php手册安全部分内容
对于用户输入的数据进行验证和过滤,不要忘记PHP内置的filter_*,尽可能的使用他们了解他们 http://cn2.php.net/manual/en/book.filter.php
比如验证一个邮件地址是否合法
if(!filter_var($emailAddress, FILTER_VALIDATE_EMAIL)) {
//Email is invalid. Show the user an error message.
}
即针对同一功能或者业务的代码,尽可能只有一个实现,新手容易犯的错误就是喜欢copy,copy是大忌 比较好的做法就是快速完成需求和功能,然后进行重构,压缩减少代码量,重构的过程会让你的代码更加精简
开启apc或者opcode对性能的提升很大,你需要做的,仅仅是编译安装一个额外的扩展
opcode在php-5.5集成到核心代码中,编译时 --enable-opcode
即可
<meta charset="utf-8">
$db = new PDO('mysql:host=localhost;dbname=database;charset=utf8', 'root', '');
合理使用字段类型,不仅能减少磁盘使用量,也能提升查询性能
文中如有纰漏,错误之处,请指出 对于后续中列出的其他建议,如果有人觉得需要详细展开,请留言。 参考或者原文出处:PHP – Best Practises