Рефакторинг, очистка, работа над ошибками, связанными с базой, отказ от глобальной переменной $user во многих файлах.
Singleton в некоторых местах вместо решения #42. Новые шаги для решения #16 и #52. Closes #42. Closes #32. Closes #31.
This commit is contained in:
+15
-12
@@ -12,7 +12,7 @@
|
||||
* маркеры - т.н. "заполнители", а сами данные передаются "позже", в качестве последующих аргументов основного метода,
|
||||
* выполняющего SQL-запрос - Mysql::query($sql [, $arg, $...]):
|
||||
*
|
||||
* $db->query('SELECT * FROM `table` WHERE `name` = "?s" AND `age` = ?i', $_POST['name'], $_POST['age']);
|
||||
* $getInstance->query('SELECT * FROM `table` WHERE `name` = "?s" AND `age` = ?i', $_POST['name'], $_POST['age']);
|
||||
*
|
||||
* Аргументы SQL-запроса, прошедшие через систему placeholders данного класса, экранируются специальными функциями
|
||||
* экранирования, в зависимости от типа заполнителей. Т.е. вам теперь нет необходимости заключать переменные в функции
|
||||
@@ -45,8 +45,8 @@
|
||||
* Например, попытка передать в качестве аргумента значение 55.5 или '55.5' для заполнителя целочисленного типа ?i
|
||||
* приведет к выбросу исключения:
|
||||
*
|
||||
* $db->setTypeMode(Mysql::MODE_STRICT); // устанавливаем строгий режим работы
|
||||
* $db->query('SELECT ?i', 55.5); // Попытка указать для заполнителя типа int значение типа double в шаблоне запроса SELECT ?i
|
||||
* $getInstance->setTypeMode(Mysql::MODE_STRICT); // устанавливаем строгий режим работы
|
||||
* $getInstance->query('SELECT ?i', 55.5); // Попытка указать для заполнителя типа int значение типа double в шаблоне запроса SELECT ?i
|
||||
*
|
||||
* Это утверждение не относится к числам (целым и с плавающей точкой), заключенным в строки.
|
||||
* С точки зрения библиотеки, строка '123' и значение 123 являются типом int.
|
||||
@@ -140,7 +140,7 @@
|
||||
* заполнителей скалярного типа, таких как ?i, ?d и ?s. Это сделано по идеологическим соображениям,
|
||||
* автоподстановка кавычек может стать ограничением для возможностей SQL.
|
||||
* Например, выражение
|
||||
* $db->query('SELECT "Total: ?s"', '200');
|
||||
* $getInstance->query('SELECT "Total: ?s"', '200');
|
||||
* вернёт строку
|
||||
* 'Total: 200'
|
||||
* Если бы кавычки, ограничивающие строковой литерал, ставились бы автоматически,
|
||||
@@ -151,20 +151,23 @@
|
||||
* Тем не менее, для перечислений ?as, ?ai, ?ap, ?As, ?Ai и ?Ap ограничивающие кавычки ставятся принудительно, т.к.
|
||||
* перечисления всегда используются в запросах, где наличие кавчек обязательно или не играет роли (а так ли это?):
|
||||
*
|
||||
* $db->query('INSERT INTO `test` SET ?As', array('name' => 'Маша', 'age' => '23', 'adress' => 'Москва'));
|
||||
* $getInstance->query('INSERT INTO `test` SET ?As', array('name' => 'Маша', 'age' => '23', 'adress' => 'Москва'));
|
||||
* -> INSERT INTO test SET `name` = "Маша", `age` = "23", `adress` = "Москва"
|
||||
*
|
||||
* $db->query('SELECT * FROM table WHERE field IN (?as)', array('55', '12', '132'));
|
||||
* $getInstance->query('SELECT * FROM table WHERE field IN (?as)', array('55', '12', '132'));
|
||||
* -> SELECT * FROM table WHERE field IN ("55", "12", "132")
|
||||
*
|
||||
* Также исключения составляют заполнители типа ?f, предназначенные для передачи в запрос имен таблиц и полей.
|
||||
* Аргумент заполнителя ?f всегда обрамляется обратными кавычками (`):
|
||||
*
|
||||
* $db->query('SELECT ?f FROM ?f', 'my_field', 'my_table');
|
||||
* $getInstance->query('SELECT ?f FROM ?f', 'my_field', 'my_table');
|
||||
* -> SELECT `my_field` FROM `my_table`
|
||||
*/
|
||||
namespace Krugozor\Database\Mysql;
|
||||
|
||||
use mysqli;
|
||||
use mysqli_result;
|
||||
|
||||
class Mysql
|
||||
{
|
||||
/**
|
||||
@@ -172,7 +175,7 @@ class Mysql
|
||||
* Если тип заполнителя не совпадает с типом аргумента, то будет выброшено исключение.
|
||||
* Пример такой ситуации:
|
||||
*
|
||||
* $db->query('SELECT * FROM `table` WHERE `id` = ?i', '2+мусор');
|
||||
* $getInstance->query('SELECT * FROM `table` WHERE `id` = ?i', '2+мусор');
|
||||
*
|
||||
* - в данной ситуации тип заполнителя ?i - число или числовая строка,
|
||||
* а в качестве аргумента передаётся строка '2+мусор' не являющаяся ни числом, ни числовой строкой.
|
||||
@@ -187,7 +190,7 @@ class Mysql
|
||||
* к нужному типу - к типу заполнителя.
|
||||
* Пример такой ситуации:
|
||||
*
|
||||
* $db->query('SELECT * FROM `table` WHERE `id` = ?i', '2+мусор');
|
||||
* $getInstance->query('SELECT * FROM `table` WHERE `id` = ?i', '2+мусор');
|
||||
*
|
||||
* - в данной ситуации тип заполнителя ?i - число или числовая строка,
|
||||
* а в качестве аргумента передаётся строка '2+мусор' не являющаяся ни числом, ни числовой строкой.
|
||||
@@ -397,7 +400,7 @@ class Mysql
|
||||
throw new Exception(__METHOD__ . ': ' . $this->mysqli->error . '; SQL: ' . $this->query);
|
||||
}
|
||||
|
||||
if (is_object($result) && $result instanceof \mysqli_result) {
|
||||
if (is_object($result) && $result instanceof mysqli_result) {
|
||||
return new Statement($result);
|
||||
}
|
||||
|
||||
@@ -425,7 +428,7 @@ class Mysql
|
||||
* Применяется для случаев, когда SQL-запрос формируется частями.
|
||||
*
|
||||
* Пример:
|
||||
* $db->prepare('WHERE `name` = "?s" OR `id` IN(?ai)', 'Василий', array(1, 2));
|
||||
* $getInstance->prepare('WHERE `name` = "?s" OR `id` IN(?ai)', 'Василий', array(1, 2));
|
||||
* Результат:
|
||||
* WHERE `name` = "Василий" OR `id` IN(1, 2)
|
||||
*
|
||||
@@ -548,7 +551,7 @@ class Mysql
|
||||
private function connect()
|
||||
{
|
||||
if (!is_object($this->mysqli) || !$this->mysqli instanceof mysqli) {
|
||||
$this->mysqli = @new \mysqli($this->server, $this->user, $this->password, null, $this->port, $this->socket);
|
||||
$this->mysqli = @new mysqli($this->server, $this->user, $this->password, null, $this->port, $this->socket);
|
||||
|
||||
if ($this->mysqli->connect_error) {
|
||||
throw new Exception(__METHOD__ . ': ' . $this->mysqli->connect_error);
|
||||
|
||||
Reference in New Issue
Block a user