11个程序员最常犯的MySQL错误(PHP开发)-php教程

资源魔 26 0
本篇文章给各人引见11个PHP顺序员最常犯的MySQL谬误。有肯定的参考代价,有需求的冤家能够参考一下,心愿对各人有所协助。

关于年夜少数web使用来讲,数据库都是一个非常根底性的局部。假如你正在应用PHP,那末你极可能也正在应用MySQL—LAMP系列中无足轻重的一分子。

关于不少老手们来讲,应用PHP能够正在短短几个小时以内轻松地写出具备特定性能的代码。然而,构建一个稳固牢靠的数据库却需求花上一些时日以及相干技艺。上面罗列了我已经犯过的最重大的11个MySQL相干的谬误(有些一样也反映正在其余言语/数据库的应用上)。。。

一、应用MyISAM而没有是InnoDB

MySQL有不少数据库引擎,然而你最可能碰着的就是MyISAM以及InnoDB。

MySQL 默许应用的是MyISAM。然而,不少状况下这都是一个很蹩脚的抉择,除了非你正在创立一个十分简略抑或试验性的数据库。外键束缚或许事务解决关于数据完好性 长短常首要的,但MyISAM都没有支持这些。另外,当有一笔记录正在拔出或许更新时,整个数据表都被锁定了,当应用量添加的时分这会孕育发生十分差的运转效率。

论断很简略:应用InnoDB。

二、应用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。

三、不解决用户输出

这或许能够这样说#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登录,他们没有需求晓得明码,由于明码段被正文掉了。

四、不应用UTF-8

美国、英国以及澳年夜利亚的咱们很少思考除了英语以外的其余言语。咱们很自得地实现了本人的“杰作”却发现它们其实不能正在其余中央失常运转。

UTF-8处理了不少国内化成绩。尽管正在PHP v6.0以前它还不克不及很好地被支持,但这其实不影响你把MySQL字符集设为UTF-8。

五、绝对于SQL,偏幸PHP

假如你接触MySQL没有久,那末你会倾向于应用你曾经把握的言语来处理成绩,这样会招致写出一些冗余、低效率的代码。比方,你没有会应用MySQL自带的AVG()函数,却会先对记载集中的值乞降而后用PHP轮回来较量争论均匀值。

别的,请留意PHP轮回中的SQL查问。通常来讲,执行一个查问比正在后果中迭代更无效率。

以是,正在剖析数据的时分请行使数据库零碎的劣势,懂一些SQL的常识将年夜有裨益。

六、不优化数据库查问

99%的PHP功能成绩都是由数据库惹起的,仅仅一个蹩脚的SQL查问就能让你的web使用彻底瘫痪。MySQL的EXPLAIN statement、Query Profiler,另有不少其余的对象将会协助你找出这些万恶的SELECT。

七、不克不及正确应用数据类型

MySQL提供了诸如numeric、string以及date等的数据类型。假如你想存储一个工夫,那末应用DATE或许DATETIME类型。假如这个时分用INTEGER或许STRING类型的话,那末将会使患上SQL查问十分复杂,条件是你能应用INTEGER或许STRING来界说阿谁类型。

不少人偏向于私自自界说一些数据的格局,比方,应用string来存储序列化的PHP工具。这样的话数据库治理起来可能会变患上简略些,但会使患上MySQL成为一个蹩脚的数据存储并且之后极可能会惹起毛病。

八、正在查问中应用*

永远没有要应用*来前往一个数据表一切列的数据。这是懈怠:你应该提取你需求的数据。就算你需求一切字段,你的数据表也不成防止的会孕育发生变动。

九、没有应用索引或许适度应用索引

普通性准则是这样的:select语句中的任何一个where子句示意的字段都应该应用索引。

举 个例子,假定咱们有一个user表,包罗numeric ID(主键)以及email address。登录的时分,MySQL必需以一个email为根据查找正确的ID。假如应用了索引的话(这里指email),那末MySQL就可以应用 更快的搜寻算法来定位email,乃至能够说是即时完成。不然,MySQL就只能程序地反省每一一笔记录直到找到正确的email address。

有的人会正在每一个字段上都增加索引,遗憾的是,执行了INSERT或许UPDATE之后这些索引都需求从新天生,这样就会影响功能。以是,只正在需求的时分增加索引。

十、遗记备份!

尽管比拟稀有,然而数据库仍是有解体的风险。硬盘有可能损坏,效劳器有可能解体,web主机提供商有可能会破产!失落MySQL数据将会是劫难性的,以是请确保你曾经应用了主动备份或许曾经复制到位。

十一、Bonus mistake-没有思考应用其余数据库

关于PHP开发职员来讲,MySQL多是应用最宽泛的数据库零碎,但并非惟一的抉择。PostgreSQL以及Firebird是最强无力的竞争者:这个二者都是开源的,并且都不被公司收买。微软提供了sql server Express,甲骨文提供了10g Express,这二者都是企业级数据库的收费版本。有时分,关于一个较小的web使用或许嵌入式使用,SQLite也没有失为一个可行的代替计划。

保举学习:PHP视频教程

以上就是11个顺序员最常犯的MySQL谬误(PHP开发)的具体内容,更多请存眷资源魔其它相干文章!

标签: php mysql php开发教程 php开发资料 php开发自学

抱歉,评论功能暂时关闭!