`

PHP开发者常犯的10个MySQL错误

 
阅读更多

容陈旧,随着时间推移技术发展变化而变得不适用。为了防止误导新手,特本着与时俱进的精神写出此文,绝非对原文作者的不尊重。

1.使用MyISAM而不是InnoDB
完全错误,反驳理由:
首先原文说MyISAM是默认使用的,而实际上到了MySQL 5.5.x,InnoDB已经成为了默认的表引擎。

另外,简单的使用InnoDB不是解决所有问题的方法,盲目的使用甚至会使应用性能下降10%乃至40%。

最佳方法还是针对具体业务具体处理,例如论坛中版块表,新闻分类表,各种码表等长时间不操作的表,还是要用性能优异的MyISAM引擎。
而需要用到事务处理的例如用户、账目、流水等严格要求数据完整性和时序性的,则需要用InnoDB引擎,并且应用也要用好事务处理机制。当然,事务处理必然要带来大量的性能损耗,但是这在简单高并发应用上是必须的。

最后,外键约束在公共web互联网应用上一般是不用的,因为他会严重影响性能。数据完整性还是靠程序员或者应用架构本身的健壮来维护。而正规的第三范式只是在企业内部MIS系统和12306这种网站上使用。

2.使用PHP的mysql方法
不完全错,但要酌情选用:
mysqli固然好,但是不是所有的服务器都为PHP编译了mysqli的支持。
当你的应用如果是能确定只用自己部署的服务器,而应用也是完全自己开发,则mysqli是最好的选择。
但是一旦你的应用有可能部署在虚拟主机或者由其他人部署(例如分布式项目),还是老老实实使用mysql函数集吧,好好封装一下或者使用成熟框架杜绝sql注入。

3.不过滤用户输入
这一点不用说了,要么MagicQuote,要么选用成熟框架。sql注入老话题了。

4.不使用UTF-8
大部分情况下对,但也要认真考虑:
要知道,一个UTF-8字符占3个字节,所以比GBK等其他编码的文件大33%。换句话说,相同的网页用UTF-8编码如果是100KB,那么换成GBK编码则只有66KB。所以即便你的PHP确定要用UTF-8,那么前端页面也要根据情况选择需要的编码。但是,如果PHP用UTF-8,前端模版是GBK,再加上模版引擎不强大,那么转码工作够你受的。所以尽可能的选用自己需要的编码,而不是简单的选择UTF-8了事。
最后啰嗦一句:UTF-8下:strlen("我")=3,而GBK下:strlen("我")=2

5.该用SQL的地方使用PHP
同样酌情考虑:
例如,有些人习惯在建表时,默认值填写CURRENT_TIMESTAMP,用来达到注册时间、发帖时间的效果。 或者在时间判断的SQL语句中,写类似SELECT x FROM tab1 WHERE regdate < UNIX_TIMESTAMP()。那么我只能说,你为系统埋下了很隐蔽的BUG。因为数据库和应用往往不在同一台机器上,时间很容易出现偏差。当你一套应用的时间参照不准确时,就会出现很大的问题。
正确做法是:不要使用MySQL的任何时间函数,而是在应用里计算时间。如果是分布式应用,一定要有时间服务器来统一管理时间。
而文中说的一些MySQL数学函数 ,也是要慎用。因为在大型应用中,数据库的负担往往是最大的,而复杂的WHERE语句又是造成慢查询的元凶。所以,要把计算尽可能的放在廉价的、不影响全局稳定的应用服务器上,而不是核心数据库上。

6.不优化查询
这点也不用说了,大型应用上甚至不允许使用各种JOIN,哪怕生写两条查询,查回来在用PHP合并数据。

7.使用错误的数据类型
INT,TinyINT,VARCHAR,CHAR,TEXT这些字段类型的合理选用无可厚非。
而Date、DateTime、TIMESTAMP这三种类型,在大型应用中是绝对不可以使用的,而是要用INT(10) UNSIGNED代替。
一个是性能,另外就是应用中尤其是PHP对UNIX_TIMESTAMP时间戳的转化实在太方便了。用Date要输出各种时间格式反而麻烦。

8.在SELECT查询中使用*
共勉

9.索引不足或者过度索引
索引是必须的,但是如果索引都解决不了的查询,考虑memcache或者nosql解决方案吧。

10.不备份
这条是作者凑数么?

11.另外:不考虑其他数据库
这条相当正确。应用中不仅要针对应用选择其他数据库,甚至还要针对具体的业务类型,在同一套应用中并行使用多种数据库。哪怕不是数据库,而是其他各种缓存、内存存储等解决方案

分享到:
评论

相关推荐

    PHP开发者最常犯的11个MySQL错误编程小技巧共4页

    本篇内容将详细解析PHP开发者最常犯的11个MySQL编程错误,并提供相应的解决小技巧。 1. **未使用预处理语句**: 预处理语句可以防止SQL注入攻击,通过绑定参数来执行查询。不使用预处理可能导致恶意用户通过输入...

    PHP开发者常犯的10个MySQL错误更正剖析

    本文将基于文章《PHP开发者常犯的10个MySQL错误》的更正与剖析,探讨这些错误并提供一些与时俱进的解决方案。 首先,关于数据库引擎的选择,MyISAM与InnoDB一直是开发者争论的焦点。在过去,MyISAM确实是MySQL的...

    总结PHP程序员最常犯的11个MySQL错误.docx

    【PHP程序员常犯的MySQL错误】: 1. **选择错误的存储引擎**:在MySQL中,MyISAM和InnoDB是最常见的引擎。然而,MyISAM不支持事务处理和外键约束,对于需要数据完整性和高并发的应用来说,选择InnoDB更为明智。 2....

    查询mysql错误信息、及js错误信息

    本文将详细讲解如何查询MySQL错误信息以及JavaScript错误信息,并提供相关知识点。 首先,我们来了解一下如何查询MySQL错误信息。MySQL在执行SQL语句时,如果遇到语法错误、权限问题或逻辑错误等,会返回一个错误...

    Apache+mysql+php

    在IT领域,"Apache+MySQL+PHP"是一个经典的Web开发环境组合,被称为LAMP(Linux, Apache, MySQL, PHP)的Windows版本,这里为WAMP(Windows, Apache, MySQL, PHP)。这个组合提供了强大的功能,使得开发者能够在本地...

    php_mysql.dll ( for PHP 5.2.11 MySQL 5.1.40 )

    《PHP与MySQL数据库连接:...了解这些基础知识,以及如何正确处理和解决这些问题,对于任何PHP开发者来说都是至关重要的。同时,随着技术的发展,开发者应不断学习新的连接方式和最佳实践,以适应不断变化的开发环境。

    php+mysql学生信息管理系统。基于php+mysql 一个简

    总的来说,“php+mysql学生信息管理系统”是一个典型的Web应用案例,它涵盖了Web开发的基础知识,对于提升开发者在数据库管理和Web交互方面的技能有着显著的帮助。通过分析和实践这个系统,不仅可以掌握PHP编程和...

    php_pdo_mysql.dll_dll_PDO_MYSQL_php_

    标题 "php_pdo_mysql.dll_dll_PDO_MYSQL_php_" 暗示了我们正在讨论的是PHP的一个扩展,即PDO_MYSQL,它是一个用于MySQL数据库连接的PHP数据对象(PDO)驱动。PDO_MYSQL允许PHP应用程序使用PDO接口与MySQL服务器进行...

    原创的一个PHP+MYSQL论坛

    通过分析和研究这个"原创的PHP+MYSQL论坛",开发者和学习者可以深入理解Web应用程序的开发流程,提升PHP和MySQL的实际运用能力,同时也能接触到Web安全、用户体验等多方面知识。对于希望从事Web开发的人来说,这是一...

    PHP+MYSQL php网站环境配置,服务器php网站搭建

    总的来说,这个压缩包提供的工具简化了在IIS上部署PHP和MySQL网站的过程,使得非专业开发者也能快速搭建Web环境。不过,为了确保网站的安全性和稳定性,还需要了解并遵循最佳实践,定期进行维护和更新。

    PHP6与MySQL5-php6.rar

    2. **更好的错误处理**:引入了更严格的错误处理机制,有助于开发者编写更加健壮的代码。 3. **命名空间**:类似于其他面向对象的语言,PHP6引入了命名空间,用于组织和管理类库,避免命名冲突。 4. **改进的类型...

    PHP_MySQL.tar.gz_PHP + mysql_mysql 教程_mysql教程_php_php mysql

    4. 错误处理:PHP提供了错误报告机制,帮助开发者调试代码,而MySQL则有事务处理机制,确保数据的一致性。 四、PHP+MySQL的应用场景 1. 动态网站:如新闻发布系统、论坛、电子商务平台等,PHP用于处理用户请求,...

    PHP+mysql 网站源码

    - 数据库模型:MySQL 基于关系模型,用表格(表)来存储数据,每个表有多个列(字段)和行(记录)。 - SQL 语言:用于操作 MySQL 的标准语言,包括 SELECT、INSERT、UPDATE、DELETE 等命令。 - 数据库设计:遵循...

    PHP+MYSQL网站

    【PHP+MYSQL网站】是一个基于PHP编程语言和MySQL数据库构建的企业级基础网站。这个网站的构建是互联网开发中的常见实践,因为PHP与MySQL的组合是Web开发中的经典搭档,提供了高效、灵活且可扩展的解决方案。 PHP...

    php+mysql 新闻发布系统

    【PHP+MySQL 新闻发布系统】是一个基于PHP编程语言和MySQL数据库技术开发的动态网站系统。这个系统的主要功能包括新闻的展示、分类管理和后台管理,为用户提供了一个方便、高效的新闻发布和管理平台。 首先,让我们...

    PHP+MySQL编程实例:PHP+MySQL编程实例.rar

    在IT行业中,PHP和MySQL是两个非常重要的技术,它们共同构建了互联网上众多动态网站的基础。PHP是一种服务器端脚本语言,广泛用于网页开发,而MySQL则是一款关系型数据库管理系统,用于存储和管理网站的数据。...

    php整合mysql文档

    在安装过程中,可能需要先停止MySQL服务,以避免出现冲突或错误。 #### 步骤4:启动MySQL服务 ``` shell&gt; /etc/rc.d/init.d/mysqld start ``` 安装完成后,重新启动MySQL服务,确保MySQL服务正常运行。 #### 步骤5...

Global site tag (gtag.js) - Google Analytics