Solución: Implementar polyfills y código compatible
<?php
class Usuario {
private $datos;
public function __construct($datos) {
$this->datos = $datos;
}
public function getNombre() {
return isset($this->datos["nombre"]) ? $this->datos["nombre"] : "";
}
public function getEmail() {
return isset($this->datos["email"]) ? $this->datos["email"] : "";
}
}
// Uso
$usuario = new Usuario([
"nombre" => "Juan Pérez",
"email" => "juan@ejemplo.com"
]);
echo $usuario->getNombre();
<?php
// En lugar de JSON_EXTRACT (MySQL 5.7+)
function extraerValorJSON($json_string, $ruta) {
$data = json_decode($json_string, true);
$partes = explode(".", $ruta);
$valor = $data;
foreach ($partes as $parte) {
if (isset($valor[$parte])) {
$valor = $valor[$parte];
} else {
return null;
}
}
return $valor;
}
// Uso
$json = '{"usuario": {"nombre": "Juan", "edad": 30}}';
$nombre = extraerValorJSON($json, "usuario.nombre");
echo $nombre; // Imprime: Juan
<?php
function transaccionMyISAM($conexion, $queries) {
try {
// Bloquear tablas
$conexion->query("LOCK TABLES usuarios WRITE, perfiles WRITE");
$exito = true;
foreach ($queries as $query) {
if (!$conexion->query($query)) {
$exito = false;
break;
}
}
if ($exito) {
$conexion->query("COMMIT");
} else {
$conexion->query("ROLLBACK");
}
// Desbloquear tablas
$conexion->query("UNLOCK TABLES");
return $exito;
} catch (Exception $e) {
$conexion->query("UNLOCK TABLES");
return false;
}
}
// Uso
$queries = [
"INSERT INTO usuarios (nombre, email) VALUES ('Juan', 'juan@ejemplo.com')",
"INSERT INTO perfiles (usuario_id, bio) VALUES (LAST_INSERT_ID(), 'Desarrollador')"
];
$resultado = transaccionMyISAM($conexion, $queries);
No te rindas si no puedes actualizar. Hay muchas formas de hacer que tu aplicación funcione con limitaciones del servidor.