sql.class.php 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <?php
  2. require_once('query.class.php');
  3. /**
  4. * SQL class. Used for handling SQL connections
  5. *
  6. * @module sql
  7. * @class SQL
  8. * @constructor
  9. */
  10. class SQL {
  11. /**
  12. * This is the mysqli connection beneath everything
  13. *
  14. * @property sql
  15. * @type {mysqli}
  16. * @private
  17. * @required
  18. */
  19. private $guid;
  20. private $sql;
  21. public $queries = [];
  22. private static $connections = [];
  23. public function __construct($server,$user,$pass,$db){
  24. $this->guid = uniqid();
  25. $this->sql = new mysqli('p:'.$server,$user,$pass,$db) or die('Unable to connect to mysql');
  26. self::$connections[] = $sql;
  27. }
  28. public function __destruct(){
  29. $this->sql->rollback();
  30. $this->sql->close();
  31. foreach($this->queries as $query){
  32. unset($query);
  33. }
  34. self::$connections = array_diff(self::$connections, [$this]);
  35. }
  36. public function __invoke(){
  37. return $this->sql;
  38. }
  39. public function __get($name){
  40. switch($name){
  41. case 'error':
  42. return $this->sql->error;
  43. break;
  44. case 'insert_id':
  45. return $this->sql->insert_id;
  46. break;
  47. }
  48. }
  49. public function __toString(){
  50. return $this->guid;
  51. }
  52. /**
  53. * Returns a Query object based on inputs
  54. *
  55. * @method query
  56. * @param {String} sql The sql expression to run
  57. * @param {String=null} [types] A string containing all the types of arguments being passed
  58. * @param {Mixed} [bindings]* The bindings to use in the sql statement
  59. * @return {Query} Returns the query object
  60. */
  61. public function query(...$args){
  62. return new SQL\Query(...array_merge([$this], $args));
  63. }
  64. public function escape($s){
  65. return $this->sql->escape_string($s);
  66. }
  67. public function charset($charset){
  68. return $this->sql->set_charset($charset);
  69. }
  70. public static function make_referenced(&$arr){
  71. $refs = [];
  72. foreach($arr as $key => $value){
  73. $refs[$key] = &$arr[$key];
  74. }
  75. return $refs;
  76. }
  77. public static function shutdown(){
  78. foreach(self::$connections as $sql){
  79. unset($sql);
  80. }
  81. }
  82. }
  83. register_shutdown_function(function(){
  84. SQL::shutdown();
  85. });
  86. ?>