Conn2Flow
Navegação das docs

Referência / Bibliotecas

Biblioteca banco.php

A camada de banco de dados do Gestor (MySQLi): conexão, consultas, SELECT estruturado, INSERT/UPDATE acumulados, identificadores únicos e o modo distribuído.

Caminho no Gestor bibliotecas/banco.php

banco.php é a camada de acesso a dados de todo o Gestor. Ela sempre vem carregada ($_GESTOR['bibliotecas']) e fala com MySQL/MariaDB por MySQLi, montando SQL por concatenação de strings. Não há prepared statements: a segurança depende de você escapar cada valor com banco_escape_field().

Configuração e conexão

A conexão usa $_BANCO, preenchido em gestor/config.php a partir do .env:

Chave Variável do .env Padrão
tipo DB_CONNECTION mysqli (o único tipo implementado)
host DB_HOST localhost
nome DB_DATABASE —
usuario / senha DB_USERNAME / DB_PASSWORD —
  • A conexão é preguiçosa. banco_query() e banco_escape_field() chamam banco_conectar() na primeira vez; não é preciso conectar à mão.

  • banco_conectar() liga MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT, abre a conexão e define o charset utf8. Se a conexão falhar, encerra a requisição com die(), imprimindo o erro e a pilha gerada por banco_erro_debug() (HTML com arquivo:linha => função de cada quadro).

  • banco_fechar_conexao() fecha e remove $_BANCO['conexao'].

  • banco_ping() testa a conexão com mysqli_ping() e, se ela caiu, só incrementa $_BANCO['RECONECT']: não reconecta.

Executar SQL

  • banco_query($query) executa qualquer SQL. Com $_BANCO['distribuido'] ativo, não usa o banco local: repassa a instrução a banco_distribuido_query() (módulos distribuídos, req-005), que devolve um BancoResultadoRemoto para SELECT ou true/false para escrita. Localmente, uma mysqli_sql_exception é capturada, registrada com error_log() (junto com o SQL) e vira false. Nenhum erro chega à tela.

  • banco_sql($sql) executa e devolve todas as linhas com índices numéricos e nomes (mysqli_fetch_array), ou null sem resultados.

  • banco_sql_names($sql, $campos) executa e devolve linhas associativas usando os nomes de $campos (lista separada por vírgulas, ou *).

  • banco_linhas_afetadas() devolve quantas linhas a última escrita alterou (ou null no modo distribuído). Serve para "só a primeira requisição reivindica a ação": UPDATE … WHERE <ainda não feito> afeta 1 linha para quem chegou primeiro e 0 para as outras.

  • banco_last_id() devolve o AUTO_INCREMENT do último INSERT (no modo distribuído, o id informado pela instalação remota).

Lendo um resultado cru

Os wrappers aceitam um mysqli_result ou um BancoResultadoRemoto:

  • banco_num_rows($result) devolve 0 para false. Evita o TypeError do PHP 8.1+ quando a consulta falhou;

  • banco_num_fields($result), banco_field_name($result, $i) e banco_fields_names($tabela): o último faz SELECT * … LIMIT 1 e devolve os nomes das colunas, ou null se não houver colunas;

  • banco_row($result) devolve uma linha indexada;

  • banco_row_array($result) devolve uma linha indexada e associativa;

  • banco_fetch_assoc($result) devolve uma linha associativa.

SELECT estruturado: banco_select()

É a forma recomendada de consultar:

$paginas = banco_select(Array(
    'tabela' => 'paginas',
    'campos' => Array('id', 'nome', 'caminho'),
    'extra'  => "WHERE status='A' AND language='".banco_escape_field($lang)."' ORDER BY nome",
));
// [ ['id' => 'x', 'nome' => 'X', 'caminho' => 'x/'], ... ]  ou  null
  • campos é um array (unido por vírgula) ou uma string, ou *.

  • extra recebe tudo o que vem depois do FROM (JOIN, WHERE, ORDER BY, LIMIT). A tabela pode ter apelido: 'tabela' => 'paginas AS p'.

  • unico devolve só a primeira linha como array simples, em vez de uma lista.

  • Sem resultado, o retorno é null, e não array vazio.

Variantes com assinatura posicional, usadas pelo código legado:

  • banco_select_name($campos, $tabela, $extra) devolve linhas associativas (valores não numéricos convertidos para string);

  • banco_select_editar($campos, $tabela, $extra) devolve só a primeira linha e grava $_GESTOR['banco-resultado'] (true/false).

Guardar o "antes" de uma edição

O padrão de histórico dos CRUDs:

  1. banco_select_campos_antes_iniciar($campos, $tabela, $extra) lê o registro e guarda a primeira linha em $_GESTOR['banco-antes'] (devolve true/false).

  2. banco_select_campos_antes($campo) devolve o valor antigo de um campo (ou null) para comparar com o $_REQUEST e montar o histórico com interface_historico_incluir().

Escrever

INSERT

O jeito mais usado é acumular campos e inserir de uma vez:

banco_insert_name_campo('id', $id);                 // escapa e põe aspas
banco_insert_name_campo('versao', '1', true);       // sem aspas (número, NOW(), NULL)
banco_insert_name_campo('html', $html, false, false); // sem escapar (já escapado)
banco_insert_name(banco_insert_name_campos(), 'paginas');
  • banco_insert_name_campo($nome, $valor, $sem_aspas_simples = false, $escape_field = true) acumula em $_BANCO['insert-name-campos'], escapando o valor por padrão.

  • banco_insert_name_campos() devolve os campos acumulados e limpa a lista.

  • banco_insert_name($dados, $tabela) recebe [[nome, valor, sem_aspas], …] e monta INSERT INTO t (…) VALUES (…). Não escapa: ou os valores vieram de banco_insert_name_campo(), ou você escapa antes (como fazem os módulos com banco_escape_field($_REQUEST[...])). Itens sem nome ou sem valor são ignorados.

  • banco_insert_name_varios(['tabela' => …, 'campos' => [['nome' => …, 'valores' => [...], 'sem_aspas_simples' => true], …]]) faz um INSERT de várias linhas, organizado por coluna. null vira NULL. Não escapa.

Funções legadas sem chamadores no core, que dependem da ordem física das colunas e não escapam nada:

  • banco_insert($campos, $tabela): VALUES('0', …);

  • banco_insert_tudo($campos, $tabela) e banco_insert_id($campos, $tabela): VALUES(…);

  • banco_insert_varios($campos, $tabela) e banco_insert_varios_tudo($campos, $tabela): várias linhas. As duas concatenam numa variável não inicializada (warning no PHP 8).

UPDATE

  • banco_update($campos, $tabela, $extra) executa UPDATE t SET <campos> <extra>. $campos é a string pronta ("nome='x', versao=versao+1").

  • banco_update_campo($nome, $valor, $sem_aspas_simples = false, $escape_field = true) acumula em $_BANCO['update-campos'], e banco_update_executar($tabela, $extra = '') executa e limpa o acumulado. Sem campos acumulados, não faz nada.

  • banco_update_varios($campos, $tabela, $campo_nome, $id_nome) atualiza muitos registros com CASE id WHEN … THEN …, quebrando em várias consultas acima de ~1 MB. Os valores não são escapados, e a função concatena em $sql_fechar sem inicializá-la. Sem chamadores no core.

Inserir ou atualizar

banco_insert_update(['tabela' => ['nome' => …, 'id' => …, 'extra' => …], 'dados' => [...], 'dadosTipo' => [...]]) procura o registro por dados[<id>]: se existe faz UPDATE, senão faz INSERT. Com dadosTipo, bool grava 1/NULL e int grava o número sem aspas (vazio vira NULL); o resto é escapado e vai com aspas. Não filtra por idioma, nem ao procurar nem ao atualizar.

DELETE

  • banco_delete($tabela, $extra) executa DELETE FROM t <extra>. Sem WHERE no $extra, apaga a tabela inteira.

  • banco_delete_varios($tabela, $campo_ids, $array_ids) monta DELETE … WHERE campo IN (…).

Identificadores (slugs) únicos

Os CRUDs geram o id textual do registro a partir do nome:

$id = banco_identificador(Array(
    'id' => $_REQUEST['nome'],
    'tabela' => Array(
        'nome' => 'paginas', 'campo' => 'id', 'id_nome' => 'id_paginas',
        'where' => "language='".$_GESTOR['linguagem-codigo']."'",
    ),
));
  1. banco_identificador() normaliza o texto com banco_retirar_acentos(), corta em ~90 caracteres (por palavra) e, se o texto já termina em -<número>, parte desse número.

  2. banco_identificador_unico() procura id, id-1, id-2… até achar um livre, ignorando registros com status='D'. Opções de tabela:

    • id_valor exclui o próprio registro, na edição;

    • status define outra coluna de status;

    • sem_status desliga o filtro de status;

    • where adiciona uma condição. Com sem_traco, remove os hífens do resultado.

banco_retirar_acentos($var, $retirar_espaco = true) troca acentos por ASCII, remove pontuação, troca parênteses e colchetes por hífen e espaços por hífen (opcional), e colapsa hífens.

Utilitários

  • banco_escape_field($field) escapa com mysqli_real_escape_string(), conectando se preciso. Sem conexão MySQLi ativa, lança LogicException em vez de devolver o valor sem escape.

  • banco_campos_virgulas($campos) une um array com vírgulas ('' para vazio).

  • banco_total_rows($tabela, $extra = null) executa SELECT count(*) e devolve o total. Sem chamadores no core.

  • banco_campos_nomes($tabela) executa SHOW COLUMNS e devolve os metadados (Field, Type, Null, Key, Default, Extra) de cada coluna.

  • banco_campo_existe($campo, $tabela) diz se a coluna existe. Os módulos usam para funcionar antes e depois de uma migration (por exemplo, css_source_hash).

  • banco_tabelas_lista() executa SHOW TABLES e devolve os nomes.

  • banco_smartstripslashes($str) só converte para string. É mantida por compatibilidade; não use em código novo.

Veja também

  • Bibliotecas do Gestor

  • Skills c2f-database-operations, c2f-database-testing e c2f-mysql-utf8-emoji-encoding.

Funções (referência gerada)

Gerado a partir de gestor/bibliotecas/banco.php · 47 funções

47 de 47

banco_escape_field

ver no código · linha 30 ↗
banco_escape_field(string $field): string

Escapa um valor para uso seguro em queries SQL.

Parâmetros

$fieldstring
O valor a ser escapado.

Retorno

string
O valor escapado e seguro para uso em queries SQL.

banco_query

ver no código · linha 165 ↗
banco_query(string $query): mysqli_result|bool

Executa uma query SQL no banco de dados.

Parâmetros

$querystring
A query SQL a ser executada.

Retorno

mysqli_result|bool
O resultado da query ou false em caso de erro.

banco_num_rows

ver no código · linha 241 ↗
banco_num_rows(mixed $result): int

Retorna o número de linhas de um resultado de query.

Parâmetros

$resultmixed
Resultado mysqli, remoto ou valor inválido retornado pela query.

Retorno

int
O número de linhas no resultado.

banco_num_fields

ver no código · linha 268 ↗
banco_num_fields(mysqli_result $result): int

Retorna o número de campos/colunas em um resultado de query.

Parâmetros

$resultmysqli_result
O resultado da query.

Retorno

int
O número de campos no resultado.

banco_field_name

ver no código · linha 289 ↗
banco_field_name(mysqli_result $result, int $num_field): string

Retorna o nome de um campo específico do resultado.

Parâmetros

$resultmysqli_result
O resultado da query.
$num_fieldint
O índice do campo (começando em 0).

Retorno

string
O nome do campo.

banco_fields_names

ver no código · linha 312 ↗
banco_fields_names(string $table): array|null

Retorna um array com os nomes de todos os campos de uma tabela.

Parâmetros

$tablestring
Nome da tabela.

Retorno

array|null
Array com os nomes dos campos ou NULL se a tabela estiver vazia.

banco_row

ver no código · linha 343 ↗
banco_row(mysqli_result $result): array|null

Retorna uma linha do resultado como array indexado.

Parâmetros

$resultmysqli_result
O resultado da query.

Retorno

array|null
Array com os valores da linha ou NULL se não houver mais linhas.

banco_row_array

ver no código · linha 363 ↗
banco_row_array(mysqli_result $result): array|null

Retorna uma linha do resultado como array associativo e indexado.

Parâmetros

$resultmysqli_result
O resultado da query.

Retorno

array|null
Array com os valores da linha ou NULL se não houver mais linhas.

banco_fetch_assoc

ver no código · linha 383 ↗
banco_fetch_assoc(mysqli_result $result): array|null

Retorna a próxima linha como array associativo.

Parâmetros

$resultmysqli_result
O resultado da query.

Retorno

array|null
Array associativo com os valores da linha ou NULL.

banco_sql

ver no código · linha 404 ↗
banco_sql(string $sql): array|null

Executa uma query SQL e retorna todos os resultados.

Parâmetros

$sqlstring
A query SQL a ser executada.

Retorno

array|null
Array com todas as linhas do resultado ou NULL se não houver resultados.

banco_sql_names

ver no código · linha 432 ↗
banco_sql_names(string $sql, string $campos): array|null

Executa uma query SQL e retorna resultados com nomes de campos.

Parâmetros

$sqlstring
A query SQL a ser executada.
$camposstring
Lista de campos separados por vírgula ou '*' para todos.

Retorno

array|null
Array de arrays associativos ou NULL se não houver resultados.

banco_select

ver no código · linha 484 ↗
banco_select(array|false $params = false): array|null

Seleciona dados do banco de dados de forma estruturada.

Parâmetros

$paramsarray|false
Parâmetros da função.

Retorno

array|null
Array com os resultados ou NULL se não houver dados.

banco_select_name

ver no código · linha 555 ↗
banco_select_name(string $campos, string $tabela, string $extra): array|null

Seleciona dados do banco retornando arrays associativos.

Parâmetros

$camposstring
Lista de campos separados por vírgula ou '*'.
$tabelastring
Nome da tabela.
$extrastring
Condições extras da query (WHERE, ORDER BY, etc.).

Retorno

array|null
Array com os resultados ou NULL se não houver dados.

banco_select_editar

ver no código · linha 612 ↗
banco_select_editar(string $campos, string $tabela, string $extra): array|null

Seleciona um único registro para edição.

Parâmetros

$camposstring
Lista de campos separados por vírgula ou '*'.
$tabelastring
Nome da tabela.
$extrastring
Condições extras da query (WHERE, ORDER BY, etc.).

Retorno

array|null
Array associativo com o registro ou NULL se não houver dados.

banco_select_campos_antes_iniciar

ver no código · linha 677 ↗
banco_select_campos_antes_iniciar(string $campos, string $tabela, string $extra): bool

Seleciona e armazena campos anteriores para comparação.

Parâmetros

$camposstring
Lista de campos separados por vírgula ou '*'.
$tabelastring
Nome da tabela.
$extrastring
Condições extras da query (WHERE, etc.).

Retorno

bool
True se encontrou e armazenou dados, false caso contrário.

banco_update

ver no código · linha 763 ↗
banco_update(string $campos, string $tabela, string $extra): void

Executa query UPDATE no banco de dados.

Parâmetros

$camposstring
Lista de campos e valores no formato "campo='valor'".
$tabelastring
Nome da tabela.
$extrastring
Condições extras (WHERE, etc.).

Retorno

void

banco_update_campo

ver no código · linha 789 ↗
banco_update_campo(string $nome, string $valor, bool $sem_aspas_simples = false, bool $escape_field = true): void

Adiciona campo para atualização em lote.

Parâmetros

$nomestring
Nome do campo.
$valorstring
Valor a ser atribuído.
$sem_aspas_simplesbool
Se true, não envolve valor em aspas (padrão: false).
$escape_fieldbool
Se true, escapa o valor (padrão: true).

Retorno

void

banco_update_executar

ver no código · linha 819 ↗
banco_update_executar(string $tabela, string $extra = ''): void

Executa update em lote com campos acumulados.

Parâmetros

$tabelastring
Nome da tabela.
$extrastring
Condições extras como WHERE (padrão: '').

Retorno

void

banco_update_varios

ver no código · linha 858 ↗
banco_update_varios(array $campos, string $tabela, string $campo_nome, string $id_nome): void

Atualiza múltiplos registros em massa usando CASE.

Parâmetros

$camposarray
Array de arrays [id, valor] para atualizar.
$tabelastring
Nome da tabela.
$campo_nomestring
Nome do campo a ser atualizado.
$id_nomestring
Nome do campo ID usado na cláusula CASE.

Retorno

void

banco_insert

ver no código · linha 895 ↗
banco_insert(string $campos, string $tabela): void

Insere registro com ID auto-incrementado.

Parâmetros

$camposstring
Valores separados por vírgula.
$tabelastring
Nome da tabela.

Retorno

void

banco_insert_name

ver no código · linha 911 ↗
banco_insert_name(array $dados, string $tabela): void

Insere registro com nomes de campos especificados.

Parâmetros

$dadosarray
Array de arrays [nome, valor, sem_aspas_simples].
$tabelastring
Nome da tabela.

Retorno

void

banco_insert_name_campo

ver no código · linha 953 ↗
banco_insert_name_campo(string $nome, string $valor, bool $sem_aspas_simples = false, bool $escape_field = true): void

Adiciona campo para inserção em lote.

Parâmetros

$nomestring
Nome do campo.
$valorstring
Valor do campo.
$sem_aspas_simplesbool
Se true, não envolve em aspas (padrão: false).
$escape_fieldbool
Se true, escapa o valor (padrão: true).

Retorno

void

banco_insert_varios

ver no código · linha 1077 ↗
banco_insert_varios(array $campos, string $tabela): void

Insere vários registros com ID auto-increment.

Parâmetros

$camposarray
Array de strings com valores para cada registro.
$tabelastring
Nome da tabela.

Retorno

void

banco_insert_varios_tudo

ver no código · linha 1104 ↗
banco_insert_varios_tudo(array $campos, string $tabela): void

Insere vários registros com todos os valores especificados.

Parâmetros

$camposarray
Array de strings com valores para cada registro.
$tabelastring
Nome da tabela.

Retorno

void

banco_insert_tudo

ver no código · linha 1146 ↗
banco_insert_tudo(string $campos, string $tabela): void

Insere registro com todos os valores especificados.

Parâmetros

$camposstring
Valores separados por vírgula.
$tabelastring
Nome da tabela.

Retorno

void

banco_delete

ver no código · linha 1179 ↗
banco_delete(string $tabela, string $extra): void

Executa DELETE no banco de dados.

Parâmetros

$tabelastring
Nome da tabela.
$extrastring
Condições WHERE e outras cláusulas.

Retorno

void

banco_delete_varios

ver no código · linha 1196 ↗
banco_delete_varios(string $tabela, array|string $campo_ids, array $array_ids): void

Deleta múltiplos registros usando IN.

Parâmetros

$tabelastring
Nome da tabela.
$campo_idsarray|string
Nome(s) do(s) campo(s) ID.
$array_idsarray
Array de IDs para deletar.

Retorno

void

banco_total_rows

ver no código · linha 1263 ↗
banco_total_rows(string $tabela, string|null $extra = null): int

Retorna total de linhas em uma tabela.

Parâmetros

$tabelastring
Nome da tabela.
$extrastring|null
Condições WHERE opcionais (padrão: null).

Retorno

int
Número total de registros.

banco_campo_existe

ver no código · linha 1318 ↗
banco_campo_existe(string $campo, string $tabela): bool

Verifica se um campo específico existe em uma tabela.

Parâmetros

$campostring
Nome do campo a ser verificado.
$tabelastring
Nome da tabela onde verificar o campo.

Retorno

bool
True se o campo existir na tabela, false caso contrário.

banco_retirar_acentos

ver no código · linha 1346 ↗
banco_retirar_acentos(string $var, bool $retirar_espaco = true): string

Remove acentos e caracteres especiais de uma string.

Parâmetros

$varstring
String a ser processada.
$retirar_espacobool
Se true, substitui espaços por hífens (padrão: true).

Retorno

string
String normalizada.

O Futuro é Híbrido: Humano + IA.

O Conn2Flow é a ferramenta. Se você precisa do Arquiteto para desenhar a estratégia da sua empresa usando essa tecnologia...

Contrate Consultoria Especializada