2010-10-31 14 views
6

Vorrei salvare l'output da "Select * FROM table1" in console a un file in PHP.MYSQL Selezionare il file

Quale sarebbe il modo più efficiente per farlo in PHP?

Modifica: Vorrei che l'output fosse come il tipo nella console, ad esempio.

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

Inoltre, pensavo che il codice PHP dovrebbe essere "exec (comando mysql che sto cercando)". Mi rendo conto che mysql_fetch_array è lento, e sto cercando un output semplice ... quindi dovrebbe essere possibile farlo in qualche modo dalla console. (Grazie per le risposte finora!)

+0

Posso chiedere perché è necessario formattato come la console? Ciò rende più difficile l'importazione. Per cosa userete l'output? – webbiedave

+0

Questo non è veramente per l'importazione ... questo è per la stampa/visualizzazione. Questo output verrà archiviato in un file di testo che può essere visualizzato praticamente da qualsiasi browser/larghezza di banda ridotta nel caso in cui il mio selezionatore di tabelle html non funzioni sul browser dell'utente, o che disponga di una connessione di larghezza di banda scarsa/scarsa. Inoltre, stampa molto primitiva ma sufficiente. – Eugene

+1

Qualcosa da considerare è che un file CSV è un formato letto dalla maggior parte dei programmi. Ciò che manca nella leggibilità immediata, può essere caricato in Excel o in altri software di foglio di calcolo che forniscono la possibilità di filtrare ulteriormente, nascondere le colonne da visibilità, ordinamento e rappresentazione grafica. –

risposta

9

si potrebbe usare MySQL's INTO OUTFILE syntax - questo produrrebbe una virgola file di testo valori separati (CSV):

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

autorizzazioni per scrivere i file per l'ubicazione specificata necessità di essere a posto.

+1

Inoltre il file non può esistere già. MySQL non sovrascriverà un file esistente come precauzione di sicurezza. –

+0

Giusto per sottolineare che scrivere su/tmp/è l'approccio meno problematico. Ho provato a scrivere in una posizione diversa e non è riuscito nonostante abbia dato la proprietà dell'utente mysql. – KalenGi

3

In quale formato? Se si desidera loro scheda separata, si può usare qualcosa di simile:

$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, in CSV:

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

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

fclose($fp); 

Oppure, come altri hanno notato, utilizzare proprio OUTFILE di MySQL, che non conoscevo. :)