From 571e505904e22feca0b1834c854af13edfe24782 Mon Sep 17 00:00:00 2001 From: Bastien Crettenand Date: Wed, 5 Jun 2019 13:24:53 +0200 Subject: [PATCH 01/10] Create composer.json --- composer.json | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 composer.json diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..101cbf6 --- /dev/null +++ b/composer.json @@ -0,0 +1,7 @@ +{ + "name": "CrBast/php-sql_simplelife", + "description": "Simplifier of SQL queries. Basic ORM with Model.", + "require": { + "php": "^7.2" + } +} From cc000c131648fb8fec16c7029eb3b1b0da5478d5 Mon Sep 17 00:00:00 2001 From: Bastien Date: Wed, 5 Jun 2019 18:38:14 +0200 Subject: [PATCH 02/10] add basic configuration composer --- .gitignore | 3 ++- composer.json | 20 +++++++++++++++++--- composer.lock | 19 +++++++++++++++++++ src/model/model.php | 27 ++++++++++++++------------- src/{ => slsql}/slsql.php | 7 ++++--- src/{ => slsql}/test.php | 0 6 files changed, 56 insertions(+), 20 deletions(-) create mode 100644 composer.lock rename src/{ => slsql}/slsql.php (98%) rename src/{ => slsql}/test.php (100%) diff --git a/.gitignore b/.gitignore index 870c59f..3584de6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ src/.env -.idea \ No newline at end of file +.idea +/vendor/ diff --git a/composer.json b/composer.json index 101cbf6..6eba214 100644 --- a/composer.json +++ b/composer.json @@ -1,7 +1,21 @@ { - "name": "CrBast/php-sql_simplelife", + "name": "crbast/slsql", "description": "Simplifier of SQL queries. Basic ORM with Model.", + "type": "library", + "license": "WTFPL", + "authors": [ + { + "name": "CrBast", + "email": "bastien.crettenand@kubeah.com" + } + ], + "minimum-stability": "dev", "require": { - "php": "^7.2" + "php": ">=7.0" + }, + "autoload": { + "psr-4": { + "slsql\\": "/src" + } } -} +} \ No newline at end of file diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..d66f89c --- /dev/null +++ b/composer.lock @@ -0,0 +1,19 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "49114805512abb36d0d073d935c4910b", + "packages": [], + "packages-dev": [], + "aliases": [], + "minimum-stability": "dev", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": ">=7.0" + }, + "platform-dev": [] +} diff --git a/src/model/model.php b/src/model/model.php index 7de1974..f885db4 100644 --- a/src/model/model.php +++ b/src/model/model.php @@ -1,4 +1,5 @@ -{$fields[$i]}; } } - slsql::go('INSERT INTO ' . get_called_class() . ' ' . $query_name_values . ' VALUES ' . $query_values_after, $query_values); - $this->id = slsql::go('SELECT id FROM ' . get_called_class() . ' ORDER BY id DESC LIMIT 1', array())['value']->fetch()['id']; + Slsql::go('INSERT INTO ' . get_called_class() . ' ' . $query_name_values . ' VALUES ' . $query_values_after, $query_values); + $this->id = Slsql::go('SELECT id FROM ' . get_called_class() . ' ORDER BY id DESC LIMIT 1', array())['value']->fetch()['id']; } else { $query_set = ""; $query_values = array(); @@ -65,7 +66,7 @@ public function save() $query_values[] = $this->{$fields[$i]}; } $query_values[] = $this->{'id'}; - slsql::go('UPDATE ' . get_called_class() . ' SET ' . $query_set . ' WHERE id = ?', $query_values); + Slsql::go('UPDATE ' . get_called_class() . ' SET ' . $query_set . ' WHERE id = ?', $query_values); } unset($query_values, $query_name_values, $query_values_after, $query_set); } @@ -79,9 +80,9 @@ public function save() public static function get($condition = null, $arr = array()) { if (!$condition) { - $result = slsql::go('select * from ' . get_called_class(), $arr)['value']->fetchAll(); + $result = Slsql::go('select * from ' . get_called_class(), $arr)['value']->fetchAll(); } else { - $result = slsql::go('select * from ' . get_called_class() . ' where ' . $condition . ";", $arr)['value']->fetchAll(); + $result = Slsql::go('select * from ' . get_called_class() . ' where ' . $condition . ";", $arr)['value']->fetchAll(); } if ($result == null) { @@ -110,7 +111,7 @@ public static function get($condition = null, $arr = array()) */ public function remove() { - slsql::go('DELETE FROM ' . get_called_class() . ' WHERE id = ?', array($this->id)); + Slsql::go('DELETE FROM ' . get_called_class() . ' WHERE id = ?', array($this->id)); } /** @@ -120,7 +121,7 @@ public function remove() public static function ids() { $list = array(); - $rows = slsql::go('SELECT id FROM ' . get_called_class())['value']->fetchAll(); + $rows = Slsql::go('SELECT id FROM ' . get_called_class())['value']->fetchAll(); foreach ($rows as $row) { $list[] = $row['id']; } @@ -135,7 +136,7 @@ public static function ids() public static function all($field = 'id') { $list = array(); - $rows = slsql::go('SELECT ' . $field . ' FROM ' . get_called_class())['value']->fetchAll(); + $rows = Slsql::go('SELECT ' . $field . ' FROM ' . get_called_class())['value']->fetchAll(); foreach ($rows as $row) { $list[] = $row[$field]; } @@ -150,7 +151,7 @@ public static function all($field = 'id') public static function allDistinct($field = 'id') { $list = array(); - $rows = slsql::go('SELECT DISTINCT ' . $field . ' FROM ' . get_called_class())['value']->fetchAll(); + $rows = Slsql::go('SELECT DISTINCT ' . $field . ' FROM ' . get_called_class())['value']->fetchAll(); foreach ($rows as $row) { $list[] = $row[$field]; } @@ -163,7 +164,7 @@ public static function allDistinct($field = 'id') */ public static function count() { - return slsql::go('SELECT count(*) FROM ' . get_called_class())['value']->fetchColumn(); + return Slsql::go('SELECT count(*) FROM ' . get_called_class())['value']->fetchColumn(); } /** @@ -177,7 +178,7 @@ public static function countWhere($condition = null, $arr = array()) if (!$condition) { return get_called_class()::count(); } else { - return slsql::go('SELECT count(*) FROM ' . get_called_class() . ' WHERE ' . $condition, $arr)['value']->fetchColumn(); + return Slsql::go('SELECT count(*) FROM ' . get_called_class() . ' WHERE ' . $condition, $arr)['value']->fetchColumn(); } } @@ -195,7 +196,7 @@ class ListModels * @param Model $model * Do not use this function */ - function add(Model $model) + public function add(Model $model) { $this->arr[] = $model; } diff --git a/src/slsql.php b/src/slsql/slsql.php similarity index 98% rename from src/slsql.php rename to src/slsql/slsql.php index 7ddb46f..7d8e835 100644 --- a/src/slsql.php +++ b/src/slsql/slsql.php @@ -1,4 +1,5 @@ - Date: Wed, 5 Jun 2019 19:25:13 +0200 Subject: [PATCH 03/10] Update slsql.php --- src/slsql/slsql.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/slsql/slsql.php b/src/slsql/slsql.php index 7d8e835..ca8fb5d 100644 --- a/src/slsql/slsql.php +++ b/src/slsql/slsql.php @@ -1,4 +1,4 @@ - Date: Wed, 5 Jun 2019 19:27:31 +0200 Subject: [PATCH 04/10] Remove src files --- src/model/model.php | 264 --------------------------------------- src/model/test.php | 32 ----- src/model/user.class.php | 6 - src/slsql/slsql.php | 208 ------------------------------ src/slsql/test.php | 20 --- 5 files changed, 530 deletions(-) delete mode 100644 src/model/model.php delete mode 100644 src/model/test.php delete mode 100644 src/model/user.class.php delete mode 100644 src/slsql/slsql.php delete mode 100644 src/slsql/test.php diff --git a/src/model/model.php b/src/model/model.php deleted file mode 100644 index f885db4..0000000 --- a/src/model/model.php +++ /dev/null @@ -1,264 +0,0 @@ -Save - * Save Model on database - */ - public function save() - { - foreach (get_class_vars(get_called_class()) as $name => $value) { - // Here for ignore variable - if ($name != 'id') { - $fields[] = $name; - } - } - $count = count($fields); - $query_name_values = ""; - $query_values = array(); - $query_values_after = ""; - - if ($this->id == null) { - if ($count == 1) { - $query_values_after .= '(?)'; - $query_name_values = '(`' . $fields[0] . '`)'; - $query_values = array($this->{$fields[0]}); - } else { - for ($i = 0; $i < $count; $i++) { - if ($i == 0) { - $query_values_after .= '(?'; - $query_name_values .= '(`' . $fields[$i] . '`'; - } elseif ($i == $count - 1) { - $query_values_after .= ',?)'; - $query_name_values .= ',`' . $fields[$i] . '`)'; - } else { - $query_values_after .= ',?'; - $query_name_values .= ',`' . $fields[$i] . '`'; - } - $query_values[] .= $this->{$fields[$i]}; - } - } - Slsql::go('INSERT INTO ' . get_called_class() . ' ' . $query_name_values . ' VALUES ' . $query_values_after, $query_values); - $this->id = Slsql::go('SELECT id FROM ' . get_called_class() . ' ORDER BY id DESC LIMIT 1', array())['value']->fetch()['id']; - } else { - $query_set = ""; - $query_values = array(); - - for ($i = 0; $i < $count; $i++) { - if ($i == 0) { - $query_set .= '`' . $fields[$i] . '`=?'; - } else { - $query_set .= ',`' . $fields[$i] . '`=?'; - } - $query_values[] = $this->{$fields[$i]}; - } - $query_values[] = $this->{'id'}; - Slsql::go('UPDATE ' . get_called_class() . ' SET ' . $query_set . ' WHERE id = ?', $query_values); - } - unset($query_values, $query_name_values, $query_values_after, $query_set); - } - - /** - * @param null $condition - * @param array $arr - * @return EmptyListModels|ListModels - * @throws Exception - */ - public static function get($condition = null, $arr = array()) - { - if (!$condition) { - $result = Slsql::go('select * from ' . get_called_class(), $arr)['value']->fetchAll(); - } else { - $result = Slsql::go('select * from ' . get_called_class() . ' where ' . $condition . ";", $arr)['value']->fetchAll(); - } - - if ($result == null) { - return new EmptyListModels; - } - $list = new ListModels; - - foreach (get_class_vars(get_called_class()) as $name => $value) { - $fields[] = array('name' => $name, 'val' => $value); - } - $count = count($fields); - - $temp = get_called_class(); - foreach ($result as $model) { - $tempModel = new $temp; - for ($i = 0; $i < $count; $i++) { - $tempModel->{$fields[$i]['name']} = $model[$fields[$i]['name']]; - } - $list->add($tempModel); - } - return $list; - } - - /** - * @throws Exception - */ - public function remove() - { - Slsql::go('DELETE FROM ' . get_called_class() . ' WHERE id = ?', array($this->id)); - } - - /** - * @return array - * @throws Exception - */ - public static function ids() - { - $list = array(); - $rows = Slsql::go('SELECT id FROM ' . get_called_class())['value']->fetchAll(); - foreach ($rows as $row) { - $list[] = $row['id']; - } - return $list; - } - - /** - * @param string $field - * @return array - * @throws Exception - */ - public static function all($field = 'id') - { - $list = array(); - $rows = Slsql::go('SELECT ' . $field . ' FROM ' . get_called_class())['value']->fetchAll(); - foreach ($rows as $row) { - $list[] = $row[$field]; - } - return $list; - } - - /** - * @param string $field - * @return array - * @throws Exception - */ - public static function allDistinct($field = 'id') - { - $list = array(); - $rows = Slsql::go('SELECT DISTINCT ' . $field . ' FROM ' . get_called_class())['value']->fetchAll(); - foreach ($rows as $row) { - $list[] = $row[$field]; - } - return $list; - } - - /** - * @return int - * @throws Exception - */ - public static function count() - { - return Slsql::go('SELECT count(*) FROM ' . get_called_class())['value']->fetchColumn(); - } - - /** - * @param null $condition - * @param array $arr - * @return int - * @throws Exception - */ - public static function countWhere($condition = null, $arr = array()) - { - if (!$condition) { - return get_called_class()::count(); - } else { - return Slsql::go('SELECT count(*) FROM ' . get_called_class() . ' WHERE ' . $condition, $arr)['value']->fetchColumn(); - } - - } -} - -/** - * Class ListModels - */ -class ListModels -{ - private $arr; - public $isEmpty = false; - - /** - * @param Model $model - * Do not use this function - */ - public function add(Model $model) - { - $this->arr[] = $model; - } - - /** - * @return array - */ - public function all() - { - return $this->arr; - } - - /** - * @param null $default - * @return Model|$default - */ - public function firstOrDefault($default = null) - { - return !$this->isEmpty ? reset($this->arr) : $default; - } - - /** - * @return Model|null - */ - public function first() - { - return !$this->isEmpty ? reset($this->arr) : null; - } - - /** - * @param null $default - * @return Model|null - */ - public function lastOrDefault($default = null) - { - return !$this->isEmpty ? end($this->arr) : $default; - } - - /** - * @return Model|null - */ - public function last() - { - return !$this->isEmpty ? end($this->arr) : null; - } - - /** - * @return int - */ - public function count() - { - return count($this->arr); - } -} - -/** - * Class EmptyListModels - */ -class EmptyListModels extends ListModels -{ - public function __construct() - { - $this->isEmpty = true; - } -} diff --git a/src/model/test.php b/src/model/test.php deleted file mode 100644 index 9ee6061..0000000 --- a/src/model/test.php +++ /dev/null @@ -1,32 +0,0 @@ -count(); -//var_dump($user); -echo '
'; -//echo $user->remove(); -echo '
'; - -//var_dump(Users::allDistinct('email')); - -$user = new Users(); -$user->name = 'CrBast'; -$user->Save(); -echo '
'; -var_dump($user); -echo '
'; - -$user = Users::get()->last(); -$user->name = "CrBast2"; -$user->psw = 123; -$user->email = "uioehbfi@nfo.com"; -$user->save(); -//$user->remove(); -var_dump($user); -$user->save(); -echo '
'; -//var_dump($user->name); -/* -echo ('
'); -var_dump(Users::getAllId());*/ diff --git a/src/model/user.class.php b/src/model/user.class.php deleted file mode 100644 index c9ca43b..0000000 --- a/src/model/user.class.php +++ /dev/null @@ -1,6 +0,0 @@ -connect(); - * $db->send($request, $arraySettings) - * - * #Example 2 (lite) - * $db = new slsql(array()); - * $db->send($request, $arraySettings) - * - * Return Type array([value], [status], [message]) - */ -class Slsql -{ - private $dsn, - $user, - $password, - $db, - $dbType, - $dbName, - $isConnected = false; - - public function __construct($params) - { - $this->dbName = $params['dbName']; - $this->dsn = isset($params['host']) ? $params['host'] : '127.0.0.1:3306'; - $this->dbType = isset($params['dbType']) ? $params['dbType'] : 'mysql'; - $this->user = isset($params['user']) ? $params['user'] : 'root'; - $this->password = isset($params['psw']) ? $params['psw'] : ''; - } - - public function __destruct() - { - unset($this->dbName, $this->dsn, $this->dbType, $this->user, $this->password, $this->isConnected, $this->db); - } - - /** - * !! Not mandatory. During "send()" method the object creates the connection if it does not exist. - * Connect to database. - * Return : - * [status] = TRUE(OK)/FALSE(Problem), - * [message] = Exception message => if [status] = false - */ - public function connect() - { - try { - $this->db = $this->createDB(); - $this->isConnected = true; - return createMessage('', true, ''); - } catch (Exception $e) { - return createMessage('', false, $e->getMessage()); - } - } - - private function connectDB() - { - try { - $this->db = $this->createDB(); - } catch (Exception $e) { - return createMessage('', false, $e->getMessage()); - } - } - - /** - * Send Request. - * Params => send($request, $array) : - * Request : sql request - * Array: Array with data insertion - * - * Example : send('SELECT * FROM user WHERE user.id = ?', array(12)) - * - * Return : - * [value] = result, - * [status] = TRUE(OK)/FALSE(Problem), - * [message] = Exception message => if [status] = false - */ - public function send($request, $array) - { - if (!$this->isConnected) { - $this->connectDB(); - $this->isConnected = true; - } - try { - $stmt = $this->db->prepare($request); - $stmt->execute($array); - return createMessage($stmt, true, ''); - } catch (Exception $e) { - return createMessage('', false, $e->getMessage()); - } - } - - /** - * Create DB object (PDO) - */ - public function createDB() - { - return new PDO($this->dbType . ':dbname=' . $this->dbName . ';host=' . $this->dsn, $this->user, $this->password); - } - - /** - * Send Request. - * the parameters are in the .env file - * - * Return : - * [value] = result, - * [status] = TRUE(OK)/FALSE(Problem), - * [message] = Exception message => if [status] = false - */ - public static function go($request, $array = array()) - { - try { - $db = slsql::getPDO(); - $stmt = $db->prepare($request); - $stmt->execute($array); - //var_dump($stmt); - return createMessage($stmt, true, ''); - } catch (PDOException $e) { - throw new Exception($e->getMessage()); - return createMessage('', false, $e->getMessage()); - } - } - - /** - * Send Transaction. - * the parameters are in the .env file - * - * Return : - * [value] = result, - * [status] = TRUE(OK)/FALSE(Problem), - * [message] = Exception message => if [status] = false - */ - public static function goT(SLTransaction $trans) - { - $db = slsql::getPDO(); - try { - $db->beginTransaction(); - foreach ($trans->get() as $transaction) { - $stmt = $db->prepare($transaction['req']); - $stmt->execute($transaction['arr']); - } - $db->commit(); - return createMessage($stmt, true, ''); - } catch (PDOException $e) { - $db->rollback(); - exit(createMessage('', false, $e->getMessage())); - } - - } - - private static function getPDO() - { - try { - require '../.env'; - } catch (Exception $e) { - throw new Error("Error Processing Request"); - } - try { - $db = new PDO($env['DBType'] . ':dbname=' . $env['DBName'] . ';host=' . $env['Host'], $env['User'], $env['Password']); - $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); - return $db; - } catch (PDOException $e) { - throw new Error('Cannot create connection to DB. Error message : '); - } - } -} - -class SLTransaction -{ - private $allTrans; - - public function add($request, $array = array()) - { - $this->allTrans[] = array('req' => $request, 'arr' => $array); - } - - public function get() - { - return $this->allTrans; - } - - public function go() - { - return slsql::goT($this); - } -} - -/** - * Status : true = OK | false = problem - */ -function createMessage($value, $status, $message) -{ - return array('value' => $value, 'status' => $status, 'message' => $message); -} diff --git a/src/slsql/test.php b/src/slsql/test.php deleted file mode 100644 index 7ea312c..0000000 --- a/src/slsql/test.php +++ /dev/null @@ -1,20 +0,0 @@ - "m151")); -echo var_dump($db->connect()); -$result = $db->send('SELECT * FROM chat', array()); -$result2 = slsql::go('SELECT * FROM chat', array()); - -echo var_dump($result); - -echo '



'; - -echo var_dump($result2); - -/*$trans = new SLTransaction(); -$trans->add('SELECT * from users'); -$trans->add('INSERT INTO `users` (`name`, `description`) VALUES (?, ?)', array(10, 10)); -$trans->add('SELECT * from users'); -$temp = $trans->go(); -var_dump($temp['value']->fetchAll());*/ From fd8a5581095c4936614028f799d49fcdf1536a6d Mon Sep 17 00:00:00 2001 From: Bastien Date: Wed, 5 Jun 2019 19:27:49 +0200 Subject: [PATCH 05/10] Add src files --- src/Model/Model.php | 264 +++++++++++++++++++++++++++++++++++++++ src/Model/test.php | 32 +++++ src/Model/user.class.php | 6 + src/Slsql/Slsql.php | 208 ++++++++++++++++++++++++++++++ src/Slsql/test.php | 20 +++ 5 files changed, 530 insertions(+) create mode 100644 src/Model/Model.php create mode 100644 src/Model/test.php create mode 100644 src/Model/user.class.php create mode 100644 src/Slsql/Slsql.php create mode 100644 src/Slsql/test.php diff --git a/src/Model/Model.php b/src/Model/Model.php new file mode 100644 index 0000000..f885db4 --- /dev/null +++ b/src/Model/Model.php @@ -0,0 +1,264 @@ +Save + * Save Model on database + */ + public function save() + { + foreach (get_class_vars(get_called_class()) as $name => $value) { + // Here for ignore variable + if ($name != 'id') { + $fields[] = $name; + } + } + $count = count($fields); + $query_name_values = ""; + $query_values = array(); + $query_values_after = ""; + + if ($this->id == null) { + if ($count == 1) { + $query_values_after .= '(?)'; + $query_name_values = '(`' . $fields[0] . '`)'; + $query_values = array($this->{$fields[0]}); + } else { + for ($i = 0; $i < $count; $i++) { + if ($i == 0) { + $query_values_after .= '(?'; + $query_name_values .= '(`' . $fields[$i] . '`'; + } elseif ($i == $count - 1) { + $query_values_after .= ',?)'; + $query_name_values .= ',`' . $fields[$i] . '`)'; + } else { + $query_values_after .= ',?'; + $query_name_values .= ',`' . $fields[$i] . '`'; + } + $query_values[] .= $this->{$fields[$i]}; + } + } + Slsql::go('INSERT INTO ' . get_called_class() . ' ' . $query_name_values . ' VALUES ' . $query_values_after, $query_values); + $this->id = Slsql::go('SELECT id FROM ' . get_called_class() . ' ORDER BY id DESC LIMIT 1', array())['value']->fetch()['id']; + } else { + $query_set = ""; + $query_values = array(); + + for ($i = 0; $i < $count; $i++) { + if ($i == 0) { + $query_set .= '`' . $fields[$i] . '`=?'; + } else { + $query_set .= ',`' . $fields[$i] . '`=?'; + } + $query_values[] = $this->{$fields[$i]}; + } + $query_values[] = $this->{'id'}; + Slsql::go('UPDATE ' . get_called_class() . ' SET ' . $query_set . ' WHERE id = ?', $query_values); + } + unset($query_values, $query_name_values, $query_values_after, $query_set); + } + + /** + * @param null $condition + * @param array $arr + * @return EmptyListModels|ListModels + * @throws Exception + */ + public static function get($condition = null, $arr = array()) + { + if (!$condition) { + $result = Slsql::go('select * from ' . get_called_class(), $arr)['value']->fetchAll(); + } else { + $result = Slsql::go('select * from ' . get_called_class() . ' where ' . $condition . ";", $arr)['value']->fetchAll(); + } + + if ($result == null) { + return new EmptyListModels; + } + $list = new ListModels; + + foreach (get_class_vars(get_called_class()) as $name => $value) { + $fields[] = array('name' => $name, 'val' => $value); + } + $count = count($fields); + + $temp = get_called_class(); + foreach ($result as $model) { + $tempModel = new $temp; + for ($i = 0; $i < $count; $i++) { + $tempModel->{$fields[$i]['name']} = $model[$fields[$i]['name']]; + } + $list->add($tempModel); + } + return $list; + } + + /** + * @throws Exception + */ + public function remove() + { + Slsql::go('DELETE FROM ' . get_called_class() . ' WHERE id = ?', array($this->id)); + } + + /** + * @return array + * @throws Exception + */ + public static function ids() + { + $list = array(); + $rows = Slsql::go('SELECT id FROM ' . get_called_class())['value']->fetchAll(); + foreach ($rows as $row) { + $list[] = $row['id']; + } + return $list; + } + + /** + * @param string $field + * @return array + * @throws Exception + */ + public static function all($field = 'id') + { + $list = array(); + $rows = Slsql::go('SELECT ' . $field . ' FROM ' . get_called_class())['value']->fetchAll(); + foreach ($rows as $row) { + $list[] = $row[$field]; + } + return $list; + } + + /** + * @param string $field + * @return array + * @throws Exception + */ + public static function allDistinct($field = 'id') + { + $list = array(); + $rows = Slsql::go('SELECT DISTINCT ' . $field . ' FROM ' . get_called_class())['value']->fetchAll(); + foreach ($rows as $row) { + $list[] = $row[$field]; + } + return $list; + } + + /** + * @return int + * @throws Exception + */ + public static function count() + { + return Slsql::go('SELECT count(*) FROM ' . get_called_class())['value']->fetchColumn(); + } + + /** + * @param null $condition + * @param array $arr + * @return int + * @throws Exception + */ + public static function countWhere($condition = null, $arr = array()) + { + if (!$condition) { + return get_called_class()::count(); + } else { + return Slsql::go('SELECT count(*) FROM ' . get_called_class() . ' WHERE ' . $condition, $arr)['value']->fetchColumn(); + } + + } +} + +/** + * Class ListModels + */ +class ListModels +{ + private $arr; + public $isEmpty = false; + + /** + * @param Model $model + * Do not use this function + */ + public function add(Model $model) + { + $this->arr[] = $model; + } + + /** + * @return array + */ + public function all() + { + return $this->arr; + } + + /** + * @param null $default + * @return Model|$default + */ + public function firstOrDefault($default = null) + { + return !$this->isEmpty ? reset($this->arr) : $default; + } + + /** + * @return Model|null + */ + public function first() + { + return !$this->isEmpty ? reset($this->arr) : null; + } + + /** + * @param null $default + * @return Model|null + */ + public function lastOrDefault($default = null) + { + return !$this->isEmpty ? end($this->arr) : $default; + } + + /** + * @return Model|null + */ + public function last() + { + return !$this->isEmpty ? end($this->arr) : null; + } + + /** + * @return int + */ + public function count() + { + return count($this->arr); + } +} + +/** + * Class EmptyListModels + */ +class EmptyListModels extends ListModels +{ + public function __construct() + { + $this->isEmpty = true; + } +} diff --git a/src/Model/test.php b/src/Model/test.php new file mode 100644 index 0000000..9ee6061 --- /dev/null +++ b/src/Model/test.php @@ -0,0 +1,32 @@ +count(); +//var_dump($user); +echo '
'; +//echo $user->remove(); +echo '
'; + +//var_dump(Users::allDistinct('email')); + +$user = new Users(); +$user->name = 'CrBast'; +$user->Save(); +echo '
'; +var_dump($user); +echo '
'; + +$user = Users::get()->last(); +$user->name = "CrBast2"; +$user->psw = 123; +$user->email = "uioehbfi@nfo.com"; +$user->save(); +//$user->remove(); +var_dump($user); +$user->save(); +echo '
'; +//var_dump($user->name); +/* +echo ('
'); +var_dump(Users::getAllId());*/ diff --git a/src/Model/user.class.php b/src/Model/user.class.php new file mode 100644 index 0000000..c9ca43b --- /dev/null +++ b/src/Model/user.class.php @@ -0,0 +1,6 @@ +connect(); + * $db->send($request, $arraySettings) + * + * #Example 2 (lite) + * $db = new slsql(array()); + * $db->send($request, $arraySettings) + * + * Return Type array([value], [status], [message]) + */ +class Slsql +{ + private $dsn, + $user, + $password, + $db, + $dbType, + $dbName, + $isConnected = false; + + public function __construct($params) + { + $this->dbName = $params['dbName']; + $this->dsn = isset($params['host']) ? $params['host'] : '127.0.0.1:3306'; + $this->dbType = isset($params['dbType']) ? $params['dbType'] : 'mysql'; + $this->user = isset($params['user']) ? $params['user'] : 'root'; + $this->password = isset($params['psw']) ? $params['psw'] : ''; + } + + public function __destruct() + { + unset($this->dbName, $this->dsn, $this->dbType, $this->user, $this->password, $this->isConnected, $this->db); + } + + /** + * !! Not mandatory. During "send()" method the object creates the connection if it does not exist. + * Connect to database. + * Return : + * [status] = TRUE(OK)/FALSE(Problem), + * [message] = Exception message => if [status] = false + */ + public function connect() + { + try { + $this->db = $this->createDB(); + $this->isConnected = true; + return createMessage('', true, ''); + } catch (Exception $e) { + return createMessage('', false, $e->getMessage()); + } + } + + private function connectDB() + { + try { + $this->db = $this->createDB(); + } catch (Exception $e) { + return createMessage('', false, $e->getMessage()); + } + } + + /** + * Send Request. + * Params => send($request, $array) : + * Request : sql request + * Array: Array with data insertion + * + * Example : send('SELECT * FROM user WHERE user.id = ?', array(12)) + * + * Return : + * [value] = result, + * [status] = TRUE(OK)/FALSE(Problem), + * [message] = Exception message => if [status] = false + */ + public function send($request, $array) + { + if (!$this->isConnected) { + $this->connectDB(); + $this->isConnected = true; + } + try { + $stmt = $this->db->prepare($request); + $stmt->execute($array); + return createMessage($stmt, true, ''); + } catch (Exception $e) { + return createMessage('', false, $e->getMessage()); + } + } + + /** + * Create DB object (PDO) + */ + public function createDB() + { + return new PDO($this->dbType . ':dbname=' . $this->dbName . ';host=' . $this->dsn, $this->user, $this->password); + } + + /** + * Send Request. + * the parameters are in the .env file + * + * Return : + * [value] = result, + * [status] = TRUE(OK)/FALSE(Problem), + * [message] = Exception message => if [status] = false + */ + public static function go($request, $array = array()) + { + try { + $db = slsql::getPDO(); + $stmt = $db->prepare($request); + $stmt->execute($array); + //var_dump($stmt); + return createMessage($stmt, true, ''); + } catch (PDOException $e) { + throw new Exception($e->getMessage()); + return createMessage('', false, $e->getMessage()); + } + } + + /** + * Send Transaction. + * the parameters are in the .env file + * + * Return : + * [value] = result, + * [status] = TRUE(OK)/FALSE(Problem), + * [message] = Exception message => if [status] = false + */ + public static function goT(SLTransaction $trans) + { + $db = slsql::getPDO(); + try { + $db->beginTransaction(); + foreach ($trans->get() as $transaction) { + $stmt = $db->prepare($transaction['req']); + $stmt->execute($transaction['arr']); + } + $db->commit(); + return createMessage($stmt, true, ''); + } catch (PDOException $e) { + $db->rollback(); + exit(createMessage('', false, $e->getMessage())); + } + + } + + private static function getPDO() + { + try { + require '../.env'; + } catch (Exception $e) { + throw new Error("Error Processing Request"); + } + try { + $db = new PDO($env['DBType'] . ':dbname=' . $env['DBName'] . ';host=' . $env['Host'], $env['User'], $env['Password']); + $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + return $db; + } catch (PDOException $e) { + throw new Error('Cannot create connection to DB. Error message : '); + } + } +} + +class SLTransaction +{ + private $allTrans; + + public function add($request, $array = array()) + { + $this->allTrans[] = array('req' => $request, 'arr' => $array); + } + + public function get() + { + return $this->allTrans; + } + + public function go() + { + return slsql::goT($this); + } +} + +/** + * Status : true = OK | false = problem + */ +function createMessage($value, $status, $message) +{ + return array('value' => $value, 'status' => $status, 'message' => $message); +} diff --git a/src/Slsql/test.php b/src/Slsql/test.php new file mode 100644 index 0000000..7ea312c --- /dev/null +++ b/src/Slsql/test.php @@ -0,0 +1,20 @@ + "m151")); +echo var_dump($db->connect()); +$result = $db->send('SELECT * FROM chat', array()); +$result2 = slsql::go('SELECT * FROM chat', array()); + +echo var_dump($result); + +echo '



'; + +echo var_dump($result2); + +/*$trans = new SLTransaction(); +$trans->add('SELECT * from users'); +$trans->add('INSERT INTO `users` (`name`, `description`) VALUES (?, ?)', array(10, 10)); +$trans->add('SELECT * from users'); +$temp = $trans->go(); +var_dump($temp['value']->fetchAll());*/ From 3c2796f19f7df5cae344fd09a315e71da5d270b8 Mon Sep 17 00:00:00 2001 From: Bastien Date: Wed, 5 Jun 2019 19:40:20 +0200 Subject: [PATCH 06/10] Update Slsql.php --- src/Slsql/Slsql.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Slsql/Slsql.php b/src/Slsql/Slsql.php index ca8fb5d..6b15b87 100644 --- a/src/Slsql/Slsql.php +++ b/src/Slsql/Slsql.php @@ -1,4 +1,4 @@ - Date: Wed, 5 Jun 2019 19:46:12 +0200 Subject: [PATCH 07/10] Update composer.json --- composer.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 6eba214..1d4d767 100644 --- a/composer.json +++ b/composer.json @@ -16,6 +16,10 @@ "autoload": { "psr-4": { "slsql\\": "/src" - } + }, + "files": [ + "src/Model/Model.php", + "src/Slsql/Slsql.php" + ] } } \ No newline at end of file From b4df318f29a303ee7d12bf040f63bab9f74c781a Mon Sep 17 00:00:00 2001 From: Bastien Date: Wed, 5 Jun 2019 22:06:27 +0200 Subject: [PATCH 08/10] Update Model --- composer.json | 6 +----- src/Model/Model.php | 2 ++ 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/composer.json b/composer.json index 1d4d767..6eba214 100644 --- a/composer.json +++ b/composer.json @@ -16,10 +16,6 @@ "autoload": { "psr-4": { "slsql\\": "/src" - }, - "files": [ - "src/Model/Model.php", - "src/Slsql/Slsql.php" - ] + } } } \ No newline at end of file diff --git a/src/Model/Model.php b/src/Model/Model.php index f885db4..d7576eb 100644 --- a/src/Model/Model.php +++ b/src/Model/Model.php @@ -1,5 +1,7 @@ Date: Thu, 6 Jun 2019 18:41:22 +0200 Subject: [PATCH 09/10] Change config concept --- src/Config.php | 10 ++++++++++ src/Slsql/Slsql.php | 12 ++++++------ src/example.env | 10 ---------- 3 files changed, 16 insertions(+), 16 deletions(-) create mode 100644 src/Config.php delete mode 100644 src/example.env diff --git a/src/Config.php b/src/Config.php new file mode 100644 index 0000000..3b72d0c --- /dev/null +++ b/src/Config.php @@ -0,0 +1,10 @@ +setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); return $db; } catch (PDOException $e) { diff --git a/src/example.env b/src/example.env deleted file mode 100644 index a2f6daa..0000000 --- a/src/example.env +++ /dev/null @@ -1,10 +0,0 @@ -'mysql', -'DBName'=>'Default', -'Host'=>'127.0.0.1:3306', -'User'=>'root', -'Password'=>'' - -); \ No newline at end of file From 3aea8729094ca6cc4b55a5f000f795bb8f478e00 Mon Sep 17 00:00:00 2001 From: Bastien Date: Thu, 6 Jun 2019 19:09:53 +0200 Subject: [PATCH 10/10] Fix : namespace problems --- src/Config.php | 12 ++++++------ src/Slsql/Slsql.php | 12 +++++++----- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/Config.php b/src/Config.php index 3b72d0c..08696dd 100644 --- a/src/Config.php +++ b/src/Config.php @@ -1,10 +1,10 @@ -prepare($request); $stmt->execute($array); //var_dump($stmt); @@ -148,7 +150,7 @@ public static function go($request, $array = array()) */ public static function goT(SLTransaction $trans) { - $db = slsql::getPDO(); + $db = Slsql::getPDO(); try { $db->beginTransaction(); foreach ($trans->get() as $transaction) { @@ -166,8 +168,8 @@ public static function goT(SLTransaction $trans) private static function getPDO() { - if (!class_exists("Config")) { - throw new Error("Error Processing Request"); + if (!class_exists("\slsql\Config")) { + throw new Error("Cannot find <\slsql\Config>"); } try { $db = new PDO(Config::dbType . ':dbname=' . Config::dbName . ';host=' . Config::host, Config::user, Config::password); @@ -195,7 +197,7 @@ public function get() public function go() { - return slsql::goT($this); + return Slsql::goT($this); } }