如何将mysql_connect()更改为PDO

时间:2015-04-08 09:12:20

标签: php pdo

这是我的数据库连接类,它正在使用php5.3,但在更新了php5.4并显示错误已过期后它无法正常工作。

class DB {
   function DB() {
       $this->host = "localhost";
       $this->db = "dbtest";
       $this->user = "root" ;
       $this->pass = "password";
       $this->link = mysql_connect($this->host, $this->user, $this->pass) or die("<br>Could not connect 1: " . mysql_error());
       mysql_select_db($this->db);
   }
   function query($query) {
       $result = mysql_query($query, $this->link) or die ("<br>Could not execute command 1: ".mysql_error());
       return $result;
   }
   function thislink() {
       return $this->link;
   }
   function close() {
       mysql_close($this->link);
   }
}

如何将其更改为PDO或mysqli,以便wamp可以使用它

3 个答案:

答案 0 :(得分:2)

你不能。

您的类不是黑盒子,例如,您有一个返回MySQL链接标识符的公共方法:

function thislink() {
   return $this->link;
}

如果将其更改为其他数据库接口,则在调用此方法时会遇到问题,因为它不包含调用端所期望的内容。

这同样适用于您的公开query()方法:

function query($query) {
   $result = mysql_query($query, $this->link) or die ("<br>Could not execute command 1: ".mysql_error());
   return $result;
}

如果是mysql语句,则返回SELECT资源,因此如果将其更改为msyqli或PDO,则主叫方将无法处理它。

答案 1 :(得分:1)

class DB {
   function DB() {
       $this->host = "localhost";
       $this->db = "dbtest";
       $this->user = "root" ;
       $this->pass = "password";
       $this->link = new PDO("mysql:host=$this->host;dbname=$this->db", $this->user, $this->pass);
   }
   function query($query) {
       $result = $this->link->query($query);
       return $result;
   }
   function thislink() {
       return $this->link;
   }
   function close() {
       $this->link = NULL;
   }
}

答案 2 :(得分:0)

你的课应该是这样的:

请注意,我将构造函数更改为__construct(),因为在PHP 7中,您使用的其他方式将被弃用。我还使用默认值将变量作为参数放在构造函数中。我还为您的PDO连接启用了error mode,只在测试中启用它!从未投入生产。

<?php

    class DB {

        public $host;
        public $db;
        public $user;
        public $pass;

        private $link;

        public function __construct($host = "localhost", $db = "dbtest", $user = "root", $pass = "password") {
            $this->host = $host;
            $this->db = $db;
            $this->user = $user;
            $this->pass = $pass;

            try {
                $this->link = new PDO("mysql:host={$this->host};dbname={$this->db}", $this->user, $this->pass);
                $this->link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            } catch(PDOExcpetion $e) {
                echo $e->getMessage();
            }

        }

        function query($query) {    
            $stmt = $this->link->prepare($query);
            $stmt->execute();
            return $stmt;
        }

        function thislink() {
            return $this->link;
        }

        function close() {
            $this->link = null;
        }

    }


?>

有关PDO的详情,请参阅手册:http://php.net/manual/en/book.pdo.php

您可能还想查看prepared statements