当前位置: 首页 > 后端技术 > PHP

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

时间:2023-03-30 06:09:44 PHP

1.使用MyISAM代替InnoDBMySQL有很多数据库引擎,一般使用MyISAM和InnoDB。默认使用MyISAM。但是除非你正在构建一个非常简单的数据库或者只是实验性的,否则大多数时候这个选择是错误的。MyISAM不支持外键约束,这是保证数据完整性的本质。另外MyISAM在新增或更新数据时会锁住整张表,这对以后的扩展性能会有很大的问题。解决方案很简单:使用InnoDB。不过这里我一般试试MyISAM2,使用PHP的mysql方法PHP一开始就提供了一个MySQL函数库。很多程序依赖mysql_connect、mysql_query、mysql_fetch_assoc等,但是PHP手册建议:如果你使用的MySQL版本是4.1.3之后,强烈建议使用mysqli扩展。mysqli,或者说MySQL的高级扩展,有一些优点:它有面向对象的接口preparedstatements(准备好的语句,可以有效防止SQL-injection攻击,提高性能),支持多语句和多事务。另外,如果你想支持多个数据库的话,你应该考虑PDO。3.不过滤用户输入应该是:永远不要相信用户输入。使用后端PHP验证和过滤每个输入信息,不要相信Javascript。像下面这样的SQL语句是易受攻击的:$username=$\_POST\["name"\];$password=$\_POST\["密码"\];$sql="SELECTuseridFROMusertableWHEREusername='$username'ANDpassword='$password';";//runquery...这样的代码,如果用户输入"admin';",那么就相当于:SELECTuseridFROMusertableWHEREusername='admin';这样,入侵者就可以不用输入密码就可以以admin身份登录。4、不使用UTF-8的英美国家用户很少考虑语言问题,导致很多产品无法在其他地方使用。还有一些GBK编码的,会有很多麻烦。UTF-8解决了许多国际化问题。虽然PHP6可以完美解决这个问题,但是并不妨碍你把MySQL字符集设置为UTF-8。5.应该用SQL的地方用PHP如果你是MySQL的新手,有时候可能先解决问题考虑用你熟悉的语言来解决。这可能会导致一些浪费和性能不佳。例如:MySQL原生的AVG()方法在计算平均值时是不适用的,而是用PHP循环遍历所有的值然后累加计算平均值。还要注意SQL查询中的PHP循环。通常在获得所有结果后循环遍历PHP会更有效。一般在处理大量数据时,可以使用强大的数据库方法来提高效率。6.不要优化查询。99%的PHP性能问题都是由数据库引起的。错误的SQL语句可能会使您的整个程序非常缓慢。MySQL的EXPLAIN语句、QueryProfiler和许多其他工具可以帮助您找到那些顽皮的SELECT。7、使用错误的数据类型MySQL提供了数字、字符串、时间等一系列数据类型。如果要存储日期,请使用DATE或DATETIME类型。使用整数或字符串会使事情变得更复杂。有时您想使用自己的数据类型,例如,使用字符串来存储序列化的PHP对象。数据库可能很容易添加,但MySQL会变得笨拙,并可能在以后引起问题。8、使用*不要在SELECT查询中使用*返回表中的所有字段,这样会很慢。你只需要拉出你需要的数据字段。如果您需要获取所有字段,那么您的表可能需要更改。9、索引不足或索引过多一般来说,SELECT语句中出现在WHERE之后的所有字段都应该被索引。例如,假设我们的用户表有一个数字ID(主键)和电子邮件地址。登录后,MySQL应该会通过邮件找到对应的ID。通过索引,MySQL可以通过搜索算法快速定位邮件。如果没有索引,MySQL需要检查每条记录,直到找到为止。在这种情况下,你可能想为每个字段添加一个索引,但这样做的后果是,当你更新或添加时,索引将被重新做。当数据量很大时,就会出现性能问题。因此,只索引必填字段。10、不备份可能不会经常发生,但是数据库损坏、硬盘故障、服务停止等,都会对数据造成灾难性的破坏。因此,您一定要确保自动备份您的数据或保存一份副本。更多学习内容,可访问【与各大厂商对比】优质PHP架构师教程目录。只要能读懂,就能保证你的薪水更上一层楼(持续更新中)。以上内容希望对大家有所帮助。很多PHPer总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道从哪里开始改进,我整理了一些这方面的资料,包括但不限于:分布式架构,高可扩展性、高性能、高并发、服务器性能调优、TP6、laravel、YII2、Redis、Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等知识点免费分享给你如果你需要高级干货。有需要的可以点击链接领取高级PHP月薪30k>>>架构师成长之路【免费获取视频和面试资料】