open e close terão uma transação à disposição, portanto, será possível trabalhar com as informações do BD.
Para abrir a transação, é necessário informar o nome do arquivo de configuração que contém as informações de conexão do BD. No exemplo acima, foi informado ao Adianti Framework que se deseja abrir uma conexão com o banco erp. Por sua vez, o Adianti Framework irá no diretório app/config/ e procurará o arquivo erp.ini. É nesse arquivo que estão as informações necessárias para abrir uma transação.
1.1. Exemplos de conectores
A seguir um exemplo de um conector para SQLite:char = ISO.
A seguir um exemplo de um conector para SQLServer:
type=dblib ou type=sqlsrv para indicar o driver específico. “ntyp” é válido apenas para o driver “sqlsrv”, habilita retorno de campos numéricos como tipos numéricos do PHP. A opção “opts” é necessária a partir do PHP8 em uso com o driver fornecido pela MS.
A seguir um exemplo de um conector para Oracle:
1.2. Aconteceu um problema, como abortar a transação?
Ao trabalhar com transação, não existem regras de trabalho, a lógica pode mudar conforme a demanda. Vão existir situações em que é tudo ou nada e outras em que cada operação deve ser controlada individualmente. O que essas situações têm em comum é que quando um problema ocorre aquelas instruções não devem ser executadas pela metade. Para evitar que uma transação seja finalizada (commit), temos a função rollback().
rollback(). Quando trabalhado com o BD, é uma boa prática colocar os comandos dentro de um try, pois a funções do Adianti Framework que trabalham com informações do BD lançam exceções e estas podem ser capturadas e tratadas.
1.3. Empilhar transações
É possível abrir mais de uma transação com o Adianti Framework, ele consegue empilhar as transações que forem abertas.erp após fechar o banco estoque.
1.4. Como posso executar um comando SQL manual?
Após abrir uma conexão com o BD, além de manipular as informações com as classes do framework, podemos executar comandos manuais usando SQL. Para isso, precisaremos obter a transação aberta, veja o exemplo abaixo:$funcionario dentro da query para evitar que sejam exploradas vulnerabilidades no sistema (SQL injection). Ao invés disso, usamos a função prepare(). Essa função interpreta os parâmetros recebidos como informações que fazem parte de uma query e, portanto, não podem fazer parte de uma nova instrução.
Para mais informações sobre Prepared Statements, acesse o link: php.net/prepared-statements
Embora não recomendado, podemos usar os valores diretamente dentro da query a ser executada.
1.5. Como abrir conexão manual com um banco de dados
Nos exemplos anteriores vimos como abrir conexões com o BD sempre utilizando o arquivo de configuração, sempre passando como parâmetro o nome, um exemplo seria:1.6. Registros de log da transação
O Adianti Framework oferece duas maneiras de registrar logs de transação que podem facilitar o desenvolvimento.setLoggerFunction()setLogger()
setLoggerFunction(), o desenvolvedor pode definir uma função que será executada sempre que um comando SQL for executado pela transação em questão. Essa função aceita código PHP, portanto, fica livre para o desenvolvedor criar seu próprio método de depuração.
Abaixo um exemplo em que todos os comandos são exibidos em tela:
log() é chamada dentro da transação automaticamente.
setLogger
De uma maneira semelhante, podemos escrever as informações em arquivos. Para isso, usamos a função setLogger(AdiantiLoggerInterface $class), que por sua vez, recebe como parâmetro um tipo específico de classe que irá escrever o arquivo de log. O Adianti Framework oferece 4 classes que escrevem em diferentes formatos:
- TLoggerHTML → HTML;
- TLoggerSTD → Standard Output;
- TLoggerTXT → Texto;
- TLoggerXML → XML.
TLoggerTXT, que é a mais usada para registrar logs em arquivo.
tmp/log.txt: