Para hacer un “insert into” en PHP con buenas prácticas y protegido contra ataques de inyección SQL, puedes utilizar dos métodos diferentes: MySQLi o PDO [2]. En ambos casos, es importante utilizar sentencias preparadas para evitar la inyección SQL.
cada s corresponde a un campo, ejemplo: si vas a insertar o consultar dos campos usas ss, si vas a insertar 5 son sssss.
Aquí hay un ejemplo de código que muestra cómo hacer un “insert into” utilizando MySQLi:
$conn = mysqli_connect("host", "usuario", "contraseña", "nombre_bd");
if (!$conn) {
die("Conexión fallida: " . mysqli_connect_error());
}
$nombre = mysqli_real_escape_string($conn, $_POST['nombre']);
$apellidos = mysqli_real_escape_string($conn, $_POST['apellidos']);
$sql = "INSERT INTO usuarios (nombre, apellidos) VALUES (?, ?)";
$stmt = mysqli_prepare($conn, $sql);
mysqli_stmt_bind_param($stmt, "ss", $nombre, $apellidos);
if (mysqli_stmt_execute($stmt)) {
echo "Registro insertado con éxito";
} else {
echo "Error al insertar el registro: " . mysqli_stmt_error($stmt);
}
mysqli_stmt_close($stmt);
mysqli_close($conn);
En este ejemplo, se está usando mysqli_real_escape_string
para escapar los valores del formulario antes de incluirlos en la consulta. Luego, se está utilizando una sentencia preparada y mysqli_stmt_bind_param
para vincular los valores a la consulta de manera segura.
Para verificar si el usuario ya está registrado, necesitas hacer una consulta a la base de datos para verificar si existe un registro con el mismo nombre y apellidos. Si se encuentra un registro, se debe mostrar un mensaje al usuario indicando que ya está registrado, en caso contrario, se realiza el insert.
Aquí te muestro el código modificado para realizar esta validación:
$conn = mysqli_connect("host", "usuario", "contraseña", "nombre_bd");
if (!$conn) {
die("Conexión fallida: " . mysqli_connect_error());
}
$nombre = mysqli_real_escape_string($conn, $_POST['nombre']);
$apellidos = mysqli_real_escape_string($conn, $_POST['apellidos']);
// Verificar si el usuario ya está registrado
$sql_verificar = "SELECT COUNT(*) AS num FROM usuarios WHERE nombre = ? AND apellidos = ?";
$stmt_verificar = mysqli_prepare($conn, $sql_verificar);
mysqli_stmt_bind_param($stmt_verificar, "ss", $nombre, $apellidos);
mysqli_stmt_execute($stmt_verificar);
$resultado = mysqli_stmt_get_result($stmt_verificar);
$fila = mysqli_fetch_assoc($resultado);
if ($fila['num'] > 0) {
// El usuario ya está registrado
echo "El usuario ya está registrado";
} else {
// Insertar el registro
$sql_insertar = "INSERT INTO usuarios (nombre, apellidos) VALUES (?, ?)";
$stmt_insertar = mysqli_prepare($conn, $sql_insertar);
mysqli_stmt_bind_param($stmt_insertar, "ss", $nombre, $apellidos);
if (mysqli_stmt_execute($stmt_insertar)) {
echo "Registro insertado con éxito";
} else {
echo "Error al insertar el registro: " . mysqli_stmt_error($stmt_insertar);
}
mysqli_stmt_close($stmt_insertar);
}
mysqli_stmt_close($stmt_verificar);
mysqli_close($conn);
Un ejemplo mas completo
0) {
// El usuario ya está registrado
echo "El usuario ya está registrado";
} else {
// Insertar el registro
$sql_insertar = "INSERT INTO tabla (Nombres, Correo, Clave, Nodo, Apellidos, Edad, Institucion_Educativa, Genero, Carrera, Semestre) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
$stmt_insertar = mysqli_prepare($conn, $sql_insertar);
mysqli_stmt_bind_param($stmt_insertar, "sssssissss", $Nombres, $Correo, $hash, $Nodo, $Apellidos, $Edad, $Institucion_Educativa, $Genero, $Carrera, $Semestre);
if (mysqli_stmt_execute($stmt_insertar)) {
echo "Registro insertado con éxito";
} else {
echo "Error al insertar el registro: " . mysqli_stmt_error($stmt_insertar);
}
mysqli_stmt_close($stmt_insertar);
}
mysqli_stmt_close($stmt_verificar);
mysqli_close($conn);
?>