```yaml module: token version: 0.9 ``` Overview ---- > ### 1. Introduction The `token` package features the `TreeToken`. It allows securing PHP sessions and children instances. > ### 3. Features PHP SESSION - Prevent XSS (_PHPSESSID_ theft) - Each PHP load has a single-use token - that checks that last call was yours - that unsets the session if someone theft your _PHPSESSID_ - Manage `INSERT INTO` queries - Manage `DELETE` queries Specification - Fetches the whole schema specification (foreign keys, primary keys, etc) - Manage `SELECT *` - Manage composite `PRIMARY KEY` - Manage `WHERE` conditions (_=_, _<>_, _<_, _>_, _>=_, _<=_, _LIKE_, _IN_) - Manage aggregation functions (_AVG()_, _SUM()_, _MAX()_, _MIN()_, _COUNT()_, *GROUP_CONCAT()*) - Manage `ORDER BY` ordering - Manage `SELECT DISTINCT` specification (_ASC_, _DESC_) - Inserting multiple rows at once - Automatically select the **PRIMARY KEY(S)** - Manage joined tables - Manage `fetch` and `fetchAll` - Manage `NULL` keyword - Manage booleans - Manage inserting the `DEFAULT` value - Manage format beautifying (numbers as numbers, same for booleans, null) Usage ---- > #### [1] Loader ```php #### [2] SELECT queries > ##### (2.1) Single Table ```php select('*') ->fetch(); // First row only Table::get('table_name') ->select('*') ->unique() ->fetch(); ``` > ##### (2.3) Select ```php select('field_1') ->select('field_2') /// ... ->select('field_N') ->fetch(); ``` > ##### (2.4) Order by ```php orderby('field_name', Rows::ORDER_ASC) ->fetch(); // Descending order of the field `field_name` Table::get('table_name') ->orderby('field_name', Rows::ORDER_DESC) ->fetch(); ``` > #### (2.5) WhereId It will match the corresponding `PRIMARY KEY` of the table, if it is a composed key (multiple fields) instead of giving an argument, give an array for each in the order displayed in _phpmyadmin_ or you mysql viewer. ```php `id_user` Table::get('user') ->select('*') // select all fields ->whereId(12) // if id_user is equal to 12 ->fetch(); // fetch matching rows // PRIMARY KEYS => `username` + `mail` Table::get('user') ->select('*') // select all fields ->whereId([12, 'sample@mail.com']) // if `id_user` is equal to 12 // AND `mail` is equal to 'sample@mail.com' ->fetch(); // fetch matching rows ``` The available condition operators are listed in the [constants](todo) section. Note: `Rows::COND_EQUAL` is set by default if missing > #### (2.6) Where clause The where clause uses one of php's magic functions (\_\_call). So the name of the method you call will contain the field of the condition. But you must use the correct case, removing '\_' and setting the next character to upper case. The rest will be forced to lower case. You can refer to the following examples: |Field|Method name| |---|---| |username|`whereUsername`| |id_user|`whereIdUser`| |aaa_bb_c_ddd|`whereAaaBbCDdd`| ```php select('*') ->whereUsername('someusername') // if username is equal to 'someusername' ->whereMail(['somemail', Rows::COND_EQUAL]) // same as previous line (explicit here) ->fetch(); ``` Request examples ---- > ##### `1. Select all` ```sql SELECT * FROM user_table ``` ```php select('*') ->fetch(); ``` > ##### `2. Normal select` ```sql SELECT id_user, username, mail FROM user_table ``` ```php select('id_user') ->select('username') ->select('mail') ->fetch(); ``` > ##### `3. Select distinct` ```sql SELECT DISTINCT id_user, -- distinct username, mail FROM user_table ``` ```php select('id_user', null, true) // 2nd arg is for aggregation functions ->select('username') ->select('mail') ->fetch(); ``` > ##### `4. Aggregation functions` ```sql SELECT id_post, count(nb_view) FROM posts ``` ```php select('id_post') ->select('nb_view', Rows::SEL_COUNT) ->fetch(); ``` > ##### `5. Select as (alias)` ```sql SELECT id_post, count(nb_view) as NB_COUNT FROM posts ``` ```php select('id_post') ->select('nb_view', Rows::SEL_COUNT, null, 'NB_COUNT') ->fetch(); ``` > ##### `6. Single PRIMARY KEY condition` ```sql SELECT * FROM posts WHERE id_post = 10 ``` ```php select('*') ->whereId(10) ->fetch(); ``` > ##### `7. Composite PRIMARY KEY condition` ```sql SELECT * FROM posts WHERE id_post = 10 -- primary key (field 1) AND id_user = 11 -- primary key (field 2) ``` ```php select('*') ->whereId([10, 11]) ->fetch(); ``` > ##### `8. Condition types` ```sql SELECT * FROM complex_table WHERE a = 10 AND b <> 11 AND c < 12 AND d > 13 AND e <= 14 AND f >= 15 AND g LIKE '%16%' AND h IN (2, 4, 6, 8) ``` ```php select('*') ->whereA( 10 ) ->whereB( [11, Rows::COND_NOTEQ] ) ->whereC( [12, Rows::COND_INF] ) ->whereD( [13, Rows::COND_SUP] ) ->whereE( [14, Rows::COND_INFEQ] ) ->whereF( [15, Rows::COND_SUPEQ] ) ->whereG( ['%16%', Rows::COND_LIKE] ) ->whereH( [[2, 4, 6, 8], Rows::COND_IN] ) ->fetch(); ```