Guest User

Untitled

a guest
May 14th, 2018
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.31 KB | None | 0 0
  1. <?php
  2.  
  3. class Database {
  4.  
  5. private $query; //текст исходного SQL-запроса
  6. private $trueQuery; //текст SQL-запроса после преобразования
  7. private $params; //массив подставляемых параметров
  8. public $paramSymbol = '?'; //символ, который будет заменяться подставляемыми параметрами
  9. private $result; //результирующая выборка
  10. private $linkID; //ID соединения с БД
  11. private $host; //адрес сервера
  12. private $user; //имя пользователя
  13. private $pass; //пароль
  14. private $db; //имя БД
  15. public $numRows; //количество записей в выборке
  16. public $affectedRows; //количество затронутых записей
  17. public $rowData; //данные одной записи из выборки
  18.  
  19. //Конструктор класса
  20. public function __construct($hostname,$username,$password,$dbname) {
  21.  
  22. $this->host = $hostname;
  23. $this->user = $username;
  24. $this->pass = $password;
  25. $this->db = $dbname;
  26.  
  27. }
  28.  
  29. //открытие соединения с СУБД
  30. public function Connect() {
  31.  
  32. $this->linkID = mysql_connect($this->host,$this->user,$this->pass) or die('Ошибка подключения к СУБД');
  33.  
  34. if(!$this->linkID) return false;
  35.  
  36. if(!(mysql_selectdb($this->db, $this->linkID) or die('Ошибка выбора базы'))) {
  37. return false;
  38. }
  39.  
  40. mysql_query("SET NAMES 'utf8'");
  41.  
  42. return $this->linkID;
  43.  
  44. }
  45.  
  46. //закрытие соединения с СУБД
  47. public function Close() {
  48.  
  49. if (!empty($this->linkID)) {
  50. mysql_close($this->linkID) or die('Ошибка при закрытии соединения с СУБД');
  51. return true;
  52. } else {
  53. return false;
  54. }
  55.  
  56. }
  57.  
  58. //Задает шаблон для SQL-запроса
  59. public function Prepare($s) {
  60.  
  61. $this->params = array();
  62. $this->query = $s;
  63.  
  64. }
  65.  
  66. //Заменяет следующий знак $paramSymbol в шаблоне запроса на прослешенную строку данных
  67. public function Bind($s) {
  68.  
  69. $this->params[] = $s;
  70.  
  71. }
  72.  
  73. // Функция экранирования переменных
  74. public function QuoteSmart($value) {
  75.  
  76. // если magic_quotes_gpc включена - используем stripslashes
  77. if (get_magic_quotes_gpc()) {
  78. $value = stripslashes($value);
  79. }
  80.  
  81. // Если переменная - число, то экранировать её не нужно
  82. // если нет - то окружем её кавычками, и экранируем
  83. if (!is_numeric($value)) {
  84. $value = mysql_real_escape_string($value);
  85. }
  86.  
  87. return $value;
  88.  
  89. }
  90.  
  91. //Возвращает SQL-запрос с учетом Bind
  92. public function GetSQL() {
  93.  
  94. $aq = explode($this->paramSymbol, $this->query);
  95. if(count($aq) != (count($this->params)+1)) {
  96. die("Не совпадает шаблон Prepare() и количество вызовов Bind()");
  97. }
  98.  
  99. $q = '';
  100. for($i = 0; $i < count($aq)-1; $i++) {
  101. $q .= $aq[$i] . $this->QuoteSmart($this->params[$i]);
  102. }
  103. $q .= $aq[$i];
  104.  
  105. $this->trueQuery = $q;
  106.  
  107. return $q;
  108.  
  109. }
  110.  
  111. //Выполняет SQL-запрос
  112. public function Query($s) {
  113.  
  114. $r = mysql_query($s) or die("Ошибка запроса");
  115.  
  116. if (!$r){
  117. return null;
  118. }
  119.  
  120. $this->result = $r;
  121.  
  122. if (preg_match("/^SELECT/", $s)) {
  123. $this->numRows = mysql_num_rows($this->result);
  124. } else {
  125. $this->numRows = 0;
  126. }
  127.  
  128. $this->affectedRows = mysql_affected_rows($this->linkID);
  129.  
  130. return $this->result;
  131.  
  132. }
  133.  
  134. //Получает запись из выборки
  135. public function FetchArray() {
  136.  
  137. if(!$this->result) return false;
  138.  
  139. $this->rowData = mysql_fetch_array($this->result);
  140.  
  141. return $this->rowData;
  142.  
  143. }
  144.  
  145. //Освобождает результат запроса
  146. public function Free() {
  147.  
  148. mysql_free_result($this->result);
  149.  
  150. }
  151.  
  152. }
  153.  
  154. ?>
Add Comment
Please, Sign In to add comment