必看!PHP开发者常犯的10个MySQL差错
1、使用MyISAM而不是InnoDB
MySQL有许多的数据库引擎,简单般也就用MyISAM和InnoDB。
MyISAM是默许使用的。但是除非你是创立一个非常简便的数据库或者只是实验性的,那么到大多数时候这个选中是错误的。
MyISAM不支撑外键的束缚,这是包管数据完全性的精髓所在啊。别的,MyISAM会在增加或者更新数据的时候将整个表锁住,这在
今后的扩展机能上会有很大的问题。
解决方法很简便:使用InnoDB。不外这里我一样都试用了MyISAM
2、使用PHP的mysql办法
PHP从一开端就供给了MySQL的函数库。许多程序都依靠于mysql_connect、mysql_query、mysql_fetch_assoc等等,但是PHP手
册中倡议:
假如你使用的MySQL版本在4.1.3之后,那么热烈倡议使用mysqli扩展。
mysqli,或者说MySQL的高级扩展,有一些长处:
有面向对象的接口
prepared statements(预处置语句,可以有效防止SQL-注入攻击,还能提高机能)
支撑多种语句和事务
别的,假如你想支撑多数据库那么应当思考一下PDO。
3、不外滤会员输入
应当是:永久别信赖会员的输入。用后端的PHP来校验过滤每一条输入的信息,不要信赖Javascript。像下面这样的SQL语句很容易就会被攻击:
$username = $_POST["name"]; $password = $_POST["password"]; $sql = "SELECT userid FROM usertable WHERE username='$username'AND password='$password';"; // run query...
这样的代码,假如会员输入”admin’;”那么,就相当于下面这条了:
SELECT userid FROM usertable WHERE username='admin';
这样入侵者就能不输入密码,就通过admin身份登录了。
4、不使用UTF-8
那些英老美家的会员,很少思考说话的问题,这样就造成许多产品就不克不及在其他地方通用。还有一些GBK编码的,也会有许多的费事。
UTF-8解决了许多国际化的问题。虽然PHP6才能比力完善的解决这个问题,但是也无妨碍你将MySQL的字符集设定为UTF-8。
5、该用SQL的地方使用PHP
假如你刚接触MySQL,有时候解决问题的时候大概会先思考使用你熟知的说话来解决。这样就大概造成一些白费和机能比力差的情
况。比方:运算均匀值的时候不适用MySQL原生的AVG()办法,而是用PHP将所有值轮回一遍然后累加运算均匀值。
别的还要留意SQL查询中的PHP轮回。平常,在取得所有结果之后再用PHP来轮回的效力更高。
一样在处置大量数据的时候使用强有力的数据库办法,更能提高效力。
6、不优化查询
99%的PHP机能问题都是数据库造成的,一条糟糕的SQL语句大概让你的整个程序都非常慢。MySQL的EXPLAIN statement,Query
Profiler,many other tools的这些工具可以帮你寻出那些淘气的SELECT。
7、使用错误的数据类型
MySQL供给一系列数字、字符串、时间等的数据类型。假如你想储备日期,那么就是用DATE或者DATETIME类型,使用整形或者字
符串会让事情愈加复杂。
有时候你想用本人定义的数据类型,例如,使用字符串储备序列化的PHP对象。数据库的增加大概很容易,但是这样的话,MySQL就
会变得很笨重,并且今后大概致使一些问题。
8、在SELECT查询中使用*
不要使用*在表中返回所有的字段,这会非常的慢。你只需要取出你需要的数据字段。假如你需要取出所有的字段,那么大概你的表需
要更换了。
9、索引不足或者过度索引
一样来说,应当索引显现在SELECT语句中WHERE后面所有的字段。
例如,假设我们的会员表有一个数字的ID(主键)和email地址。登录之后,MySQL应当通过email寻到响应的ID。通过索引,MySQL可
以通过搜索算法很快的定位email。假如没有索引,MySQL就需要检查每一项记载直到寻到。
这样的话,你大概想给每一个字段都增加索引,但是这样做的后果就是在你更新或者增加的时候,索引就会从新做一遍,当数据量大
的时候,就会有机能问题。所以,只在需要的字段做索引。
10、不备份
或许不常发生,但是数据库损毁,硬盘坏了、效劳休止等等,这些都会对数据造成劫难性的毁坏。所以你必然要确保主动备份数据或
者留存副本。
以上就是必看!PHP开发者常犯的10个MySQL错误的具体内容,更多请关注百分百源码网其它相关文章!