Opción 1: MySQLi (procedural / orientado a objetos)
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
$servername = "localhost";
$username = "tu_usuario";
$password = "tu_contrasena";
$database = "tu_base_de_datos";
$conn = new mysqli($servername, $username, $password, $database);
if ($conn->connect_error) {
die("Conexión fallida: " . $conn->connect_error);
}
echo "Conexión exitosa";
$conn->close();
?>
Opción 2: PDO (recomendada)
Más portable y con manejo de excepciones limpio:
<?php
$dsn = "mysql:host=localhost;dbname=tu_base_de_datos;charset=utf8mb4";
$opt = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
try {
$pdo = new PDO($dsn, "tu_usuario", "tu_contrasena", $opt);
} catch (PDOException $e) {
exit("Error de conexión: " . $e->getMessage());
}
// Ejemplo: consulta segura con parámetros
$stmt = $pdo->prepare("SELECT id, nombre FROM usuarios WHERE email = ?");
$stmt->execute([$_POST['email'] ?? '']);
foreach ($stmt as $row) {
echo $row['nombre'];
}
?>
Buenas prácticas
- Nunca concatenar variables del usuario en consultas SQL: usá prepared statements.
- Guardá las credenciales fuera del repositorio (variables de entorno o archivo de config no versionado).
- Usá
utf8mb4como charset para soporte completo de Unicode (incluyendo emojis). - En producción:
display_errors = 0y registrá los errores conlog_errors. - Cerrá la conexión en scripts largos. PHP la cierra automáticamente al final del request.
Tutorial en YouTube
Guía paso a paso para crear bases de datos, usuarios, contraseñas y habilitar acceso remoto desde cPanel: