Buscar en moleculax

Este blog es un ensayo digital donde el pensamiento estructurado se encuentra con la introspección profunda. Explora la arquitectura del conocimiento: desde lo técnico hasta los fundamentos éticos. Aquí, cada algoritmo tiene propósito, cada línea de código refleja intención, y cada reflexión filosófica busca optimizar no solo sistemas, sino también decisiones humanas. Este blog no solo enseña a pensar, enseña a discernir, a construir con sentido. Porque el verdadero desarrollo nace de la conciencia, y eso exige precisión, virtud y coraje.

Tenemos que aprender a contemplar las potenciales consecuencias de nuestros planes, para impedir que nos sorprendan. De esta manera, tendremos más control sobre las situaciones difíciles ya que el verdadero progreso no se mide por la velocidad con la que avanzamos, sino por la dirección que elegimos. En un mundo cada vez más interconectado, el desarrollo de la humanidad exige más que tecnología y conocimiento: requiere conciencia, empatía y propósito.

Debemos cultivar una inteligencia que no solo resuelva problemas, sino que los prevenga con sabiduría. Una ciencia que no solo descubra, sino que se pregunte por qué y para quién. Una economía que no solo crezca, sino que reparta con justicia. Y una cultura que no solo celebre lo diverso, sino que lo abrace como fuerza vital.

Cada decisión que tomamos, cada palabra que decimos, cada idea que compartimos, puede ser una semilla de transformación. El futuro no está escrito: lo estamos escribiendo juntos, ahora mismo.

Que el desarrollo humano sea integral, sostenible y profundamente humano. Porque solo cuando elevamos a todos, nos elevamos como especie.

Sabiduría Justicia Templanza Coraje
Manejo de errores PHP

 

Manejo de errores

Las aplicaciones que usan PECL/mysqlnd_ms deberían implementar el manejo de errores apropiado para todas las llamadas a la API del usuario. Ya que el complemento cambia la semántica de un gestor de conexión, las llamadas a la API pueden devolver errores inesperados. Si se usa el complemento sobre un gestor de conexión que ya no represeta una conexión de red individual, sino una agrupación de conexiones, se establecerá un código de error y un mensaje de error en el gestor de conexión siempre que ocurra un error en cualquier conexión de red subyacente.

Si se usan conexiones retardadas, que es lo predeterminado, las conexiones no son abiertas hasta que sean necesarias para ejecutar consultas. Por lo tanto, una llamada a la API para la ejecución de una senetencia puede devolver un error de conexion. En el ejemplo de abajo, se provoca un error al intentar ejecutar una sentencia en un esclavo. La apertura de la conexión esclava fallará debido a que el fichero de configuración del complemento incluye un nombre de anfitrión no válido para el esclavo.

Ejemplo #1 Provocar un error de conexión

{
    "myapp": {
        "master": {
            "master_0": {
                "host": "localhost",
                "socket": "\/tmp\/mysql.sock"
            }
        },
        "slave": {
            "slave_0": {
                "host": "nombre_host_inváido",
            }
        },
        "lazy_connections": 1
    }
}

La activación explícita de conexiones retardadas sólo es con propósito de demostración.

Ejemplo #2 Error de conexión en la ejecución de una consulta

<?php
$mysqli 
= new mysqli("myapp""nombre_usuario""contraseña""base_datos");
if (
mysqli_connect_errno())
  
/* Por supuesto, su manejo de errores es más agradable... */
  
die(sprintf("[%d] %s\n"mysqli_connect_errno(), mysqli_connect_error()));

/* Conexión 1, la conexión vincula una variable SQL de usuario, no se ejecuta ningún SELECT en el maestro */
if (!$mysqli->query("SET @myrole='master'")) {
 
printf("[%d] %s\n"$mysqli->errno$mysqli->error);
}

/* Conexión 2, se ejecuta en el esclavo a causa de SELECT, provoca un error de conexión */
if (!($resultado $mysqli->query("SELECT @myrole AS _role"))) {
 
printf("[%d] %s\n"$mysqli->errno$mysqli->error);
} else {
 
$fila $resultado->fetch_assoc();
 
$resultado->close();
 
printf("@myrole = '%s'\n"$fila['_role']);
}
$mysqli->close();
?>

El resultado del ejemplo sería algo similar a:

PHP Warning:  mysqli::query(): php_network_getaddresses: getaddrinfo failed: Name or service not known in %s on line %d
PHP Warning:  mysqli::query(): [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known (trying to connect via tcp://invalid_host_name:3306) in %s on line %d
[2002] php_network_getaddresses: getaddrinfo failed: Name or service not known

Se espera que la aplicaciones manejen los posibles errores de conexión mediante la implementación del manejo de errores apropiado.

Dependiendo del caso en uso, las aplicaciones pueden optar por manejar errores de conexión de forma diferente a otros errores. Los errores de conexión típicos son 2002 (CR_CONNECTION_ERROR) - Can't connect to local MySQL server through socket '%s' (%d)2003 (CR_CONN_HOST_ERROR) - Can't connect to MySQL server on '%s' (%d) y 2005 (CR_UNKNOWN_HOST) - Unknown MySQL server host '%s' (%d). Por ejemplo, la aplicación podría comprobar los códigos de error y realizar una tolerancia a fallos manual. La filosofía del complemento no ofrece la tolerancia a fallos automática, más allá de la tolerancia a fallos del maestro, ya que no es una operación transaparente.

Ejemplo #3 Provocar un error de conexión

{
    "myapp": {
        "master": {
            "master_0": {
                "host": "localhost"
            }
        },
        "slave": {
            "slave_0": {
                "host": "invalid_host_name"
            },
            "slave_1": {
                "host": "192.168.78.136"
            }
        },
        "lazy_connections": 1,
        "filters": {
            "roundrobin": [

            ]
        }
    }
}

La activación explícita de conexiones retardadas sólo es con propósito de demostración, ya que el equilibrado de carga es de rotación en oposición al tipo predeterminado aleatorio una vez.

Ejemplo #4 Tolerancia a fallos más básica

<?php
$mysqli 
= new mysqli("myapp""nombre_usuario""contraseña""base_datos");
if (
mysqli_connect_errno())
  
/* Por supuesto, su manejo de errores es más agradable... */
  
die(sprintf("[%d] %s\n"mysqli_connect_errno(), mysqli_connect_error()));

/* Conexión 1, la conexión vincula una variable SQL de usuario, no se ejecuta ningún SELECT en el maestro */
if (!$mysqli->query("SET @myrole='master'")) {
 
printf("[%d] %s\n"$mysqli->errno$mysqli->error);
}

/* Conexión 2, primer esclavo */
$resultado $mysqli->query("SELECT VERSION() AS _version");
/* Tolerancia a fallos manual */
if (2002 == $mysqli->errno || 2003 == $mysqli->errno || 2004 == $mysqli->errno) {
  
/* Conexión 3, falló la conexión al primer esclavo, se intenta con el siguiente */
  
$resultado $mysqli->query("SELECT VERSION() AS _version");
}

if (!
$resultado) {
  
printf("ERROR, [%d] '%s'\n"$mysqli->errno$mysqli->error);
} else {
 
/* Los mensajes de error se toman de la conexión 3, por lo que no hay errores */
 
printf("SUCCESS, [%d] '%s'\n"$mysqli->errno$mysqli->error);
 
$fila $resultado->fetch_assoc();
 
$resultado->close();
 
printf("version = %s\n"$fila['_version']);
}
$mysqli->close();
?>

El resultado del ejemplo sería algo similar a:

[1045] Access denied for user 'nombre_usuario'@'localhost' (using password: YES)
PHP Warning:  mysqli::query(): php_network_getaddresses: getaddrinfo failed: Name or service not known in %s on line %d
PHP Warning:  mysqli::query(): [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known (trying to connect via tcp://invalid_host_name:3306) in %s on line %d
SUCCESS, [0] ''
version = 5.6.2-m5-log

En algunos casos, puede no ser posible la recuperación de forma sencilla de todos los errores que ocurran en todas las conexiones de red a través de un gestor de conexión. Por ejemplo, se asume que un gestor de conexión representa una agrupación de tres conexiones abiertas. Una conexión a un maestro y dos conexiones a los esclavos. La aplicación cambia la base de datos actual usando la llamada a la API de usuario mysqli_select_db(), la cual luego llama a la función de la biblioteca mysqlnd para cambiar el esquema. mysqlnd_ms monitoriza la función e intenta cambiar la base de datos ctual en todas las conexiones para armonizar sus estados. Ahora, se asume que el maestro tiene éxito al cambiar la base de datos, y ambos esclavos fallan. Durante el error inicial del primer esclavo, el complemento establecerá un error apropiado sobre en el gestor de conexión. Y lo mismo se hace cuando falla el segundo esclavo al cambiar la base de datos. El mensaje de error del primer esclavo se pierde.

.

15dias (4) agenda 2023 (1) Algo que leer (269) Android (2) Angular (2) Apache (6) API (1) Arte y Cultura (11) Artes Marciales (10) Astro (1) Banner (1) Base de datos (38) Batalla Cultural (5) Big Data (12) Budismo (4) cabala judia (2) Calculo Asistido por computadoras (2) Canaima (6) Caos (1) Ceo (1) ciencias (3) Cine (1) Cobol (12) Cobra Kai (1) Codigo Linux Documental (2) Computación (4) Computación forense (14) Configurando Samba (1) Conocimiento (1) Consola (8) contenedores (10) cosmo (2) Criptomonedas (3) Cultura (1) Cursos (16) Darkweeb (3) Data Mining (1) Debian (18) Deep Learning (2) DeepWeb (7) demografia (9) Deporte y Recreación (9) Deportes (10) desclasificados (8) Desktop (1) developers (1) DevOps (1) Docker (12) Document (1) Ecología (6) Editor (3) Editores (4) Educacion y TIC (31) Electronica (2) Empleos (1) Emprendimiento (7) Espiritualidad (2) estoicismo (4) Eventos (2) Excel (1) Express (1) fedora (1) Filosofía (25) Fisica (1) Flisol 2008 (3) Flisol 2010 (1) Flisol 2015 (1) Flutter (1) framework (3) Funny (1) Geografía (1) Gerencia y Liderazgo (72) Gestor de Volúmenes Lógicos (1) Git (7) GitHub (8) Globalizacion (5) gnu (28) Go (1) gobiernos (2) golang (2) Google por dentro (1) GraphQL (2) gRPC (1) Hackers - Documental (8) Hacking (31) Historia (3) howto (189) html (1) IA (22) IntelliJIDEA (1) Internet (6) Introducción a los patrones (2) J SON (1) java (58) java eclipse (4) javaScript (9) JDK (1) jiujitsu (4) Json (1) Junit (1) kali (39) kernel (2) Kotlin (1) Laravel (2) Latin (1) lecturas (2) LIbreOffice (1) Libros (4) Linux (49) Linux VirtualBox (1) Literatura (1) Machine Learning (2) Manuales (42) mariaDB (2) Markdown (4) Marketing (1) Matando ladilla (9) Matematicas (3) Matematricas (1) Math (1) maven (1) metodos https (1) MkUltra (1) Modelos (1) MongoDB (17) Multimedia (1) Musica (1) mvc (2) Mysql (22) MySQL Workbench (1) Nagios (2) Naturismo (1) NextJS (2) node (5) Node.js (6) NodeJS (10) NoSQL (1) npm (1) Oracle (11) Oracle sql (10) Php (4) PL/SQL (2) Plsql (1) PNL (1) Poblacion (2) Podman (1) Poesia (1) Politica (5) Política (1) Postgresql (14) PowerShell (1) programacion (88) Psicologia (11) Python (7) React (4) Recomiendo (1) Redes (31) Redis (2) Religion (2) REST (2) Rock (1) Rock/Metal Mp3 (2) RUP (1) Salud (5) sc:snap:android-studio (1) sc:snap:datagrip (1) sc:snap:gitkraken linux (1) Seguridad (18) Seguridad con Gnu Privacy (2) Seo (1) simulaEntrevistas (10) simularExamen (10) Sistemas Operativos (69) SOAP (1) Sociedad (5) Software Libre (169) Soporte Tecnico (12) Sphinx (1) spring (1) spring boot (12) SQL (4) SQL en postgreSQL (44) Taekwondo (11) Tecnologia (5) Tecnología (27) Templarios (5) Tendencias (1) Tensorflow (4) Thymeleaf (1) Tomcat (2) Tor (9) Trialectica (3) TYPEACRIPT (1) Ubuntu (5) unix (2) Vida activa (1) Videos (11) Videos Educativos (10) Vim (1) Viral (3) Visual Studio (1) wallpaper (2) web (1) Wifi (2) Windows (3) WWW (2) Xrandr (1) Zero Trust (2)

Sabiduria Justicia Templanza Coraje.

Hay que contemplar las potenciales consecuencias de nuestros planes, para impedir que nos sorprendan. De esta manera, tendremos más control sobre las situaciones difíciles.


Powered by

Moleculax es un blog de ciencia, biología, astronomía, tecnología y reflexiones sobre el futuro de la humanidad. Explora ideas innovadoras, descubrimientos científicos y conocimientos que inspiran la curiosidad y la imaginación. ¿Cómo saber si te han bloqueado en WhatsApp?, ¿COMO PROGRAMAR?, דודו פארוק, ¿QUES ES estructurada,modular, MongoDBSpain CheetSheet, ORIENTADA A OBJETOS?, Bases de datos estáticas, base de datos dinamicas bases de datos nosql, estructuras de base de datos, Bases de datos de texto completo, base de datos gerarquicas HTML, CSS, XML, JavaScript, mysql, oracle, postgresql, C, C#, php, java, python, liderazgo, libros, books, informix, ¿COMO REPARAR PAQUETES ROTOS EN DEBIAN?, REPARAR paquetes ROTOS ubuntu gerencia, COMO APRENDER laravel, ACTIVAR wifi en CANAIMA, exotics, exoticas, COMO APRENDER MONGODB, agapornio, agapomis, seguros, ganar dinero, bitcoin, freeBitcoin invertir en bolsa, marketing online, ofertas de coches Описание Блога Moleculax Moleculax — это цифровое эссе, в котором структурированное мышление встречается с глубокой интроспекцией. Наш блог исследует архитектуру знаний: от технических тонкостей разработки программного обеспечения до этических основ и философии. Ключевые Темы: Разработка и Технологии: Программирование, базы данных (SQL, NoSQL), Big Data, Node.js, Java. Наука и Мышление: Астрономия, биология, научные открытия, а также такие философские направления, как Стоицизм. Этика и Будущее: Размышления о развитии человечества, моральные принципы в технологиях и этические вызовы. Наша миссия: Развивать интеллект, который не только решает проблемы, но и предотвращает их с мудростью. Moleculax 是一个关于科学、生物学、天文学、技术以及人类未来思考的博客。它探索创新的理念、科学发现和能够激发好奇心与想象力的知识。 如何知道你在 WhatsApp 上被拉黑?如何编程? דודו פארוק,什么是结构化、模块化、面向对象?MongoDBSpain 速查表,静态数据库、动态数据库、NoSQL 数据库、数据库结构、全文数据库、层次型数据库。 HTML、CSS、XML、JavaScript、MySQL、Oracle、PostgreSQL、C、C#、PHP、Java、Python,领导力、书籍、Informix。如何修复 Debian 中损坏的软件包?修复 Ubuntu 损坏的软件包,管理,如何学习 Laravel,如何在 Canaima 激活 WiFi,异域、奇异,如何学习 MongoDB,爱情鸟、保险、赚钱、比特币、FreeBitcoin、投资股票市场、网络营销、汽车优惠。 Moleculax 博客描述: Moleculax 是一篇数字随笔,在这里结构化的思维与深刻的自省相遇。我们的博客探索知识的架构:从软件开发的技术细节到伦理基础与哲学。 核心主题: - 开发与技术:编程、数据库(SQL、NoSQL)、大数据、Node.js、Java。 - 科学与思维:天文学、生物学、科学发现,以及诸如斯多葛主义等哲学流派。 - 伦理与未来:关于人类发展的思考、技术中的道德原则与伦理挑战。 我们的使命:培养一种不仅能解决问题,而且能以智慧预防问题的智能。