From fc547732a63003683d3f3de2bfdb237c20189ea1 Mon Sep 17 00:00:00 2001 From: Guangcong Luo Date: Thu, 20 Oct 2016 20:34:52 -0400 Subject: [PATCH] Refactor ntbb-database to PDO A hack is required to keep Database::escape's API the same, but otherwise this API lends itself to having the internals swapped out surprisingly well. --- lib/ntbb-database.lib.php | 53 ++++++++++++++++++--------------------- lib/ntbb-ladder.lib.php | 9 ++----- 2 files changed, 26 insertions(+), 36 deletions(-) diff --git a/lib/ntbb-database.lib.php b/lib/ntbb-database.lib.php index 4a18a9e74..b3794bc63 100644 --- a/lib/ntbb-database.lib.php +++ b/lib/ntbb-database.lib.php @@ -2,64 +2,59 @@ include_once dirname(__FILE__).'/../config/config.inc.php'; -class NTBBDatabase { +class PSDatabase { var $db = null; - + var $server = null; var $username = null; var $password = null; var $database = null; var $prefix = null; var $charset = null; - //var $queries = array(); - - function NTBBDatabase($server, $username, $password, $database, $prefix, $charset) { - $this->server = $server; - $this->username = $username; - $this->password = $password; - $this->database = $database; - $this->prefix = $prefix; - $this->charset = $charset; + + function __construct($dbconfig) { + $this->server = $dbconfig['server']; + $this->username = $dbconfig['username']; + $this->password = $dbconfig['password']; + $this->database = $dbconfig['database']; + $this->prefix = $dbconfig['prefix']; + $this->charset = $dbconfig['charset']; } - + function connect() { if (!$this->db) { - $this->db = mysqli_connect($this->server, $this->username, $this->password, $this->database); - if ($this->charset) { - mysqli_set_charset($this->db, $this->charset); - } + $this->db = new PDO( + "mysql:dbname={$this->database};host={$this->server}", + $this->username, + $this->password + ); } } function query($query) { $this->connect(); - //$this->queries[] = $query; - return mysqli_query($this->db, $query); + return $this->db->query($query); } function fetch_assoc($resource) { - return mysqli_fetch_assoc($resource); + return $resource->fetch(PDO::FETCH_ASSOC); } function fetch($resource) { - return mysqli_fetch_assoc($resource); + return $resource->fetch(); } function escape($data) { $this->connect(); - return mysqli_real_escape_string($this->db, $data); + $data = $this->db->quote($data); + return substr($data, 1, -1); } function error() { if ($this->db) { - return mysqli_error($this->db); + return $this->db->errorInfo()[2]; } } function insert_id() { if ($this->db) { - return mysqli_insert_id($this->db); + return $this->db->lastInsertId(); } } } -$psdb = new NTBBDatabase($psconfig['server'], - $psconfig['username'], - $psconfig['password'], - $psconfig['database'], - $psconfig['prefix'], - $psconfig['charset']); +$psdb = new PSDatabase($psconfig); diff --git a/lib/ntbb-ladder.lib.php b/lib/ntbb-ladder.lib.php index ee1b32eb7..8c29227af 100644 --- a/lib/ntbb-ladder.lib.php +++ b/lib/ntbb-ladder.lib.php @@ -9,16 +9,11 @@ error_reporting(E_ALL); // connect to the ladder database (if we aren't already connected) if (empty($ladderdb)) { global $ladderdb, $psconfig; - if (empty($psconfig['ladder_server'])) { + if (empty($psconfig['ladder_database'])) { global $psdb; $ladderdb = $psdb; } else { - $ladderdb = new NTBBDatabase($psconfig['ladder_server'], - $psconfig['ladder_username'], - $psconfig['ladder_password'], - $psconfig['ladder_database'], - $psconfig['ladder_prefix'], - $psconfig['ladder_charset']); + $ladderdb = new PSDatabase($psconfig['ladder_database']); } }