|
|
|
fgetcsv() ถ้าเป็นไฟล์ขนาดใหญ่จะทำงัยคับ รบกวนผู้รู้หน่อยคับผม |
|
|
|
|
|
|
|
ใหญ่นี่กี่ MB ครับ
|
|
|
|
|
Date :
2012-09-17 20:28:40 |
By :
mr.win |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
จำนวน field มากกว่า 500 ขึ้นไปคับพี่วิน
Code (PHP)
private function importDataAmazonCsv($tempfile, $tableid) {
$handle = fopen($tempfile, 'rb');
echo $fsize = filesize($tempfile);
$i = 0;
$newfileSize = $fsize * 1024;
$tmpsql = $this->setSqlAction($tableid);
while (!feof($handle)) {
while (($fileop = fgetcsv($handle, $newfileSize, ',')) !== false) {
$query = $this->link->prepare($tmpsql);
$tmpfileop = count($fileop);
$num = 0;
$tmpvalue = array();
while ($num <= ($tmpfileop - 1)) {
array_push($tmpvalue, $fileop[$num]);
$num++;
}
if ($i != 0)
$query->execute($tmpvalue);
$i++;
}
}
}
|
ประวัติการแก้ไข 2012-09-18 09:58:44
|
|
|
|
Date :
2012-09-18 09:53:11 |
By :
neeo_man |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Code (PHP)
private function importDataAmazonCsv($tempfile, $tableid) {
$handle = fopen($tempfile, 'rb');
echo $fsize = filesize($tempfile);
$i = 0;
$newfileSize = $fsize * 1024;
$tmpsql = $this->setSqlAction($tableid);
while (!feof($handle)) {
while (($fileop = fgetcsv($handle, $newfileSize, ',')) !== false) {
$query = $this->link->prepare($tmpsql);
$tmpfileop = count($fileop);
$num = 0;
$tmpvalue = array();
while ($num <= ($tmpfileop - 1)) {
array_push($tmpvalue, $fileop[$num]);
$num++;
}
if ($i != 0)
$query->execute($tmpvalue);
$i++;
}
}
}
|
ประวัติการแก้ไข 2012-09-18 09:58:08
|
|
|
|
Date :
2012-09-18 09:56:09 |
By :
neeo_man |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
มันใหญ่เกินไปครับ ให้เข้าใจว่ามันจะต้องใช้ Memory จำนวนมหาศาลครับ
|
|
|
|
|
Date :
2012-09-18 10:19:31 |
By :
mr.win |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
พี่วินคับ
ตอนแรกผมใช้วิธี ก็คือเขียนคำสั่ง sql แบบนี้คับ
$sql = "field1,field2,field3,field4,field5,.........field500,..............."; (เขียนเยอะมากคับ)
วิธีนี้ มันบันทึกข้อมูลได้คับผม แต่พอผมเปลี่ยนมาเป็นวิธีทีให้มันไปอ่านชื่อ field ออกมาแล้วเอามาสร้างเป็น sql มันกับไม่ยอมบันทึกข้อมูลให้ผมคับ ก็เลยแปลกใจว่ามันเกิดอะไรขึ้นคับผม หรือว่ามันอาจจะเกี่ยวกับการ gen คำสั่ง sql ของผมหรือปาวคับ แต่ว่า table อื่นๆ ก็ยังใช้ได้นะคับ ผมก็เลยยิ่งไม่เข้าใจไปกันใหญ่คับ
Code (PHP)
private function setSqlAction($tablename) {// gen SQL
$sql = "";
$sql.="INSERT INTO $tablename (";
$tmpField = $this->getFieldName($tablename);
$sql.=implode(',', $tmpField);
$sql.=") VALUES(";
$v = count(explode(",", $sql));
for ($i = 0; $i < $v; $i++) {
$sql.= "?,";
}
$tmp = $sql;
$tmp = substr(substr($tmp, 0), 0, -1);
$sql = $tmp;
$sql.=")";
return $sql;
}
private function getFieldName($table) {
$query = $this->link->prepare("DESCRIBE $table");
$query->execute();
$table_fields = $query->fetchAll(PDO::FETCH_COLUMN);
return $table_fields;
}
|
ประวัติการแก้ไข 2012-09-18 13:09:39
|
|
|
|
Date :
2012-09-18 12:43:09 |
By :
neeo_man |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
update คับ ทำได้แล้วคับผม พี่วิน
|
|
|
|
|
Date :
2012-09-19 18:00:08 |
By :
neeo_man |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 03
|