The primary table for user authentication and profile information.Inferred Schema (based on code analysis):
CREATE TABLE usuarios ( id INT PRIMARY KEY AUTO_INCREMENT, nombre VARCHAR(100) NOT NULL, apellido_paterno VARCHAR(100) NOT NULL, apellido_materno VARCHAR(100) NOT NULL, email VARCHAR(255) NOT NULL UNIQUE, password VARCHAR(255) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP);
// Check if email already exists$checkStmt = $conn->prepare("SELECT id FROM usuarios WHERE email = ?");$checkStmt->bind_param("s", $email);$checkStmt->execute();$checkStmt->store_result();if ($checkStmt->num_rows > 0) { $_SESSION['errors']['email'] = 'El correo ya está registrado'; header('Location: ../registro.php'); exit();}$checkStmt->close();
CREATE DATABASE registro_RALQ CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
2
Create usuarios Table
USE registro_RALQ;CREATE TABLE usuarios ( id INT PRIMARY KEY AUTO_INCREMENT, nombre VARCHAR(100) NOT NULL, apellido_paterno VARCHAR(100) NOT NULL, apellido_materno VARCHAR(100) NOT NULL, email VARCHAR(255) NOT NULL UNIQUE, password VARCHAR(255) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, INDEX idx_email (email)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
3
Create Database User (Production)
-- Create dedicated userCREATE USER 'ralq_user'@'localhost' IDENTIFIED BY 'strong_password_here';-- Grant minimal required privilegesGRANT SELECT, INSERT, UPDATE ON registro_RALQ.usuarios TO 'ralq_user'@'localhost';-- Apply changesFLUSH PRIVILEGES;
-- Count total usersSELECT COUNT(*) as total_users FROM usuarios;-- Recent registrationsSELECT nombre, apellido_paterno, email, created_at FROM usuarios ORDER BY created_at DESCLIMIT 10;
The current implementation creates a new database connection for each request. For high-traffic applications, consider implementing connection pooling or using persistent connections:
// Use persistent connection$conn = new mysqli('p:' . $servername, $username, $password, $dbname);