Esta especificação define os requisitos para mitigar erros em tempo de execução reportados nos logs de produção do núcleo conn2flow, abrangendo a segurança de tipos no driver de banco de dados, a verificação defensiva de tabelas de hosts e a eliminação de avisos de chaves não definidas no PHP 8.1+.
1. Blindagem de banco_num_rows() e banco_select() contra TypeError no PHP 8.1+
-
Problema Identificado:
-
Quando uma consulta SQL falha (por exemplo, tabela ausente ou erro de sintaxe),
banco_query()retornafalse. -
Em
banco.php:484,banco_select()executavaif(banco_num_rows($res))sem validar previamente se$resera verdadeiro. -
Por sua vez,
banco_num_rows($result)chamava diretamentemysqli_num_rows(false), o que a partir do PHP 8.1 lança uma exceção fatal:TypeError: mysqli_num_rows(): Argument #1 ($result) must be of type mysqli_result, false given in .../bibliotecas/banco.php:236.
-
-
Solução Requerida:
-
Em
banco_num_rows($result): -
Verificar se
$resulté falso, nulo ou se não é uma instância demysqli_result(ouBancoResultadoRemoto). Retornar0imediatamente nesses casos. -
Em
banco_select(): -
Adicionar checagem de integridade
if($res && banco_num_rows($res))antes de inspecionar campos ou linhas.
-
2. Consulta Defensiva à Tabela usuarios_gestores_hosts em perfil-usuario.php
-
Problema Identificado:
-
Na função
perfil_usuario_redefine_password(), o módulo tenta consultar a tabelausuarios_gestores_hostspara obter a referência de [REDACTED] usuário:SELECT id_hosts FROM usuarios_gestores_hosts WHERE id_usuarios='...'. -
Em bancos de dados de sites cliente dedicados (fora do ambiente multi-[REDACTED] plataforma central), a tabela
usuarios_gestores_hostsnão existe, gerando o erro de bancoTable 'snapphoton_site.usuarios_gestores_hosts' doesn't exist.
-
-
Solução Requerida:
-
Proteger a busca de [REDACTED] só ser executada caso a tabela exista ou caso o ambiente esteja operando em modo multi-host (
$_GESTOR['gestor-hosts']/banco_tabela_existe('usuarios_gestores_hosts')). -
Em caso de ausência da tabela, prosseguir normalmente atribuindo
$id_hosts = nullsem abortar a redefinição de senha.
-
3. Eliminação de Avisos PHP de Índices Não Definidos (Undefined array key)
-
Problemas Identificados:
-
admin-paginas.php:111e114: Acessava$_REQUEST[$post_nome]diretamente semisset()ou!empty(), disparandoPHP Warning: Undefined array key "raiz". -
gestor.php: Acessava$layouts['css_compiled']sem operador de coalescência, gerandoPHP Warning: Undefined array key "css_compiled".
-
-
Solução Requerida:
-
Substituir os acessos diretos por
!empty($_REQUEST[$post_nome])emadmin-paginas.php. -
Garantir a utilização de
$layouts['css_compiled'] ?? ''emgestor.php.
-
4. Critérios de Aceitação
-
Sintaxe e Lint:
php -l100% limpo nos arquivos alterados (banco.php,perfil-usuario.php,admin-paginas.php,gestor.php). -
Blindagem do Banco:
banco_num_rows(false)retorna0sem lançarTypeError. -
Redefinição de Senha Segura: A redefinição de senha em bancos de dados sem a tabela
usuarios_gestores_hostsconclui com sucesso. -
Zero Warnings: Operações de CRUD de páginas e renderização de layout executam sem gerar avisos de chaves inexistentes.