connection = mysql_connect($host, $user, $pass); mysql_select_db($db, $this->connection); } function Query($sql) { return mysql_query($sql, $this->connection); } function FetchAssoc($result) { return mysql_fetch_assoc($result); } function NumRows($result) { return mysql_num_rows($result); } } */ // Versión actualizada con mysqli_* (COMPATIBLE CON PHP 8) class DB { private $connection; /** * Abre conexión a la base de datos * @param string $host Host de la base de datos * @param string $user Usuario de la base de datos * @param string $pass Contraseña de la base de datos * @param string $db Nombre de la base de datos * @return boolean */ function Open($host, $user, $pass, $db) { $this->connection = mysqli_connect($host, $user, $pass, $db); if (!$this->connection) { // Manejo de error compatible die("Error de conexión: " . mysqli_connect_error()); return false; } // Establecer charset para compatibilidad UTF-8 mysqli_set_charset($this->connection, "utf8"); return true; } /** * Ejecuta una consulta SQL * @param string $sql Consulta SQL * @return mysqli_result|false */ function Query($sql) { $result = mysqli_query($this->connection, $sql); if ($result === false) { // Manejo de error compatible error_log("Error en consulta: " . mysqli_error($this->connection)); error_log("SQL: " . $sql); } return $result; } /** * Obtiene una fila como arreglo asociativo * @param mysqli_result $result Resultado de consulta * @return array|null */ function FetchAssoc($result) { return mysqli_fetch_assoc($result); } /** * Obtiene el número de filas de un resultado * @param mysqli_result $result Resultado de consulta * @return int */ function NumRows($result) { return mysqli_num_rows($result); } /** * Obtiene un valor específico de una fila * @param mysqli_result $result Resultado de consulta * @param int $row Número de fila * @param mixed $field Campo (nombre o índice) * @return mixed */ function Result($result, $row, $field = 0) { mysqli_data_seek($result, $row); $row_data = mysqli_fetch_array($result); return is_numeric($field) ? $row_data[$field] : $row_data[$field]; } /** * Obtiene el último ID insertado * @return int */ function InsertId() { return mysqli_insert_id($this->connection); } /** * Obtiene el número de filas afectadas * @return int */ function AffectedRows() { return mysqli_affected_rows($this->connection); } /** * Libera memoria del resultado * @param mysqli_result $result Resultado a liberar */ function FreeResult($result) { mysqli_free_result($result); } /** * Escapa caracteres especiales para prevenir SQL injection * @param string $string String a escapar * @return string */ function Escape($string) { return mysqli_real_escape_string($this->connection, $string); } /** * Cierra la conexión a la base de datos */ function Close() { if ($this->connection) { mysqli_close($this->connection); } } /** * Obtiene el último error de MySQL * @return string */ function GetError() { return mysqli_error($this->connection); } /** * Inicia una transacción */ function BeginTransaction() { mysqli_begin_transaction($this->connection); } /** * Confirma una transacción */ function Commit() { mysqli_commit($this->connection); } /** * Revierte una transacción */ function Rollback() { mysqli_rollback($this->connection); } // Destructor para asegurar cierre de conexión public function __destruct() { $this->Close(); } } // Ejemplo de uso (similar al original) /* $db = new DB(); $db->Open("localhost", "usuario", "password", "basededatos"); $result = $db->Query("SELECT * FROM usuarios"); while ($row = $db->FetchAssoc($result)) { echo $row['nombre'] . "\n"; } $db->FreeResult($result); */