j9九游会登陆--首页直达

PHP步伐员最常犯的11个MySQL错误
  • 智网科技
  • ###
  • 分类: 智网新闻
  • 阅读量: 61

关于大少数web使用来说,数据库都是一个非常底子性的局部。假如你在利用PHP,那么你很大概也在利用MySQL—LAMP系列中无足轻重[wú zú qīng zhòng]的一份子。
 
关于许多老手们来说,利用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
 
美国、英国和澳大利亚的j9九游会很少思索除英语之外的其他言语。j9九游会很自得地完成了本人的”佳构”却发明它们并不克不及在其他地方正常运转。
 
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子句表现的字段都应该利用索引。
 
      举个例子,假定j9九游会有一个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也不失为一个可行的替换方案。