|
@@ -1,7 +1,9 @@
|
|
|
<?php
|
|
|
namespace Juju {
|
|
|
require_once('SQL/query.class.php');
|
|
|
+ require_once('Data/securestring.class.php');
|
|
|
use \Juju\SQL\Query;
|
|
|
+ use \Juju\Data\SecureString;
|
|
|
|
|
|
|
|
|
* SQL class. Used for handling SQL connections
|
|
@@ -23,9 +25,35 @@
|
|
|
private $sql;
|
|
|
public $queries = [];
|
|
|
private static $connections = [];
|
|
|
+ public static function FromDSN(string $dsnstring){
|
|
|
+ $dsnstring = explode(':', $dsnstring)[1];
|
|
|
+ $dsn = explode(';', $dsnstring);
|
|
|
+ $dsn = array_reduce($dsn, function($dsn, $item){
|
|
|
+ $item = explode('=', $item);
|
|
|
+ $dsn[$item[0]] = $item[1];
|
|
|
+ return $dsn;
|
|
|
+ });
|
|
|
+ if(!isset($dsn['host'])){
|
|
|
+ throw new \Exception("DSN {$dsnstring} missing host");
|
|
|
+ }
|
|
|
+ if(!isset($dsn['dbname'])){
|
|
|
+ throw new \Exception("DSN {$dsnstring} missing dbname");
|
|
|
+ }
|
|
|
+ if(!isset($dsn['user'])){
|
|
|
+ $dsn['user'] = $dsn['dbname'];
|
|
|
+ }
|
|
|
+ if(!isset($dsn['pass'])){
|
|
|
+ $dsn['pass'] = $dsn['user'];
|
|
|
+ }
|
|
|
+ $dsn['pass'] = SecureString::from($dsn['pass']);
|
|
|
+ return new SQL($dsn['host'], $dsn['user'], $dsn['pass'], $dsn['dbname']);
|
|
|
+ }
|
|
|
public function __construct($server,$user,$pass,$db){
|
|
|
$this->guid = uniqid();
|
|
|
- $this->sql = new \mysqli('p:'.$server,$user,$pass,$db) or die('Unable to connect to mysql');
|
|
|
+ $this->sql = new \mysqli('p:'.$server,$user,"{$pass}",$db);;
|
|
|
+ if($this->sql->connect_error){
|
|
|
+ throw new \Exception('Mysqli Connect Error (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error);
|
|
|
+ }
|
|
|
self::$connections[] = $sql;
|
|
|
}
|
|
|
public function __destruct(){
|