仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1460|回复: 19
打印 上一主题 下一主题

[学习教程] PHP教程之PHP法式员最常犯的11个MySQL毛病小结

[复制链接]
灵魂腐蚀 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-3 23:41:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

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个,所以我做了一个小小的修改
兴趣可能会慢慢消亡,所以适当培养兴趣会激发自己无线的乐趣,有了乐趣,编程有啥难的。
只想知道 该用户已被删除
沙发
发表于 2015-2-4 05:59:30 | 只看该作者
当然这种网站的会员费就几十块钱。
板凳
发表于 2015-2-9 16:36:42 | 只看该作者
最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。
莫相离 该用户已被删除
地板
发表于 2015-2-25 22:11:00 | 只看该作者
最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。
蒙在股里 该用户已被删除
5#
发表于 2015-3-4 15:15:08 | 只看该作者
建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。
金色的骷髅 该用户已被删除
6#
发表于 2015-3-10 07:50:54 | 只看该作者
首推的搜索引擎当然是Google大神,其次我比较喜欢 百度知道。不过搜出来的结果往往都是 大家copy来copy去的,运气的的概率很大。
柔情似水 该用户已被删除
7#
发表于 2015-3-15 03:05:52 | 只看该作者
装在C盘下面可以利用windows的ghost功能可以还原回来(顺便当做是重转啦),当然啦我的编译目录要放在别的盘下,不然自己的劳动成果就悲剧啦。
分手快乐 该用户已被删除
8#
发表于 2015-3-17 18:24:37 | 只看该作者
本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。
深爱那片海 该用户已被删除
9#
发表于 2015-3-24 18:48:50 | 只看该作者
装在C盘下面可以利用windows的ghost功能可以还原回来(顺便当做是重转啦),当然啦我的编译目录要放在别的盘下,不然自己的劳动成果就悲剧啦。
飘飘悠悠 该用户已被删除
10#
发表于 2015-4-8 17:46:00 | 只看该作者
,熟悉html,能用div+css,还有javascript,优先考虑linux。我在开始学习的时候,就想把这些知识一起学习,我天真的认为同时学习能够互相呼应,因为知识是相通的。
admin 该用户已被删除
11#
发表于 2015-4-15 19:37:10 | 只看该作者
爱上php,他也会爱上你。
山那边是海 该用户已被删除
12#
发表于 2015-4-28 03:18:36 | 只看该作者
我还是强烈建议自己搭建php环境。因为在搭建的过程中你会遇到一些问题,通过搜索或是看php手册解决问题后,你会更加深刻的理解它们的工作原理,了解到php配置文件中的一些选项设置。
冷月葬花魂 该用户已被删除
13#
发表于 2015-5-1 20:58:49 | 只看该作者
php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。
灵魂腐蚀 该用户已被删除
14#
 楼主| 发表于 2015-5-6 09:10:55 | 只看该作者
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax
乐观 该用户已被删除
15#
发表于 2015-5-7 15:23:21 | 只看该作者
Ps:以上纯属原创,如有雷同,纯属巧合
第二个灵魂 该用户已被删除
16#
发表于 2015-6-10 22:23:44 | 只看该作者
我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。
老尸 该用户已被删除
17#
发表于 2015-6-16 20:58:50 | 只看该作者
对于懒惰的朋友,我推荐php的集成环境xampp或者是wamp。这两个软件安装方便,使用简单。但是我还是强烈建议自己动手搭建开发环境。
活着的死人 该用户已被删除
18#
发表于 2015-6-27 21:17:35 | 只看该作者
首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。
飘灵儿 该用户已被删除
19#
发表于 2015-7-4 09:52:42 | 只看该作者
写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。
小妖女 该用户已被删除
20#
发表于 2015-7-10 06:44:38 | 只看该作者
说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年  具体的记不清啦,囧。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 02:48

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表