|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
因为函数实在是太多了,慢慢的你就会知道,知道有这个函数就可以。 关于良多老手们来讲,利用PHP可以在短短几个小时以内轻松地写出具有特定功效的代码。然而,构建一个不乱牢靠的数据库却需求花上一些光阴和相干妙技。上面罗列了我已经犯过的最严重的11个MySQL相干的毛病(有些一样也反应在其他言语/数据库的利用上)。。。
1、利用MyISAM而不是InnoDB
MySQL有良多数据库引擎,然而你最能够碰着的就是MyISAM和InnoDB。
MySQL默许利用的是MyISAM。然而,良多情形下这都是一个很糟的选择,除非你在创立一个十分复杂抑或实行性的数据库。外键束缚或事务处置关于数据完全性长短常主要的,但MyISAM都不撑持这些。别的,当有一笔记录在拔出或更新时,全部数据表都被锁定了,当利用量增添的时分这会发生十分差的运转效力。
结论很复杂:利用InnoDB。
2、利用PHP的mysql函数
PHP自发生之日就供应了MySQL库函数(or near as makes no difference)。良多使用依然在利用相似mysql_connect、mysql_query、mysql_fetch_assoc等的函数,虽然PHP手册上说:
假如你在利用MySQL v4.1.3或更新版本,激烈保举利用您利用mysqli扩大。
mysqli(MySQL的增强版扩大)有以下几个长处:
可选的面向对象接口
prepared表达式,这有益于禁止SQL注入进击,还能进步功能
撑持更多的表达式和事务处置
别的,假如你想撑持多种数据库体系,你还可以思索PDO。
3、没有处置用户输出
这或可以如许说#1:永久不要信任用户的输出。用办事器真个PHP验证每一个字符串,不要寄但愿与JavaScript。最复杂的SQL注入进击会使用以下的代码:
复制代码 代码以下:
$username = $_POST["name"];
$password = $_POST["password"];
$sql = "SELECT userid FROM usertable WHERE username='$username' AND password='$password';";
// run query...
只需在username字段输出“admin';--”,如许就会被黑到,响应的SQL语句以下:
复制代码 代码以下:
SELECT userid FROM usertable WHERE username='admin';
奸刁的黑客可以以admin登录,他们不需求晓得暗码,由于暗码段被正文失落了。
4、没有利用UTF-8
美国、英国和澳大利亚的咱们很少思索除英语以外的其他言语。咱们很满意地完成了本人的“佳构”却发明它们其实不能在其他中央正常运转。
UTF-8处理了良多国际化成绩。固然在PHP v6.0之前它还不克不及很好地被撑持,但这其实不影响你把MySQL字符集设为UTF-8。
5、相对SQL,偏心PHP
假如你接触MySQL不久,那末你会倾向于利用你已把握的言语来处理成绩,如许会招致写出一些冗余、低效力的代码。好比,你不会利用MySQL自带的AVG()函数,却会先对纪录集中的值乞降然后用PHP轮回来盘算均匀值。
另外,请注重PHP轮回中的SQL查询。凡是来讲,履行一个查询比在了局中迭代更无效率。
所以,在剖析数据的时分请使用数据库体系的优势,懂一些SQL的常识将大有裨益。
6、没有优化数据库查询
99%的PHP功能成绩都是由数据库引发的,仅仅一个糟的SQL查询就可以让你的web使用完全瘫痪。MySQL的EXPLAIN statement、Query Profiler,还有良多其他的东西将会匡助你找出这些万恶的SELECT。
7、不克不及准确利用数据类型
MySQL供应了诸如numeric、string和date等的数据类型。假如你想存储一个工夫,那末利用DATE或DATETIME类型。假如这个时分用INTEGER或STRING类型的话,那末将会使得SQL查询十分庞杂,条件是你能利用INTEGER或STRING来界说谁人类型。
良多人偏向于私自自界说一些数据的格局,好比,利用string来存储序列化的PHP对象。如许的话数据库办理起来能够会变得复杂些,但会使得MySQL成为一个糟的数据存储并且以后极可能会引发毛病。
8、在查询中利用*
永久不要利用*来前往一个数据表一切列的数据。这是怠惰:你应当提取你需求的数据。就算你需求一切字段,你的数据表也不成防止的会发生变更。
9、不利用索引或过度利用索引
普通性准绳是如许的:select语句中的任何一个where子句暗示的字段都应当利用索引。
举个例子,假定咱们有一个user表,包含numeric ID(主键)和email address。登录的时分,MySQL必需以一个email为根据查找准确的ID。假如利用了索引的话(这里指email),那末MySQL就可以够利用更快的搜刮算法来定位email,乃至可以说是即时完成。不然,MySQL就只能按次地反省每笔记录直到找到准确的email address。
有的人会在每一个字段上都添加索引,遗憾的是,履行了INSERT或UPDATE以后这些索引都需求从头生成,如许就会影响功能。所以,只在需求的时分添加索引。
10、健忘备份!
固然对照稀有,然而数据库仍是有溃散的风险。硬盘有能够破坏,办事器有能够溃散,web主机供应商有能够会破产!丧失MySQL数据将会是灾害性的,所以请确保你已利用了主动备份或已复制到位。
11、Bonus mistake-不思索利用其他数据库
关于PHP开辟人员来讲,MySQL多是利用最普遍的数据库体系,但并非独一的选择。PostgreSQL和Firebird是最强无力的竞争者:这个二者都是开源的,并且都没有被公司收买。微软供应了SQL server Express,甲骨文供应了10g Express,这二者都是企业级数据库的收费版本。有时分,关于一个较小的web使用或嵌入式使用,SQLite也不掉为一个可行的替换计划。
程度无限,接待拍砖!!
原文链接:Top 10 MySQL Mistakes Made by PHP Developers
Ps:原文题目是写的10个,实践上作者罗列了11个,所以我做了一个小小的修改
兴趣可能会慢慢消亡,所以适当培养兴趣会激发自己无线的乐趣,有了乐趣,编程有啥难的。 |
|