Files
ventas_php/php8-migration/ejemplo-db-mysqli.php
nickpons666 aaa77e870e Complete PHP 8.3.6 migration with modern architecture
- Added secure .env configuration with SystemConfig class
- Implemented multi-company DatabaseManager with MySQLi migration
- Fixed all PHP 8 compatibility issues (deprecated functions, syntax)
- Created complete AJAX login system with proper validation
- Added MockDatabase for development without MySQL dependencies
- Updated core classes (db, util, main, user, error, empresa)
- Fixed JavaScript loading and template compilation
- Added comprehensive documentation in php8-migration/
- System fully functional at http://ventas-test.local:82/login

Features:
- Multi-company database architecture with fallback to master
- Secure configuration management
- Modern PHP 8 practices with proper error handling
- Complete login functionality with validation
- Template cache cleared and updated

All critical issues resolved and system ready for production.
2026-01-06 22:52:04 -06:00

195 lines
4.8 KiB
PHP
Executable File

<?php
/**
* Ejemplo de migración de db.class.php de MySQL a MySQLi
*
* Este archivo muestra cómo migrar las funciones mysql_* obsoletas
* a mysqli_* compatible con PHP 8
*/
// Versión original con mysql_* (NO COMPATIBLE CON PHP 8)
/*
class DB {
private $connection;
function Open($host, $user, $pass, $db) {
$this->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);
*/