PHP教程之PHP法式员最常犯的11个MySQL毛病小结
因为函数实在是太多了,慢慢的你就会知道,知道有这个函数就可以。 关于良多老手们来讲,利用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个,所以我做了一个小小的修改
兴趣可能会慢慢消亡,所以适当培养兴趣会激发自己无线的乐趣,有了乐趣,编程有啥难的。 当然这种网站的会员费就几十块钱。 最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。 最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。 建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。 首推的搜索引擎当然是Google大神,其次我比较喜欢 百度知道。不过搜出来的结果往往都是 大家copy来copy去的,运气的的概率很大。 装在C盘下面可以利用windows的ghost功能可以还原回来(顺便当做是重转啦),当然啦我的编译目录要放在别的盘下,不然自己的劳动成果就悲剧啦。 本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。 装在C盘下面可以利用windows的ghost功能可以还原回来(顺便当做是重转啦),当然啦我的编译目录要放在别的盘下,不然自己的劳动成果就悲剧啦。 ,熟悉html,能用div+css,还有javascript,优先考虑linux。我在开始学习的时候,就想把这些知识一起学习,我天真的认为同时学习能够互相呼应,因为知识是相通的。 爱上php,他也会爱上你。 我还是强烈建议自己搭建php环境。因为在搭建的过程中你会遇到一些问题,通过搜索或是看php手册解决问题后,你会更加深刻的理解它们的工作原理,了解到php配置文件中的一些选项设置。 php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。 因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax Ps:以上纯属原创,如有雷同,纯属巧合 我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。 对于懒惰的朋友,我推荐php的集成环境xampp或者是wamp。这两个软件安装方便,使用简单。但是我还是强烈建议自己动手搭建开发环境。 首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。 写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。 说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年具体的记不清啦,囧。
页:
[1]
2