这是我的数据库连接类,它正在使用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可以使用它
答案 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。