Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

198
Vistas
Consultar desde la base de datos y escribir el resultado en un archivo de texto

Tengo una consulta que selecciona todo de la tabla de la base de datos y lo escribe en un archivo de texto. Si el estado es pequeño (digamos un máximo de 200k filas), el código aún funciona y lo escribe en el archivo de texto. El problema surge cuando tengo un estado que tiene 2 millones de filas cuando se consulta, luego también está el hecho de que la tabla tiene 64 columnas.

Aquí hay una parte del código:

crear y abrir archivo

 $file = "file2.txt"; $fOpen = fopen($file, "a"); // Open file, write and append $qry = "SELECT * FROM tbl_two WHERE STE='48'"; $res = mysqli_query($con, $qry); if(!$res) { echo "No data record" . "<br/>"; exit; } $num_res =mysqli_num_rows($res); for ($i=0; $i<=$num_res; $i++) { $row = mysqli_fetch_assoc ($res); $STATE = (trim($row['STATE'] === "") ? " " : $row['STATE']); $CTY = (trim($row['CTY']=== "") ? " " : $row['CTY']); $ST = (trim($row['ST']=== "") ? " " : $row['ST']); $BLK = (trim($row['BLK']=== "") ? " " : $row['BLK']); .... .... //64th column $data = "$STATE$CTY$ST$BLK(to the 64th variable)\r\n"; fwrite($f,$data); } fclose($f);

Intenté poner un límite a la consulta:

 $qry = "SELECT * FROM tbl_two WHERE STE='48' LIMIT 200000";

El problema es que solo escribe hasta la línea 200k y no escribe las líneas restantes de 1,8 millones.

Si no pongo un límite a la consulta, se encuentra con el error Out of memory .... . TIA para cualquier tipo de sugerencias.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Primero debe usar la consulta de búfer para obtener los datos Léalo

Las consultas utilizan el modo de búfer de forma predeterminada. Esto significa que los resultados de la consulta se transfieren inmediatamente del servidor MySQL a PHP y luego se guardan en la memoria del proceso PHP.

Las consultas MySQL sin búfer ejecutan la consulta y luego devuelven un recurso mientras los datos aún están esperando en el servidor MySQL para ser recuperados. Esto usa menos memoria en el lado de PHP, pero puede aumentar la carga en el servidor. A menos que el conjunto de resultados completo se obtenga del servidor, no se pueden enviar más consultas a través de la misma conexión. Las consultas sin búfer también se pueden denominar "resultado de uso".

NOTA: las consultas almacenadas en búfer deben usarse en los casos en los que espera solo un conjunto de resultados limitado o necesita saber la cantidad de filas devueltas antes de leer todas las filas. El modo sin búfer debe usarse cuando espera resultados más grandes.

También optimice la matriz, intente poner la variable directamente y usted mientras se repite solo

 pdo = new PDO("mysql:host=localhost;dbname=world", 'my_user', 'my_pass'); $pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false); $uresult = $pdo->query("SELECT * FROM tbl_two WHERE STE='48' LIMIT 200000"); if ($uresult) { $lineno = 0; while ($row = $uresult->fetch(PDO::FETCH_ASSOC)) { echo $row['Name'] . PHP_EOL; // write value in text file $lineno++; } }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda