diff --git a/src/Db.php b/src/Db.php index 19338d0..1644e40 100644 --- a/src/Db.php +++ b/src/Db.php @@ -469,4 +469,22 @@ class Db { $row[$field] = $this -> date2time($row[$field]); return $row; } + + /** + * Helper method to parse PHP PDO DSN info + * @param string $dsn PHP PDO DSN to parse + * @return array|false + */ + public static function parse_pdo_dsn($dsn) { + if (!preg_match('/^([^:]+):(.+)$/', $dsn, $dsn_parts)) + return false; + + $info = ['protocol' => $dsn_parts[1]]; + foreach(preg_split('/;+/', $dsn_parts[2]) as $part) { + if (preg_match('/^([^=]+)=(.*)$/', $part, $dsn_part)) + $info[$dsn_part[1]] = $dsn_part[2]; + } + Log::trace('parse_pdo_dsn(%s): %s', $dsn, vardump($info)); + return $info; + } }