Mysqli


Для работы с СУБД MySQL в фреймворке есть два варианта. Сервисы PDO и Mysqli.

Для того чтобы работать с последним, нужно в любом конфигурационном файле организовать секцию с настройками:
1
2
3
4
5
6
7
8
9

                
'mysqli'   => ['host'   => 'localhost'// Хост СУБД 
                               
'user'   => 'root'// Пользователь MySql 
                               
'pass'   => ''// Пароль 
                               
'base'   => 'abc_example'// База данных 
                               
'prefix' => 'abc_'// Префикс таблиц 
                               
'debug'  =>  true// Режим дебаггинга 
                
],    




Пользоваться лучше расшаренным сервисом, чтобы избежать повторных коннектов к СУБД.
1
2
3

    $mysqli 
Abc::sharedService(ABC::MYSQLI); 




Сервис предоставляет все нативные возможности драйвера mysqli, его объектный интерфейс. Основное отличие в дебаггинге. Если настройку 'debug' установить в состояние true, то при ошибке в запросе встроенный SQL дебаггер выдаст примерно такой отчет:
Component Mysqli: SQL error:
Query in: ...\abc-framework\App\Models\MainModel.php on line: 17
Table 'abc_example.table' doesn't exist
(Таблица 'abc_example.table' не существует)
1
2
                    
SELECT * FROM `table`
PHP:
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
namespace ABC\App\Models;

use 
ABC\Abc;

/** 
 * Класс MainModel
 * 
 */   
class MainModel
{
    public function 
getContent()
    {
        
$mysqli Abc::sharedService('Mysqli');
        
        
$mysqli->query("SELECT * FROM `table`");
        
    }
}
 


Кроме того, в сервисе есть метод для отладки запросов.

test() public method

Тестирует запрос.

Выводит на экран текст запросов (как простых, так и подготавливаемых). Дополнительно для запросов выборки - время исполнения и Explain

public Mysqli::test ( )
return object Объект сервиса


Если вызвать его перед запросом, то будет выведен текст запроса и место локации:
Component Mysqli:
Query in: ...\abc-framework\App\Models\MainModel.php on line: 28
1
2
3
                    
INSERT INTO `table`
SET `text` = 'McDonald\'s'
PHP:
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
    {
        $mysqli Abc::sharedService('Mysqli');
        
       
        
        
$mysqli->test(); // Тестируем запрос
        
$stmt $mysqli->prepare("INSERT INTO `table` 
                                   SET `text` = ? "
                        
);
                        
        
$stmt->bind_param('s'$text);
        
        
$text "McDonald's";

        
$stmt->execute();
    }
}
 
А для запросов выборки (SELECT) еще время исполнения и explain.
Component Mysqli:
Query in: ...\abc-framework\App\Models\MainModel.php on line: 18
1
2
                    
SELECT * FROM `table`
Query time: 0.0010 s
Explain:
id select_type table partitions type possible_keys key key_len ref rows Extra
1 SIMPLE table ALL 2
PHP:
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

use ABC\Abc;

/** 
 * Класс MainModel
 * 
 */   
class MainModel
{
    public function 
getContent()
    {
        
$mysqli Abc::sharedService('Mysqli');
        
        
$mysqli->test(); // Тестируем запрос
        
$mysqli->query("SELECT * FROM `table`");
        
    }
}
 


Если в процессе исполнения скрипта потребуется новое соединение с СУБД, можно использовать метод

newConnect() public method

Предоставляет связь с сервером MySql.

Организует коннект к СУБД с новыми настройками.

public Mysqli::newConnect ( $config array )
$config array Массив настроек сервиса.
[
    'host' => Хост СУБД
    'user' => Пользователь MySql
    'pass' => Пароль
    'base' => База данных
    'prefix' => Префикс таблиц
    'debug' => Режим дебаггинга
]
return void


И последнее. Если установлена настройка 'prefix', то будет доступно публичное свойство

$prefix public property

Префикс таблиц MySQL.

public Mysqli::$prefix null


Использовать можно так:
1
2
3

        $mysqli
->query("SELECT * FROM `"$mysqli->prefix ."table`");




Все остальные свойства и методы аналогичны драйверу mysqli.