必看!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差错的细致内容,更多请关注 百分百源码网 其它相干文章!