当前位置: 首页 > 面试题库 >

如何使用不推荐使用的mysql_ *函数成功重写旧的mysql-php代码?

莫英卓
2023-03-14
问题内容

我仍然主要从所购买的书中学习,但是今天我提醒我,尽管我今年购买了有关PHP编程的书,但我的书已经过时了。现在,我知道不推荐使用PHP中的mysql_
*命令,而应使用更安全,更稳定的预处理语句和PDO代替它们。因此,我根据自己的意愿重写了所有网络,也许我会需要您一些建议,以帮助他们正确地进行网络建设以及所有经验丰富的人的工作:)

因此,我将在这里仅以主要部分(连接到数据库并选择数据库)开始我的重写(其余的我可以自己用Google和手册完成)。我将在这里写下我的旧脚本,并问您我是否在做正确的事情而没有丢失任何东西,我希望这对其他人也可以是一本不错的手册/答案。因此,让我们开始吧。

所以在配置中我有这样的事情:

$db = new dbConn('127.0.0.1', 'root', 'pass', 'people', 'animals');

应该是这样的:

$db = new PDO('mysql:host=127.0.0.1;dbname=people;charset=UTF-8', 'root', 'pass');

对?但是,当我以后需要选择数据库时,应该不这样做dbname=people;吗?但是以后如何选择数据库?

这是我重写的脚本,也是大多数Web项目中最基本的脚本,我希望它不仅使我了解新的PDO系统是如何工作的:

class dbConn
{
  public function __construct($server, $user, $pass, $db_people, $db_animals)
  {    
    if (!empty($server) && !empty($user) && !empty($pass) && !empty($db_people) && !empty($db_animals))
    {
      $this->server = $server;
      $this->user =  $user;
      $this->pass = $pass;
      $this->db_people = $db_people;  
      $this->db_animals = $db_animals;  
      $this->connect(); 
    }  
    else
    {
      die("Set up connection to db");
    }
  }

  public function connect()
  {
    $this->conn = mysql_connect($this->server, $this->user, $this->pass) or die ('cannot connect to MySQL');
  }

  public function selectDb($database)
  {
    switch($database)
    {
      case 'people':
        mysql_select_db($this->db_people, $this->conn) or die ('cannot connect to database '.$this->db_people.'.');
        mysql_query("SET NAMES 'utf8'");
        break;

      case 'animals':
        mysql_select_db($this->db_animals, $this->conn) or die ('cannot connect to database '.$this->db_animals.'.');
        mysql_query("SET NAMES 'utf8'"); 
    }
  }

  public function __destruct() 
  {
    if (!empty($this->conn))
    {
      mysql_close($this->conn); 
    }
  }  
}

所以,从我所知道的谷歌和维基-功能,如public function __constructpublic function __destruct()不应该需要了,对不对?与public function connect()SO之类的功能相同,只剩下什么,public function selectDb($database)但是我不知道如何正确执行此操作而不破坏所有与数据库的连接。因为在我的其余代码(此处未提及)中,我可以通过此代码轻松选择数据库:$this->db->selectDb("people");但是,使用准备好的语句,我什至不知道这样做是否可行。希望您提出一些建议,以帮助我和其他用户更好地理解此新代码。您可能拥有的代码中的其他部分在此MySQL开发人员的PDO教程中进行了说明。谢谢。


问题答案:

实际上,这是一个简单,甜蜜和简短的过程:是的,不再需要。

让我们回顾一下代码,以免我们丢失了一些东西:

  • __construct-构造函数仅包含所有配置。PDO在这里有一个简单得多的概念,一个包含最多信息的连接字符串:
 mysql:host=127.0.0.1;dbname=people;charset=UTF-8

此外,PDO还提供了可供使用的现成构造函数,因此不必加倍使用。

  • connect-也不再需要连接功能。这是通过实例化PDO来完成的。您可以查找异常,PHP手册的构造函数页面上有一个示例。

  • selectDb-不再需要此复杂功能。哇,由于PDO连接字符串,我们只能删除第三个功能。字符少了,功能强大。干杯!

  • __destruct-破坏者。公平地说:MySQL也不需要它。但是,使用PDO,我们可以免费获得它-无需编写任何代码。

看起来不错!通过删除过时的代码,您设法从该晦涩的数据库类迁移到PDO!恭喜您:

$db = new PDO('mysql:host=127.0.0.1;dbname=people;charset=UTF-8', 'root', 'pass');

如果您现在想,如果我想自己拥有数据库类怎么办?好吧,您可以这样做,因为您可以从PDO扩展(是的!):

class DB extends PDO
{
   ... my super-new-shiny-code
}

为什么要这么做?不知道,但是也许您的代码更流利。如果您正在寻找更好的代码示例,那么我在PHP / MySQL
Table的Hyperlinks中
提供了一个示例。



 类似资料:
  • 问题内容: 这个问题已经在这里有了答案 : 为什么我不应该在PHP中使用mysql_ *函数? (15个答案) 6年前关闭。 不久前我停止使用这些功能时,在这里扮演了Devil’s Advocate的角色,但问题是真实的,可能对许多SO用户来说很重要。 我们都知道以错误的方式使用功能可能非常危险,可能使您的网站容易受到攻击等。但是正确使用这些功能可以防止SQL注入,并且实际上比新的PDO功能要快一

  • 我们都知道以错误的方式使用函数可能会非常危险,它会使您的网站易受攻击,等等。但是正确使用这些函数可以防止SQL注入,并且实际上比更新的PDO函数更快一些。 考虑到所有这些,为什么函数不推荐使用呢?

  • 问题内容: 我有以下使用函数在PHP 5.3之前运行良好的语句: 升级到PHP 5.3后,我收到了不赞成使用的警告: 不推荐使用:不推荐使用split()函数。 我正在尝试解析具有以下格式的字符串: 2010-08-10 23:07:58 成为其组成部分。 问题答案: 我认为您想要preg_split。

  • 我已经使用了最新版本的video_player:^0.10.5+1),但显示以下警告。 注意:某些输入文件使用或重写不推荐的API。 注意:使用-xlint重新编译:有关详细信息。 注意:注意:详细信息请使用-xlint:deprecation重新编译。

  • 问题内容: 不推荐使用函数eregi()。我该如何替换eregi()。我尝试使用preg_match,但随后停止工作。 之前的代码: 代码然后: 问题答案: 期望其正则表达式参数位于一对定界符内。 因此,请尝试:

  • 你能帮助采用代码iOS7吗?我有代码: 但是Xcode说size的字体:字体size的字体:字体和线型断开模式在iOS7中已弃用。 请帮我更新这一行代码。