Primer commit del sistema avantika sin cambios
This commit is contained in:
195
php8-migration/ejemplo-db-mysqli.php
Normal file
195
php8-migration/ejemplo-db-mysqli.php
Normal file
@@ -0,0 +1,195 @@
|
||||
<?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);
|
||||
*/
|
||||
Reference in New Issue
Block a user