Chirurgia cranio-cerebrală minim invazivă
Tehnicile minim invazive impun utilizarea unei tehnologii ultramoderne. Endoscoapele operatorii de diverse tipuri, microscopul operator dedicat, neuronavigația, neuroelectrofiziologia, tehnicile avansate de anestezie, chirurgia cu pacientul treaz reprezintă armamentarium fără de care neurochirurgia prin "gaura cheii" nu ar fi posibilă. Folosind tehnicile de mai sus, tratăm un spectru larg de patologii cranio-cerebrale. www.neurohope.ro |
export din BD in .csv cu mysqli
Last Updated: Mar 24 2016 10:00, Started by
guttuso
, Feb 05 2016 00:13
·
0
#1
Posted 05 February 2016 - 00:13
Salutare,
Incerc de cateva zile sa export dintr-o baza de date valori intr-un csv. BD se afla in localhost si o accesez cu xampp. Versiunile sunt urmatoarele: Apache/2.4.18 (Win32) OpenSSL/1.0.2e PHP/7.0.1 Database client version: libmysql - mysqlnd 5.0.12-dev - 20150407 - $Id: 7e72f9690b1498a1bead7a637c33a831c0d2f655 $ PHP extension: mysqli Documentation PHP version: 7.0.1 Am gasit cateva exemple care sa imi exporte in .csv insa toate sunt pe mysql si nu sunt functionale pe versiunea instalata. Am fost nevoit sa optez pentru mysqli. Problema este ca ceea ce imi rezulta in urma codului totul este intr-o singura linie. Am nevoie ca fisierul .csv sa contina exact structura codului sql (cate coloane si randuri sunt selectate). Pentru a usura munca, mai jos am pus doua coduri: unul pentru a crea baza de date, tabela si a introduce cateva date, iar celalat pentru a extrage datele: <?php $servername = "localhost"; $username = "root"; $password = ""; $dbname = "myDB"; // Create connection $conn = new mysqli($servername, $username, $password); // Check connection if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } // Create database $sql = "CREATE DATABASE myDB"; if ($conn->query($sql) === TRUE) { echo "Database created successfully"; } else { echo "Error creating database: " . $conn->error; } // Create connection pt a crea tabela $conn = new mysqli($servername, $username, $password, $dbname); // Check connection if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } // sql to create table $sql = "CREATE TABLE MyGuests ( id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, firstname VARCHAR(30) NOT NULL, lastname VARCHAR(30) NOT NULL, email VARCHAR(50), reg_date TIMESTAMP )"; if ($conn->query($sql) === TRUE) { echo "Table MyGuests created successfully"; } else { echo "Error creating table: " . $conn->error; } // Create connection pt a insera valori $conn = new mysqli($servername, $username, $password, $dbname); // Check connection if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } // Insert value in db $sql = "INSERT INTO MyGuests (firstname, lastname, email) VALUES ('John', 'Doe, Mark', '[email protected]'), ('Mary', 'Moe-Johny', '[email protected]'), ('Julie', 'Dooley', '[email protected]')"; if ($conn->query($sql) === TRUE) { echo "New record created successfully"; } else { echo "Error: " . $sql . "<br>" . $conn->error; } $conn->close(); ?> <?php //header to give the order to the browser header('Content-Type: text/csv'); header('Content-Disposition: attachment;filename=export.csv'); $servername = "localhost"; $username = "root"; $password = ""; $dbname = "myDB"; // Create connection $conn = new mysqli($servername, $username, $password, $dbname); // Check connection if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } $sql = "SELECT id, firstname, lastname FROM MyGuests"; $result = $conn->query($sql); if ($result->num_rows > 0) { // output data of each row while($row = $result->fetch_assoc()) { echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>"; } } else { echo "0 results"; } $conn->close(); ?> Multumesc! |
#2
Posted 05 February 2016 - 11:25
#3
Posted 05 February 2016 - 11:33
Am folosit si <LF>\n in html exporta ok daca merg la view source, dar in csv, imi scoate unul sub altul dar intr-o singura coloana.
Tin sa precizez ca tabela contine valori unde cuvintele sunt despartite prin: , . ; / - |
#4
Posted 05 February 2016 - 13:57
Ia vezi, metoda asta nu iti merge?
$result = $db_con->query('SELECT * FROM `some_table`'); if (!$result) die('Couldn\'t fetch records'); $num_fields = mysql_num_fields($result); $headers = array(); for ($i = 0; $i < $num_fields; $i++) { $headers[] = mysql_field_name($result , $i); } $fp = fopen('php://output', 'w'); if ($fp && $result) { header('Content-Type: text/csv'); header('Content-Disposition: attachment; filename="export.csv"'); header('Pragma: no-cache'); header('Expires: 0'); fputcsv($fp, $headers); while ($row = $result->fetch_array(MYSQLI_NUM)) { fputcsv($fp, array_values($row)); } die; } |
#5
Posted 05 February 2016 - 21:48
Codul de mai sus imi returneaza Couldn't fetch records
Am acest cod care functioneaza, numai ca are o mica problema: Separarea se face prin "," insa eu am nevoie de separare prin ";" si de ce? Fisierul exportat daca il deschid cu excelul cu setarile regionale pe US, functioneaza corect, daca fisierul il deschid pe setarile regionale romanesti atunci separea in coloane nu o mai face. PC-ul il am cu setari regionale romanesti. Ce ii pot face codului sa separe prin ";" sau sa recunoasca setarile regionale ale pc-ului pe care ruleaza si sa aleaga automat separarea? <?php // call export function exportMysqlToCsv('export_csv.csv'); // export csv function exportMysqlToCsv($filename = 'export_csv.csv') { $conn = dbConnection(); // Check connection if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } $sql_query = "SELECT id, firstname, lastname FROM MyGuests"; // Gets the data from the database $result = $conn->query($sql_query); $f = fopen('php://temp', 'wt'); $first = true; while ($row = $result->fetch_assoc()) { if ($first) { fputcsv($f, array_keys($row)); $first = false; } fputcsv($f, $row); } // end while $conn->close(); $size = ftell($f); rewind($f); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Content-Length: $size"); // Output to browser with appropriate mime type, you choose ;) header("Content-type: text/x-csv"); header("Content-type: text/csv"); header("Content-type: application/csv"); header("Content-Disposition: attachment; filename=$filename"); fpassthru($f); exit; } // db connection function function dbConnection(){ $servername = "localhost"; $username = "root"; $password = ""; $dbname = "myDB"; // Create connection $conn = new mysqli($servername, $username, $password, $dbname); return $conn; } ?> Multumesc! Edited by guttuso, 05 February 2016 - 21:51. |
#6
Posted 24 March 2016 - 08:31
Ruperea de rand in CSV se face cu \r\n (intre ghilimele duble) nu cu <br /> ca in HTML.
Referitor la ; (punct si virgula), intai trebuie sa te asiguri ca textul din baza de date nu contine acest caracter. Adica, trebuie sa folosesti functia str_replace() pentru a inlocui punctul si virgula cu altceva (de exemplu cu virgula simpla). Eu nu am folosit niciodata functia fputcsv() care asteapta continutul sub forma unui array. Eu folosesc functia fwrite() care asteapta continutul sub forma unui string. Stochez continutul intr-o variabila (tot continutul) si pe urma il scriu in fisier cu functia fwrite(). $continut = "Nume;Prenume;Are mustata\r\n Bruz;Li;Nu are mustata deloc\r\n Ceak;Noris;Are mustata\r\n Arnold;Jvarzenegar;Nu are mustata\r\n Stivan;Segal;Asta are paru lung"; |
#7
Posted 24 March 2016 - 10:00
deltaT, on 24 martie 2016 - 08:31, said:
Referitor la ; (punct si virgula), intai trebuie sa te asiguri ca textul din baza de date nu contine acest caracter. Adica, trebuie sa folosesti functia str_replace() pentru a inlocui punctul si virgula cu altceva (de exemplu cu virgula simpla). Asta-i o prostie. Se folosesc ghilimele: a;b;"c cu ; si chiar ""ghilimele"" printre altele";d deltaT, on 24 martie 2016 - 08:31, said:
Eu nu am folosit niciodata functia fputcsv() care asteapta continutul sub forma unui array. Pacat, chiar in documentatia iei iti arata cum trateaza automat ghilemele ca sa nu-ti mai bati capul. deltaT, on 24 martie 2016 - 08:31, said:
Stochez continutul intr-o variabila (tot continutul) si pe urma il scriu in fisier cu functia fwrite(). Cand ai mult continut incepe sa aibe tot mai mult sens scrierea pe masura ce ai datele, nu incarcarea tuturor in memorie. |
Anunturi
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users