From 716a83d1f77e2d6f26b25ab03ffe130c11ef7feb Mon Sep 17 00:00:00 2001 From: zotlabs Date: Mon, 17 Oct 2016 16:12:32 -0700 Subject: some pdo work --- include/dba/dba_driver.php | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) (limited to 'include/dba/dba_driver.php') diff --git a/include/dba/dba_driver.php b/include/dba/dba_driver.php index 34597bec4..4586f6b70 100755 --- a/include/dba/dba_driver.php +++ b/include/dba/dba_driver.php @@ -29,27 +29,33 @@ class DBA { * @return null|dba_driver A database driver object (dba_mysql|dba_mysqli) or null if no driver found. */ - static public function dba_factory($server, $port,$user,$pass,$db,$dbtype,$install = false) { + static public function dba_factory($server,$port,$user,$pass,$db,$dbtype,$install = false) { self::$dba = null; self::$dbtype = intval($dbtype); - $set_port = $port; if(self::$dbtype == DBTYPE_POSTGRES) { + if(! ($port)) + $port = 5432; + require_once('include/dba/dba_postgres.php'); - if(is_null($port)) $set_port = 5432; - self::$dba = new dba_postgres($server, $set_port, $user, $pass, $db, $install); + self::$dba = new dba_postgres($server, $port, $user, $pass, $db, $install); } else { + if(! ($port)) + $port = 3306; + if($server === 'localhost') + $server = '127.0.0.1'; + + // Highly experimental at the present time. // require_once('include/dba/dba_pdo.php'); -// self::$dba = new dba_pdo($server, $set_port,$user,$pass,$db,$install); +// self::$dba = new dba_pdo($server, $port,$user,$pass,$db,$install); // } if(class_exists('mysqli')) { - if (is_null($port)) $set_port = ini_get("mysqli.default_port"); require_once('include/dba/dba_mysqli.php'); self::$dba = new dba_mysqli($server, $set_port,$user,$pass,$db,$install); } -- cgit v1.2.3 From aee4f8d2fe996f7c35ca90ba19a565bb16a7575f Mon Sep 17 00:00:00 2001 From: zotlabs Date: Wed, 19 Oct 2016 16:58:26 -0700 Subject: pdo changes first cut --- include/dba/dba_driver.php | 54 +++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 29 deletions(-) (limited to 'include/dba/dba_driver.php') diff --git a/include/dba/dba_driver.php b/include/dba/dba_driver.php index 4586f6b70..8a0145319 100755 --- a/include/dba/dba_driver.php +++ b/include/dba/dba_driver.php @@ -12,8 +12,16 @@ class DBA { static public $dba = null; static public $dbtype = null; + static public $scheme = 'mysql'; static public $logging = false; + static public $install_script = 'install/schema_mysql.sql'; + static public $null_date = '0001-01-01 00:00:00'; + static public $utc_now = 'UTC_TIMESTAMP()'; + static public $tquot = "`"; + + + /** * @brief Returns the database driver object. * @@ -35,50 +43,42 @@ class DBA { self::$dbtype = intval($dbtype); + if(self::$dbtype == DBTYPE_POSTGRES) { - if(! ($port)) + if(!($port)) $port = 5432; + self::$install_script = 'install/schema_postgres.sql'; + self::$utc_now = "now() at time zone 'UTC'"; + self::$tquot = '"'; + self::$scheme = 'postgres'; + require_once('include/dba/dba_postgres.php'); self::$dba = new dba_postgres($server, $port, $user, $pass, $db, $install); } else { - if(! ($port)) + if(!($port)) $port = 3306; if($server === 'localhost') $server = '127.0.0.1'; + require_once('include/dba/dba_pdo.php'); + self::$dba = new dba_pdo($server,$port,$user,$pass,$db,$install); - -// Highly experimental at the present time. -// require_once('include/dba/dba_pdo.php'); -// self::$dba = new dba_pdo($server, $port,$user,$pass,$db,$install); -// } - - if(class_exists('mysqli')) { - require_once('include/dba/dba_mysqli.php'); - self::$dba = new dba_mysqli($server, $set_port,$user,$pass,$db,$install); - } } - // Until we have a proper PDO driver, store the DB connection parameters for - // plugins/addons which use PDO natively (such as cdav). This is wasteful as - // it opens a separate connection to the DB, but saves a lot of effort re-writing - // third-party interfaces that are working and well tested. - if(is_object(self::$dba) && self::$dba->connected) { - if($server === 'localhost') - $port = $set_port; + $dns = ((self::$dbtype == DBTYPE_POSTGRES) ? 'postgres' : 'mysql') . ':host=' . $server . (is_null($port) ? '' : ';port=' . $port) . ';dbname=' . $db; self::$dba->pdo_set(array($dns,$user,$pass)); } - define('NULL_DATE', self::$dba->get_null_date()); + define('NULL_DATE', self::$null_date); define('ACTIVE_DBTYPE', self::$dbtype); - define('TQUOT', self::$dba->get_table_quote()); + define('TQUOT', self::$tquot); return self::$dba; } @@ -92,10 +92,6 @@ class DBA { */ abstract class dba_driver { // legacy behavior - const INSTALL_SCRIPT='install/schema_mysql.sql'; - const NULL_DATE = '0001-01-01 00:00:00'; - const UTC_NOW = 'UTC_TIMESTAMP()'; - const TQUOT = "`"; protected $db; protected $pdo = array(); @@ -158,20 +154,20 @@ abstract class dba_driver { } function get_null_date() { - return static::NULL_DATE; + return self::$null_date; } function get_install_script() { - return static::INSTALL_SCRIPT; + return self::$install_script; } function get_table_quote() { - return static::TQUOT; + return self::$tquot; } function utcnow() { - return static::UTC_NOW; + return self::$utc_now; } function install($server,$user,$pass,$db) { -- cgit v1.2.3 From 2702b82bc318bde595e4afddb87e4bff300f2dd2 Mon Sep 17 00:00:00 2001 From: zotlabs Date: Wed, 19 Oct 2016 17:23:06 -0700 Subject: pdo fixes --- include/dba/dba_driver.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'include/dba/dba_driver.php') diff --git a/include/dba/dba_driver.php b/include/dba/dba_driver.php index 8a0145319..11a4d9011 100755 --- a/include/dba/dba_driver.php +++ b/include/dba/dba_driver.php @@ -154,20 +154,20 @@ abstract class dba_driver { } function get_null_date() { - return self::$null_date; + return DBA::$null_date; } function get_install_script() { - return self::$install_script; + return DBA::$install_script; } function get_table_quote() { - return self::$tquot; + return DBA::$tquot; } function utcnow() { - return self::$utc_now; + return DBA::$utc_now; } function install($server,$user,$pass,$db) { -- cgit v1.2.3 From 3726b546d5e24b2f8ffa3d02346c7a0905d3ca65 Mon Sep 17 00:00:00 2001 From: zotlabs Date: Wed, 19 Oct 2016 19:24:12 -0700 Subject: use pdo for postgres also --- include/dba/dba_driver.php | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) (limited to 'include/dba/dba_driver.php') diff --git a/include/dba/dba_driver.php b/include/dba/dba_driver.php index 11a4d9011..47ec29816 100755 --- a/include/dba/dba_driver.php +++ b/include/dba/dba_driver.php @@ -54,7 +54,7 @@ class DBA { self::$scheme = 'postgres'; require_once('include/dba/dba_postgres.php'); - self::$dba = new dba_postgres($server, $port, $user, $pass, $db, $install); + self::$dba = new dba_postgres($server, self::$scheme, $port, $user, $pass, $db, $install); } else { if(!($port)) @@ -63,8 +63,7 @@ class DBA { $server = '127.0.0.1'; require_once('include/dba/dba_pdo.php'); - self::$dba = new dba_pdo($server,$port,$user,$pass,$db,$install); - + self::$dba = new dba_pdo($server,self::$scheme,$port,$user,$pass,$db,$install); } @@ -112,7 +111,7 @@ abstract class dba_driver { * @param string $db database name * @return bool */ - abstract function connect($server, $port, $user, $pass, $db); + abstract function connect($server, $scheme, $port, $user, $pass, $db); /** * @brief Perform a DB query with the SQL statement $sql. @@ -146,31 +145,31 @@ abstract class dba_driver { */ abstract function getdriver(); - function __construct($server, $port, $user,$pass,$db,$install = false) { - if(($install) && (! $this->install($server, $port, $user, $pass, $db))) { + function __construct($server, $scheme, $port, $user,$pass,$db,$install = false) { + if(($install) && (! $this->install($server, $scheme, $port, $user, $pass, $db))) { return; } - $this->connect($server, $port, $user, $pass, $db); + $this->connect($server, $scheme, $port, $user, $pass, $db); } function get_null_date() { - return DBA::$null_date; + return \DBA::$null_date; } function get_install_script() { - return DBA::$install_script; + return \DBA::$install_script; } function get_table_quote() { - return DBA::$tquot; + return \DBA::$tquot; } function utcnow() { - return DBA::$utc_now; + return \DBA::$utc_now; } - function install($server,$user,$pass,$db) { + function install($server,$scheme,$port,$user,$pass,$db) { if (!(strlen($server) && strlen($user))){ $this->connected = false; $this->db = null; -- cgit v1.2.3 From b4b5eb5babcfd01f41e3df39400758422b39d591 Mon Sep 17 00:00:00 2001 From: zotlabs Date: Thu, 20 Oct 2016 15:45:48 -0700 Subject: pdo testing --- include/dba/dba_driver.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'include/dba/dba_driver.php') diff --git a/include/dba/dba_driver.php b/include/dba/dba_driver.php index 47ec29816..abbacc56e 100755 --- a/include/dba/dba_driver.php +++ b/include/dba/dba_driver.php @@ -51,20 +51,21 @@ class DBA { self::$install_script = 'install/schema_postgres.sql'; self::$utc_now = "now() at time zone 'UTC'"; self::$tquot = '"'; - self::$scheme = 'postgres'; + self::$scheme = 'pgsql'; - require_once('include/dba/dba_postgres.php'); - self::$dba = new dba_postgres($server, self::$scheme, $port, $user, $pass, $db, $install); +// require_once('include/dba/dba_postgres.php'); +// self::$dba = new dba_postgres($server, self::$scheme, $port, $user, $pass, $db, $install); } else { if(!($port)) $port = 3306; if($server === 'localhost') $server = '127.0.0.1'; + } require_once('include/dba/dba_pdo.php'); self::$dba = new dba_pdo($server,self::$scheme,$port,$user,$pass,$db,$install); - } + if(is_object(self::$dba) && self::$dba->connected) { -- cgit v1.2.3 From 29340152b6a924a27dc62363d623e3dd287b5a2a Mon Sep 17 00:00:00 2001 From: zotlabs Date: Thu, 20 Oct 2016 16:21:15 -0700 Subject: pdo - cleanup --- include/dba/dba_driver.php | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) (limited to 'include/dba/dba_driver.php') diff --git a/include/dba/dba_driver.php b/include/dba/dba_driver.php index abbacc56e..e8c79045b 100755 --- a/include/dba/dba_driver.php +++ b/include/dba/dba_driver.php @@ -53,8 +53,6 @@ class DBA { self::$tquot = '"'; self::$scheme = 'pgsql'; -// require_once('include/dba/dba_postgres.php'); -// self::$dba = new dba_postgres($server, self::$scheme, $port, $user, $pass, $db, $install); } else { if(!($port)) @@ -63,14 +61,12 @@ class DBA { $server = '127.0.0.1'; } - require_once('include/dba/dba_pdo.php'); - self::$dba = new dba_pdo($server,self::$scheme,$port,$user,$pass,$db,$install); + require_once('include/dba/dba_pdo.php'); + self::$dba = new dba_pdo($server,self::$scheme,$port,$user,$pass,$db,$install); - - if(is_object(self::$dba) && self::$dba->connected) { - $dns = ((self::$dbtype == DBTYPE_POSTGRES) ? 'postgres' : 'mysql') + $dns = ((self::$dbtype == DBTYPE_POSTGRES) ? 'pgsql' : 'mysql') . ':host=' . $server . (is_null($port) ? '' : ';port=' . $port) . ';dbname=' . $db; self::$dba->pdo_set(array($dns,$user,$pass)); -- cgit v1.2.3 From 04ac04e0ada6b8dbe3f512379abd2859eb758173 Mon Sep 17 00:00:00 2001 From: zotlabs Date: Thu, 20 Oct 2016 17:04:43 -0700 Subject: allow a dsn override to the database via the server argument. This could be used to allow unix domain sockets and other unusual configurations. --- include/dba/dba_driver.php | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) (limited to 'include/dba/dba_driver.php') diff --git a/include/dba/dba_driver.php b/include/dba/dba_driver.php index e8c79045b..b4cda6d8e 100755 --- a/include/dba/dba_driver.php +++ b/include/dba/dba_driver.php @@ -25,16 +25,14 @@ class DBA { /** * @brief Returns the database driver object. * - * If available it will use PHP's mysqli otherwise mysql driver. - * - * @param string $server DB server name + * @param string $server DB server name (or PDO dsn - e.g. mysqli:foobar.com;) * @param string $port DB port * @param string $user DB username * @param string $pass DB password * @param string $db database name * @param string $dbtype 0 for mysql, 1 for postgres * @param bool $install Defaults to false - * @return null|dba_driver A database driver object (dba_mysql|dba_mysqli) or null if no driver found. + * @return null|dba_driver A database driver object (dba_pdo) or null if no driver found. */ static public function dba_factory($server,$port,$user,$pass,$db,$dbtype,$install = false) { @@ -57,8 +55,6 @@ class DBA { else { if(!($port)) $port = 3306; - if($server === 'localhost') - $server = '127.0.0.1'; } require_once('include/dba/dba_pdo.php'); @@ -66,10 +62,16 @@ class DBA { if(is_object(self::$dba) && self::$dba->connected) { - $dns = ((self::$dbtype == DBTYPE_POSTGRES) ? 'pgsql' : 'mysql') - . ':host=' . $server . (is_null($port) ? '' : ';port=' . $port) - . ';dbname=' . $db; - self::$dba->pdo_set(array($dns,$user,$pass)); + if(strpbrk($server,':;')) { + $dsn = $server; + } + else { + $dsn = self::$scheme . ':host=' . $server . (is_null($port) ? '' : ';port=' . $port); + } + $dsn .= ';dbname=' . $db; + + + self::$dba->pdo_set(array($dsn,$user,$pass)); } define('NULL_DATE', self::$null_date); -- cgit v1.2.3 From d30892ea601e9131c6dc3b25aeee1f258f72a104 Mon Sep 17 00:00:00 2001 From: zotlabs Date: Sun, 23 Oct 2016 17:05:08 -0700 Subject: pdo hacks --- include/dba/dba_driver.php | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'include/dba/dba_driver.php') diff --git a/include/dba/dba_driver.php b/include/dba/dba_driver.php index b4cda6d8e..afe209feb 100755 --- a/include/dba/dba_driver.php +++ b/include/dba/dba_driver.php @@ -53,7 +53,14 @@ class DBA { } else { - if(!($port)) + + // attempt to use the pdo driver compiled-in mysqli socket + // if using 'localhost' with no port configured. + // If this is wrong you'll need to set the socket path specifically + // using a server name of 'mysql:unix_socket=/socket/path', setting /socket/path + // as needed for your platform + + if((!($port)) && ($server !== 'localhost')) $port = 3306; } -- cgit v1.2.3