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()ebanco_escape_field()chamambanco_conectar()na primeira vez; não é preciso conectar à mão. -
banco_conectar()ligaMYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT, abre a conexão e define o charsetutf8. Se a conexão falhar, encerra a requisição comdie(), imprimindo o erro e a pilha gerada porbanco_erro_debug()(HTML comarquivo:linha => funçãode cada quadro). -
banco_fechar_conexao()fecha e remove$_BANCO['conexao']. -
banco_ping()testa a conexão commysqli_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 abanco_distribuido_query()(módulos distribuídos, req-005), que devolve umBancoResultadoRemotopara SELECT outrue/falsepara escrita. Localmente, umamysqli_sql_exceptioné capturada, registrada comerror_log()(junto com o SQL) e virafalse. Nenhum erro chega à tela. -
banco_sql($sql)executa e devolve todas as linhas com índices numéricos e nomes (mysqli_fetch_array), ounullsem 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 (ounullno 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 oAUTO_INCREMENTdo ú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 parafalse. Evita oTypeErrordo PHP 8.1+ quando a consulta falhou; -
banco_num_fields($result),banco_field_name($result, $i)ebanco_fields_names($tabela): o último fazSELECT * … LIMIT 1e devolve os nomes das colunas, ounullse 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*. -
extrarecebe tudo o que vem depois doFROM(JOIN, WHERE, ORDER BY, LIMIT). A tabela pode ter apelido:'tabela' => 'paginas AS p'. -
unicodevolve 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:
-
banco_select_campos_antes_iniciar($campos, $tabela, $extra)lê o registro e guarda a primeira linha em$_GESTOR['banco-antes'](devolvetrue/false). -
banco_select_campos_antes($campo)devolve o valor antigo de um campo (ounull) para comparar com o$_REQUESTe montar o histórico cominterface_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 montaINSERT INTO t (…) VALUES (…). Não escapa: ou os valores vieram debanco_insert_name_campo(), ou você escapa antes (como fazem os módulos combanco_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.nullviraNULL. 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)ebanco_insert_id($campos, $tabela):VALUES(…); -
banco_insert_varios($campos, $tabela)ebanco_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)executaUPDATE 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'], ebanco_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 comCASE 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_fecharsem 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)executaDELETE FROM t <extra>. SemWHEREno$extra, apaga a tabela inteira. -
banco_delete_varios($tabela, $campo_ids, $array_ids)montaDELETE … 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']."'",
),
));-
banco_identificador()normaliza o texto combanco_retirar_acentos(), corta em ~90 caracteres (por palavra) e, se o texto já termina em-<número>, parte desse número. -
banco_identificador_unico()procuraid,id-1,id-2… até achar um livre, ignorando registros comstatus='D'. Opções detabela:-
id_valorexclui o próprio registro, na edição; -
statusdefine outra coluna de status; -
sem_statusdesliga o filtro de status; -
whereadiciona uma condição. Comsem_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 commysqli_real_escape_string(), conectando se preciso. Sem conexão MySQLi ativa, lançaLogicExceptionem 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)executaSELECT count(*)e devolve o total. Sem chamadores no core. -
banco_campos_nomes($tabela)executaSHOW COLUMNSe 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()executaSHOW TABLESe devolve os nomes. -
banco_smartstripslashes($str)só converte para string. É mantida por compatibilidade; não use em código novo.
Veja também
-
Skills
c2f-database-operations,c2f-database-testingec2f-mysql-utf8-emoji-encoding.
Funções (referência gerada)
Gerado a partir de gestor/bibliotecas/banco.php · 47 funções
banco_escape_field
ver no código · linha 30 ↗banco_escape_field(string $field): stringEscapa um valor para uso seguro em queries SQL.
Parâmetros
$fieldstring- O valor a ser escapado.
Retorno
banco_smartstripslashes
ver no código · linha 57 ↗banco_smartstripslashes(mixed $str): stringMantém compatibilidade com módulos que normalizam valores lidos do banco.
Parâmetros
$strmixed- O valor a ser normalizado.
Retorno
banco_erro_debug
ver no código · linha 69 ↗banco_erro_debug(): stringGera informações de debug do backtrace para erros de banco.
Retorno
banco_conectar
ver no código · linha 95 ↗banco_conectar(): voidEstabelece conexão com o banco de dados MySQL.
Retorno
banco_ping
ver no código · linha 121 ↗banco_ping(): voidVerifica se a conexão com o banco está ativa.
Retorno
banco_fechar_conexao
ver no código · linha 142 ↗banco_fechar_conexao(): voidFecha a conexão ativa com o banco de dados.
Retorno
banco_query
ver no código · linha 165 ↗banco_query(string $query): mysqli_result|boolExecuta uma query SQL no banco de dados.
Parâmetros
$querystring- A query SQL a ser executada.
Retorno
banco_linhas_afetadas
ver no código · linha 219 ↗banco_linhas_afetadas(): int|nullRetorna quantas linhas a última escrita (INSERT/UPDATE/DELETE) alterou.
Retorno
banco_num_rows
ver no código · linha 241 ↗banco_num_rows(mixed $result): intRetorna o número de linhas de um resultado de query.
Parâmetros
$resultmixed- Resultado mysqli, remoto ou valor inválido retornado pela query.
Retorno
banco_num_fields
ver no código · linha 268 ↗banco_num_fields(mysqli_result $result): intRetorna o número de campos/colunas em um resultado de query.
Parâmetros
$resultmysqli_result- O resultado da query.
Retorno
banco_field_name
ver no código · linha 289 ↗banco_field_name(mysqli_result $result, int $num_field): stringRetorna 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
banco_fields_names
ver no código · linha 312 ↗banco_fields_names(string $table): array|nullRetorna um array com os nomes de todos os campos de uma tabela.
Parâmetros
$tablestring- Nome da tabela.
Retorno
banco_row
ver no código · linha 343 ↗banco_row(mysqli_result $result): array|nullRetorna uma linha do resultado como array indexado.
Parâmetros
$resultmysqli_result- O resultado da query.
Retorno
banco_row_array
ver no código · linha 363 ↗banco_row_array(mysqli_result $result): array|nullRetorna uma linha do resultado como array associativo e indexado.
Parâmetros
$resultmysqli_result- O resultado da query.
Retorno
banco_fetch_assoc
ver no código · linha 383 ↗banco_fetch_assoc(mysqli_result $result): array|nullRetorna a próxima linha como array associativo.
Parâmetros
$resultmysqli_result- O resultado da query.
Retorno
banco_sql
ver no código · linha 404 ↗banco_sql(string $sql): array|nullExecuta uma query SQL e retorna todos os resultados.
Parâmetros
$sqlstring- A query SQL a ser executada.
Retorno
banco_sql_names
ver no código · linha 432 ↗banco_sql_names(string $sql, string $campos): array|nullExecuta 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
banco_select
ver no código · linha 484 ↗banco_select(array|false $params = false): array|nullSeleciona dados do banco de dados de forma estruturada.
Parâmetros
$paramsarray|false- Parâmetros da função.
Retorno
banco_select_name
ver no código · linha 555 ↗banco_select_name(string $campos, string $tabela, string $extra): array|nullSeleciona 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
banco_select_editar
ver no código · linha 612 ↗banco_select_editar(string $campos, string $tabela, string $extra): array|nullSeleciona 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
banco_select_campos_antes_iniciar
ver no código · linha 677 ↗banco_select_campos_antes_iniciar(string $campos, string $tabela, string $extra): boolSeleciona 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
banco_select_campos_antes
ver no código · linha 737 ↗banco_select_campos_antes(string $campo): mixed|nullRetorna valor anterior de um campo específico.
Parâmetros
$campostring- Nome do campo a recuperar.
Retorno
banco_update
ver no código · linha 763 ↗banco_update(string $campos, string $tabela, string $extra): voidExecuta 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
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): voidAdiciona 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
banco_update_executar
ver no código · linha 819 ↗banco_update_executar(string $tabela, string $extra = ''): voidExecuta update em lote com campos acumulados.
Parâmetros
$tabelastring- Nome da tabela.
$extrastring- Condições extras como WHERE (padrão: '').
Retorno
banco_update_varios
ver no código · linha 858 ↗banco_update_varios(array $campos, string $tabela, string $campo_nome, string $id_nome): voidAtualiza 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
banco_insert
ver no código · linha 895 ↗banco_insert(string $campos, string $tabela): voidInsere registro com ID auto-incrementado.
Parâmetros
$camposstring- Valores separados por vírgula.
$tabelastring- Nome da tabela.
Retorno
banco_insert_name
ver no código · linha 911 ↗banco_insert_name(array $dados, string $tabela): voidInsere registro com nomes de campos especificados.
Parâmetros
$dadosarray- Array de arrays [nome, valor, sem_aspas_simples].
$tabelastring- Nome da tabela.
Retorno
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): voidAdiciona 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
banco_insert_name_campos
ver no código · linha 980 ↗banco_insert_name_campos(): arrayRetorna e limpa campos acumulados para inserção.
Retorno
banco_insert_name_varios
ver no código · linha 1007 ↗banco_insert_name_varios(array|false $params = false): voidInsere múltiplos registros de uma única vez.
Parâmetros
$paramsarray|false- Parâmetros da função.
Retorno
banco_insert_varios
ver no código · linha 1077 ↗banco_insert_varios(array $campos, string $tabela): voidInsere vários registros com ID auto-increment.
Parâmetros
$camposarray- Array de strings com valores para cada registro.
$tabelastring- Nome da tabela.
Retorno
banco_insert_varios_tudo
ver no código · linha 1104 ↗banco_insert_varios_tudo(array $campos, string $tabela): voidInsere vários registros com todos os valores especificados.
Parâmetros
$camposarray- Array de strings com valores para cada registro.
$tabelastring- Nome da tabela.
Retorno
banco_insert_id
ver no código · linha 1131 ↗banco_insert_id(string $campos, string $tabela): voidInsere registro com ID especificado.
Parâmetros
$camposstring- Valores separados por vírgula.
$tabelastring- Nome da tabela.
Retorno
banco_insert_tudo
ver no código · linha 1146 ↗banco_insert_tudo(string $campos, string $tabela): voidInsere registro com todos os valores especificados.
Parâmetros
$camposstring- Valores separados por vírgula.
$tabelastring- Nome da tabela.
Retorno
banco_last_id
ver no código · linha 1160 ↗banco_last_id(): int|nullRetorna o último ID inserido.
Retorno
banco_delete
ver no código · linha 1179 ↗banco_delete(string $tabela, string $extra): voidExecuta DELETE no banco de dados.
Parâmetros
$tabelastring- Nome da tabela.
$extrastring- Condições WHERE e outras cláusulas.
Retorno
banco_delete_varios
ver no código · linha 1196 ↗banco_delete_varios(string $tabela, array|string $campo_ids, array $array_ids): voidDeleta 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
banco_campos_virgulas
ver no código · linha 1235 ↗banco_campos_virgulas(array $campos): stringConverte array de campos em string separada por vírgulas.
Parâmetros
$camposarray- Array de nomes de campos.
Retorno
banco_total_rows
ver no código · linha 1263 ↗banco_total_rows(string $tabela, string|null $extra = null): intRetorna total de linhas em uma tabela.
Parâmetros
$tabelastring- Nome da tabela.
$extrastring|null- Condições WHERE opcionais (padrão: null).
Retorno
banco_campos_nomes
ver no código · linha 1285 ↗banco_campos_nomes(string $tabela): arrayRetorna informações sobre colunas de uma tabela.
Parâmetros
$tabelastring- Nome da tabela.
Retorno
banco_campo_existe
ver no código · linha 1318 ↗banco_campo_existe(string $campo, string $tabela): boolVerifica 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
banco_retirar_acentos
ver no código · linha 1346 ↗banco_retirar_acentos(string $var, bool $retirar_espaco = true): stringRemove 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
banco_identificador_unico
ver no código · linha 1390 ↗banco_identificador_unico(array|false $params = false): stringGera identificador único recursivamente.
Parâmetros
$paramsarray|false- Parâmetros da função.
Retorno
banco_identificador
ver no código · linha 1462 ↗banco_identificador(array|false $params = false): stringGera identificador único a partir de string.
Parâmetros
$paramsarray|false- Parâmetros da função.
Retorno
banco_insert_update
ver no código · linha 1541 ↗banco_insert_update(array|false $params = false): voidInsere ou atualiza registro baseado em existência.
Parâmetros
$paramsarray|false- Parâmetros da função.
Retorno
banco_tabelas_lista
ver no código · linha 1642 ↗banco_tabelas_lista(): arrayRetorna lista de todas as tabelas do banco de dados.
Retorno