This website uses cookies

Our website, platform and/or any sub domains use cookies to understand how you use our services, and to improve both your experience and our marketing relevance.

Cómo importar y exportar archivos CSV con PHP y MySQL

Updated on julio 10, 2025

8 Min Read

Puntos clave:

  • Gestiona fácilmente los datos de tu aplicación PHP aprendiendo a importar y exportar entre archivos MySQL y CSV.
  • Este tutorial práctico, paso a paso y con ejemplos de código, te guiará a través de una transferencia de datos perfecta.
  • Domina estas técnicas para agilizar tareas como la migración de datos, las copias de seguridad y las integraciones de sistemas.

PHP se utiliza ampliamente para construir una amplia gama de productos que van desde aplicaciones web a aplicaciones de nivel empresarial. La clave para un código PHP eficiente es seguir flujos de trabajo adecuados y automatizar los procesos. El resultado es un código de alta calidad y libre de errores.

En casi todas las aplicaciones PHP, los datos se almacenan, se accede a ellos y se intercambian entre varios componentes de la aplicación. Para asegurarse de que este intercambio y acceso a los datos se realiza sin problemas, el equipo de desarrollo debe asegurarse de que las bases de datos y los volcados de datos tienen el formato adecuado.

La importación y exportación de datos a y desde bases de datos es un procedimiento bastante habitual en el desarrollo PHP. Otra actividad importante es la copia de seguridad y transferencia de bases de datos.

En este artículo, te explicaré cómo exportar un archivo csv desde una tabla de datos mysql. Necesitas registrarte en Cloudways para lanzar un servidor y una aplicación PHPstack. Antes de registrarte, es una buena idea mirar todas las opciones de precios de los proveedores de alojamiento de primera clase como AWS, DigitalOcean, Linode, Vultr y GCP para que puedas encontrar el que se adapte perfectamente a tus necesidades.

Aloja sitios web PHP con facilidad [A partir de 10 $ de crédito].

  • Puesta en escena gratuita
  • Copia de seguridad gratuita
  • PHP 8.0
  • Sitios web ilimitados

PRUEBA AHORA ⇒

Crear una base de datos en MySQL

El primer paso de este tutorial es la creación de una base de datos MySQL. Como Cloudways proporciona el gestor mysql personalizado en la plataforma, que contiene una base de datos para la app. puedes crear tablas ejecutando consultas SQL. Crea una tabla `employeeinfo` en la base de datos utilizando la siguiente consulta SQL.

CREATE TABLE employeeinfo(
emp_id VARCHAR(50) UNSIGNED PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date VARCHAR(50)
)

Esto creará una nueva tabla `employeeinfo` en la base de datos. Utilizaré esta tabla para insertar los datos del archivo CSV.

Deja de perder el tiempo con los servidores

Cloudways se encarga de gestionar los servidores por ti para que puedas centrarte en crear grandes aplicaciones y mantener contentos a tus clientes.

Crear conexión MySql en PHP

Para importar y exportar la base de datos en MySql crearás un archivo aparte `config.php`. Añade el siguiente código y sustituye las credenciales de la base de datos por las tuyas. Puedes encontrar tus credenciales db en Detalles de acceso a la aplicación:

<?php
function getdb(){
$servername = "localhost";
$username = "huscqxzwaw";
$password = "2WWKxxxxHr";
$db = "huscqxzwaw";

try {
   
    $conn = mysqli_connect($servername, $username, $password, $db);
     //echo "Connected successfully"; 
    }
catch(exception $e)
    {
    echo "Connection failed: " . $e->getMessage();
    }
    return $conn;
}
?>

Cómo Conectar la Base de Datos MySQL con Sitios Web PHP>

¿Cómo importar CSV a MySQL utilizando PHP?

Una vez creada la base de datos, lo siguiente que necesitamos es un archivo HTML que pueda cargar un archivo CSV. Empecemos con unos sencillos pasos a seguir.

Paso 1: Crear una base de datos y una tabla
En primer lugar, tienes que crear una base de datos y una tabla en MySQL donde almacenarás los datos CSV. Aquí tienes un ejemplo de consulta SQL para crear una tabla llamada employeeinfo:

CREATE TABLE employeeinfo (
    emp_id INT(11) NOT NULL,
    firstname VARCHAR(255) NOT NULL,
    lastname VARCHAR(255) NOT NULL,
    email VARCHAR(255) NOT NULL,
    reg_date DATE NOT NULL,
    PRIMARY KEY (emp_id)
);

Paso 2: Diseñar el formulario de importación
Ahora tenemos que crear un formulario HTML para subir el archivo CSV. Este formulario permitirá a los usuarios seleccionar un archivo CSV de su ordenador y subirlo a tu servidor.

<form action="index.php" method="post" enctype="multipart/form-data">
    <input type="file" name="file" accept=".csv">
    <button type="submit" name="Import">Import CSV</button>
</form>

Paso 3: Gestiona la subida y validación del archivo
En tu script PHP, gestiona la subida del archivo y valida que el archivo subido es un archivo CSV.

if (isset($_POST["Import"])) {
    $filename = $_FILES["file"]["tmp_name"];
    
    // Check if the file is a CSV file
    if (pathinfo($_FILES["file"]["name"], PATHINFO_EXTENSION) != "csv") {
        echo "Please upload a CSV file.";
        exit;
    }
    
    // Proceed with importing the CSV file
    importCSV($filename);
}

Paso 4: Importar datos CSV a MySQL
Crea una función llamada importCSV() para gestionar la importación de CSV. Esta función leerá el archivo CSV e insertará sus datos en la base de datos MySQL utilizando sentencias preparadas.

functions.php (Sección Importar)
Así es como puedes implementar la función importCSV() de forma segura:

function importCSV($filename) {
    // Get a secure database connection
    $conn = getConnection(); // Ensure this function returns a secure connection
    
    // Open the CSV file
    $file = fopen($filename, "r");
    
    // Skip the header row (if it exists)
    fgetcsv($file, 10000, ",");  // Adjust delimiter if needed
    
    // Prepare the SQL query
    $sql = "INSERT INTO employeeinfo (emp_id, firstname, lastname, email, reg_date) VALUES (?, ?, ?, ?, ?)";
    $stmt = $conn->prepare($sql);
    
    if ($stmt === false) {
        die("Error preparing statement: " . $conn->error); // Handle prepare error
    }
    
    // Bind parameters
    $stmt->bind_param("sssss", $emp_id, $firstname, $lastname, $email, $reg_date);
    
    while (($getData = fgetcsv($file, 10000, ",")) !== FALSE) {
        // Validate data (example validation)
        if (count($getData) != 5) {
            error_log("Invalid CSV row: " . implode(",", $getData));
            continue; // Skip to the next row
        }
        
        // Assign values
        $emp_id = $getData[0];
        $firstname = $getData[1];
        $lastname = $getData[2];
        $email = $getData[3];
        $reg_date = $getData[4];
        
        // Execute the query
        if (!$stmt->execute()) {
            error_log("Error inserting row: " . $stmt->error);
        }
    }
    
    // Close the statement and connection
    $stmt->close();
    fclose($file);
    $conn->close();
    
    echo "<script type=\"text/javascript\">
            alert(\"CSV File has been successfully Imported.\");
            window.location = \"index.php\"
          </script>";
}

// Example of a secure getConnection() function
function getConnection(): mysqli
{
    $servername = $_ENV["DB_HOST"] ?? "localhost"; // Default to localhost if not set
    $username = $_ENV["DB_USER"] ?? "your_db_user";   // Provide reasonable defaults
    $password = $_ENV["DB_PASSWORD"] ?? "your_db_password";
    $dbname = $_ENV["DB_NAME"] ?? "your_db_name";

    try {
        $conn = new mysqli($servername, $username, $password, $dbname);
        if ($conn->connect_error) {
            throw new Exception("Connection failed: " . $conn->connect_error);
        }
        return $conn;
    } catch (Exception $e) {
        error_log("Database connection error: " . $e->getMessage()); // Log the error
        die("Failed to connect to the database.  Check your configuration."); // Fatal error, stop execution
    }
}

Alternativa: Utilizar el INFILO DE CARGA DE DATOS de MySQL

Para archivos CSV grandes, considera la posibilidad de utilizar el comando LOAD DATA INFILE de MySQL, que es mucho más rápido que procesar el archivo línea por línea con PHP:

$loadSQL = "LOAD DATA LOCAL INFILE '$filename' INTO TABLE employeeinfo FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\n' IGNORE 1 ROWS";
mysqli_query($conn, $loadSQL);

Este método requiere la palabra clave LOCAL si estás ejecutando la consulta desde un servidor remoto. Asegúrate de que el usuario de MySQL tiene los permisos necesarios para utilizar LOAD DATA INFILE.

Mostrar los registros guardados

Una vez importado el archivo CSV, mostraré los datos mediante una sencilla función, `get_all_records()`, inicializada en `index.php`. Copia esta función en `function.php`.

function get_all_records(){
    $con = getdb();
    $Sql = "SELECT * FROM employeeinfo";
    $result = mysqli_query($con, $Sql);  


    if (mysqli_num_rows($result) > 0) {
     echo "<div class='table-responsive'><table id='myTable' class='table table-striped table-bordered'>
             <thead><tr><th>EMP ID</th>
                          <th>First Name</th>
                          <th>Last Name</th>
                          <th>Email</th>
                          <th>Registration Date</th>
                        </tr></thead><tbody>";


     while($row = mysqli_fetch_assoc($result)) {

         echo "<tr><td>" . $row['emp_id']."</td>
                   <td>" . $row['firstname']."</td>
                   <td>" . $row['lastname']."</td>
                   <td>" . $row['email']."</td>
                   <td>" . $row['reg_date']."</td></tr>";        
     }
    
     echo "</tbody></table></div>";
     
} else {
     echo "you have no records";
}
}

En este método realmente sencillo, simplemente seleccioné todos los registros y los mostré en la página de índice a través del método. Cada vez que el usuario cargue un archivo CSV, los registros se guardarán en la tabla y se mostrarán en la página de índice.

Exportar MySQL a CSV con PHP

Exportar datos de la base de datos MySQL a un archivo CSV es igualmente muy fácil. Para demostrarlo, utilizaré el index.php que he creado anteriormente.

Añade el siguiente código al archivo.

 <div>
            <form class="form-horizontal" action="functions.php" method="post" name="upload_excel"   
                      enctype="multipart/form-data">
                  <div class="form-group">
                            <div class="col-md-4 col-md-offset-4">
                                <input type="submit" name="Export" class="btn btn-success" value="export to excel"/>
                            </div>
                   </div>                    
            </form>           
 </div>

Después de añadir este marcado HTML, el botón Exportar aparecerá debajo de la tabla. Ahora añade la siguiente condición en functions.php.

 if(isset($_POST["Export"])){
		 
      header('Content-Type: text/csv; charset=utf-8');  
      header('Content-Disposition: attachment; filename=data.csv');  
      $output = fopen("php://output", "w");  
      fputcsv($output, array('ID', 'First Name', 'Last Name', 'Email', 'Joining Date'));  
      $query = "SELECT * from employeeinfo ORDER BY emp_id DESC";  
      $result = mysqli_query($con, $query);  
      while($row = mysqli_fetch_assoc($result))  
      {  
           fputcsv($output, $row);  
      }  
      fclose($output);  
 }  

Cuando se pulsa el botón `Exportar` , se envía la cabecera `Content-Type: text/csv` con un archivo adjunto `data.csv`.

Como `php://output` es un flujo de sólo escritura que permite el acceso de escritura al mecanismo del búfer de salida, seleccioné todos los datos de la tabla en la línea siguiente y los pasé al método `fputcsv()` . Este método formatea una línea (pasada como una matriz de campos) como CSV y la escribe (terminada por una nueva línea) en el archivo especificado. Finalmente, se descarga el archivo con todos los datos deseados.

Finalmente, tras integrar todo el código, verás la siguiente forma final de aplicación.

cloudways importación excel

Alojamiento PHP Gestionado Supercargado – Para una velocidad 10 veces mayor y una seguridad blindada

Da rienda suelta a la verdadera potencia de tu sitio web con el alojamiento PHP – ¡donde la velocidad, la seguridad y el rendimiento sin fisuras se unen para ofrecerte una experiencia online excepcional!

Conclusión

En este artículo he explicado cómo puedes exportar datos desde y hacia archivos CSV utilizando PHP y MySQL. Este es un ejemplo sencillo, puedes añadir lógica y validaciones más complejas según tus requisitos. También puedes crear casos de prueba para verificar el código e Integrar con GitHub utilizando las Herramientas de Integración Continua de PHP. Si deseas añadir algo a la discusión o te gustaría hacer una pregunta, deja un comentario a continuación y embárcate en tu viaje de codificación con la ayuda del mejor servicio de alojamiento PHP.

¿Cómo importo y exporto CSV utilizando PHP y MySQL?

Para importar y exportar archivos CSV en PHP con MySQL, empieza por validar la carga del archivo con la función is_uploaded_file() de PHP. A continuación, abre el archivo con fopen(), y lee el contenido con fgetcsv(). Tras analizar los datos, insértalos o actualízalos en la base de datos MySQL basándote en identificadores únicos como el correo electrónico.

¿Existen bibliotecas o funciones PHP diseñadas específicamente para importar/exportar datos CSV?

Sí, PHP ofrece varias herramientas para manejar archivos CSV. La función incorporada fgetcsv() lee filas CSV, mientras que bibliotecas como League\Csv simplifican la gestión de datos CSV, y PhpSpreadsheet admite varios formatos de archivo. Además, ParseCsv es una opción ligera para tareas específicas de CSV.

¿Existe alguna limitación o consideración al importar o exportar archivos CSV grandes con PHP y MySQL?

Al trabajar con archivos CSV de gran tamaño, las consideraciones clave incluyen el uso de memoria, el tiempo de ejecución y la capacidad de manejar trozos de datos. Es importante validar y desinfectar los datos, garantizar la codificación y el formato adecuados, e implementar la gestión de errores para un procesamiento más fluido.

¿Cuáles son algunas alternativas a PHP y MySQL para importar y exportar datos CSV?

Las alternativas a PHP y MySQL para manejar archivos CSV incluyen Python con pandas para una potente manipulación de datos, R para tareas estadísticas y Java con Apache Commons CSV. Las herramientas de línea de comandos como awk y sed ofrecen capacidades de procesamiento de texto, mientras que Excel o Google Sheets proporcionan interfaces sencillas para pequeños conjuntos de datos.

¿Cómo importar y exportar archivos CSV utilizando PHP y MySQL?

Para importar y exportar archivos CSV, valida la carga del archivo utilizando is_uploaded_file() y léelo con fopen() y fgetcsv(). Una vez analizados, inserta o actualiza los datos en MySQL, asegurándote de que se gestionan correctamente los archivos de mayor tamaño, incluyendo la fragmentación y la gestión de la memoria.

¿Cómo importar CSV a MySQL utilizando PHP?

Para importar CSV a MySQL utilizando PHP, abre el CSV con fopen(), luego lee cada fila con fgetcsv() e inserta los datos en la base de datos MySQL utilizando consultas SQL. Asegúrate de manejar adecuadamente las rutas de los archivos y los errores para una importación eficiente.

¿Cómo exportar un archivo CSV a MySQL?

Exportar un archivo CSV a MySQL implica preparar el CSV, crear una tabla en MySQL y utilizar comandos SQL como LOAD DATA INFILE para importar el archivo. Asegúrate de que las asignaciones de columnas son correctas para alinearlas con la estructura de la base de datos.

Share your opinion in the comment section. COMMENT NOW

Share This Article

Start Growing with Cloudways Today.

Our Clients Love us because we never compromise on these

Shahzeb Ahmed

Un creativo de día (con una taza de té) y un creativo de noche. Ahmad Kamran es redactor de contenidos estacionales y Ejecutivo de Marketing Senior en Cloudways. Puedes encontrarle en su escritorio escribiendo, elaborando estrategias o jugando. Y en caso de que no puedas encontrarle aquí, estará en la montaña o junto a la orilla del río.

×

Webinar: How to Get 100% Scores on Core Web Vitals

Join Joe Williams & Aleksandar Savkovic on 29th of March, 2021.

Do you like what you read?

Get the Latest Updates

Share Your Feedback

Please insert Content

Thank you for your feedback!

Do you like what you read?

Get the Latest Updates

Share Your Feedback

Please insert Content

Thank you for your feedback!

Want to Experience the Cloudways Platform in Its Full Glory?

Take a FREE guided tour of Cloudways and see for yourself how easily you can manage your server & apps on the leading cloud-hosting platform.

Iniciar mi recorrido