全国咨询/投诉热线:400-618-9090

首页技术文章正文

PHP培训程序员经常犯的11个MySQL错误(上)

更新时间:2017-05-29 来源:黑马程序员 浏览量:

对于大多数web应用来说,数据库都是一个十分基础性的部分。如果你在使用PHP,那么你很可能也在使用MySQL—LAMP系列中举足轻重的一份子。

        对于很多新手们来说,使用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的知识将大有裨益。





本文版权归黑马程序员PHP培训学院所有,欢迎转载,转载请注明作者出处,谢谢!
作者:黑马程序员PHP培训学院
首发:http://php.itheima.com/

javaee

python

web

ui

cloud

test

c

netmarket

pm

Linux

movies

robot

http://www.itcast.cn/subject/uizly/index.shtml?seozxuids

14天免费试学

基础班入门课程限时免费

申请试学名额

15天免费试学

基础班入门课程限时免费

申请试学名额

15天免费试学

基础班入门课程限时免费

申请试学名额

15天免费试学

基础班入门课程限时免费

申请试学名额

20天免费试学

基础班入门课程限时免费

申请试学名额

8天免费试学

基础班入门课程限时免费

申请试学名额

20天免费试学

基础班入门课程限时免费

申请试学名额

5天免费试学

基础班入门课程限时免费

申请试学名额

0天免费试学

基础班入门课程限时免费

申请试学名额

12天免费试学

基础班入门课程限时免费

申请试学名额

5天免费试学

基础班入门课程限时免费

申请试学名额

5天免费试学

基础班入门课程限时免费

申请试学名额

10天免费试学

基础班入门课程限时免费

申请试学名额
在线咨询 我要报名