Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Rostschreck Lidl

Si noi suntem Florin Piersic? / J...

Rascumparare euroobligatiuni (pri...

Detartraj partial slatina
 Cu ce pot izola fonic peretii pen...

Telefon cu senzor compass BUN

Blocare google chrome cu master p...

Instalare Siemens NX pe macbook
 sfat achizitie telefon pana in 20...

Stoc Smart CAM TV

Ce corzi de chitara sa cumpar?

Galaxy A54 compass defect?
 Cum conectez un switch WIFI la 60...

Cumparare AC Gree [Buget maxim 30...

Telekom

Ce e aratarea asta ?
 

export din BD in .csv cu mysqli

- - - - -
  • Please log in to reply
6 replies to this topic

#1
guttuso

guttuso

    Member

  • Grup: Members
  • Posts: 262
  • Înscris: 31.03.2010
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
jobist

jobist

    Senior Member

  • Grup: Senior Members
  • Posts: 2,746
  • Înscris: 23.04.2010

View Postguttuso, on 05 februarie 2016 - 00:13, said:

Problema este ca ceea ce imi rezulta in urma codului totul este intr-o singura linie.
Nu cumva separatorul este <LF> în loc de clasicul <CR><LF> din platforma m$ ?

#3
guttuso

guttuso

    Member

  • Grup: Members
  • Posts: 262
  • Înscris: 31.03.2010
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
Kriogen

Kriogen

    Junior Member

  • Grup: Members
  • Posts: 185
  • Înscris: 23.04.2014
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
guttuso

guttuso

    Member

  • Grup: Members
  • Posts: 262
  • Înscris: 31.03.2010
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
deltaT

deltaT

    Junior Member

  • Grup: Members
  • Posts: 40
  • Înscris: 23.05.2008
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
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,254
  • Înscris: 24.02.2007

View PostdeltaT, 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

View PostdeltaT, 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.

View PostdeltaT, 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

Chirurgia cranio-cerebrală minim invazivă 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

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate