2010-10-31 13 views
6

Me gustaría guardar el resultado de "Seleccionar * FROM tabla1" en la consola en un archivo en PHP.MYSQL Seleccionar en el archivo

¿Cuál sería la forma más eficiente de hacer esto en php?

Edit: Me gustaría que la salida sea como el tipo en la consola, es decir.

+--------+--------+ 
| thing1 | thing2 | 
+--------+--------+ 
| item1a | item2a | 
| item1b | item2b | 
+--------+--------+ 

Además, estaba pensando que el código PHP debe ser "exec (comando de MySQL, que estoy buscando)". Tengo entendido que mysql_fetch_array es lento y estoy buscando un resultado simple ... por lo que debería ser posible hacerlo de alguna manera desde la consola. (¡Gracias por las respuestas hasta ahora!)

+0

¿Puedo preguntar por qué lo necesita formateado como la consola? Eso hace que sea más difícil de importar. ¿Para qué vas a usar la salida? – webbiedave

+0

Esto no es realmente para importar ... esto es para imprimir/ver. Esta salida se almacenará en un archivo de texto que puede verse prácticamente en cualquier navegador/ancho de banda bajo en caso de que mi clasificador de tablas html más elegante no funcione en el navegador del usuario, o que tengan una conexión de banda ancha mala/mala. Además, impresión muy primitiva pero suficiente. – Eugene

+1

Algo a considerar es que un archivo CSV es un formato leído por la mayoría de los programas. Lo que falta en legibilidad inmediata, se puede cargar en Excel u otro software de hoja de cálculo que proporcionaría la capacidad de filtrar aún más, ocultar columnas de visibilidad, clasificación y representación gráfica. –

Respuesta

9

usted podría utilizar MySQL's INTO OUTFILE syntax - esto produciría un valor separados (CSV) archivo de texto coma:

SELECT * 
    INTO OUTFILE '/tmp/result.txt' 
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' 
LINES TERMINATED BY '\n' 
    FROM YOUR_TABLE; 

permisos para escribir archivos en la ubicación especificada necesidad de estar en su lugar.

+1

Además, el archivo no puede existir. MySQL no sobrescribirá un archivo existente como precaución de seguridad. –

+0

Solo para enfatizar que escribir en/tmp/es el enfoque menos problemático. Traté de escribir en una ubicación diferente y falló a pesar de dar la propiedad del usuario mysql. – KalenGi

3

¿En qué formato? Si usted quiere que ellos pestaña separada, se puede usar algo como esto:

$r = mysql_query("SELECT * FROM table1"); 
$str = ''; 

while($row = mysql_fetch_assoc($r)) { 
    $str .= implode("\t", $row)."\n"; 
} 

file_put_contents('table1.txt', $str); 

O, en CSV:

$r = mysql_query("SELECT * FROM table1");  
$fp = fopen('table1.csv', 'w'); 

while($row = mysql_fetch_assoc($r)) { 
    fputcsv($fp, $row); 
} 

fclose($fp); 

O, como otros han dicho, usar el propio OUTFILE de MySQL, que yo desconocía. :)