簡體   English   中英

使用LOAD DATA LOCAL INFILE,Transaction和Commit將記錄從文件插入到數據庫時,如何獲取行號?

[英]How to get Row Number when insert records from File to DB with LOAD DATA LOCAL INFILE, Transaction and Commit?

使用LOAD DATA LOCAL INFILE,Transaction和Commit將記錄從文件插入到數據庫時,如何獲取行號?

但是,在存在var dump的情況下,只能得到truefalse (失敗)

聲明:

LOAD DATA LOCAL INFILE 'file.csv' INTO TABLE tablename 
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY ' ' ( `Col1`, `Col2`, `Col3`)

腳本:

public function PDO_UL_IUPD($dbUsing, $stmtpre) {
        $started = microtime(true);
        $DB      = [];
        $val     = [];
        $conn    = new PDO(
            "mysql:host=" . DB_HOST . ";dbname=" . DB_PRE . "" . $dbUsing . "",
            DB_USERNAME,
            DB_PASS,
            array(
                PDO::MYSQL_ATTR_LOCAL_INFILE       => TRUE,
                PDO::MYSQL_ATTR_INIT_COMMAND       => "SET NAMES UTF8",
                PDO::ATTR_EMULATE_PREPARES         => FALSE,
                PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => TRUE,
                PDO::ATTR_ERRMODE                  => PDO::ERRMODE_EXCEPTION,
            ));
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        try {
            $conn->beginTransaction();
            $conn->exec("set names utf8");
            $count  = 0;
            $RowReg = 0;
            // our SQL statements
            foreach ($stmtpre as $stmt) {
                $count++;
                $conn->exec($stmt);
            }
            $RowReg = $conn->commit();
            echo var_dump($RowReg);
            $DB['SMG'] = "Correct Execution, a csv file has been dumped.<br><br>";
            $DB['R']   = true;
        } catch (PDOException $e) {
            $DB['SMG'] = "Error: " . $e->getMessage();
            $DB['R']   = false;
        }
        return $DB;
    }

Update1腳本:

試圖從EXEC獲取行號返回0

腳本:

public function PDO_UL_IUPD($dbUsing, $stmtpre) {
        $started = microtime(true);
        $DB      = [];
        $val     = [];
        $conn    = new PDO(
            "mysql:host=" . DB_HOST . ";dbname=" . DB_PRE . "" . $dbUsing . "",
            DB_USERNAME,
            DB_PASS,
            array(
                PDO::MYSQL_ATTR_LOCAL_INFILE       => TRUE,
                PDO::MYSQL_ATTR_INIT_COMMAND       => "SET NAMES UTF8",
                PDO::ATTR_EMULATE_PREPARES         => FALSE,
                PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => TRUE,
                PDO::ATTR_ERRMODE                  => PDO::ERRMODE_EXCEPTION,
            ));
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $conn->beginTransaction();
        try {
            $conn->exec("set names utf8");
            $count  = 0;
            $RowReg=0;
            $cReg=0;
            // our SQL statements
            foreach ($stmtpre as $stmt) {
                //echo $stmt."<br><br><br>";
                $count++;
                $cReg=$conn->exec($stmt);
                $RowReg=$RowReg+$cReg;
            }
            $conn->commit();
            echo var_dump($RowReg);
            $DB['SMG'] = "Correct Execution, a csv file has been dumped.<br><br><br>";
            $DB['R']   = true;
        } catch (PDOException $e) {
            $DB['SMG'] = "Error en Tiempo de Ejecucion: " . $e->getMessage();
            $DB['R']   = false;
        }
        return $DB;
    }

更新2語句:

添加此返回1

SET @row=0;
LOAD DATA LOCAL INFILE 'file.csv' INTO TABLE tablename 
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY ' ' ( `Col1`, `Col2`, `Col3`)
SET file_line_no = @row:=@row+1;

解決:

該腳本已被完全支持:

LOAD DATA LOCAL INFILE 'file.csv' INTO TABLE tablename 
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY ' ' ( `Col1`, `Col2`, `Col3`)

但是我將其與其他查詢合並,例如:

DELETE FROM tablename WHERE date BETWEEN '$Date1' AND '$Date2';
ALTER TABLE tbalename AUTO_INCREMENT = 1;
LOAD DATA LOCAL INFILE 'file.csv' INTO TABLE tablename 
    FIELDS TERMINATED BY ',' 
    LINES TERMINATED BY ' ' ( `Col1`, `Col2`, `Col3`);

這是錯誤的,因為$PDO->exec()無法返回受影響的表或行的數量。

代替它,要解決我需要經過一個數組的問題,因為我的腳本像這樣支持它:

$stmtpre[1] = "DELETE FROM tablename WHERE date BETWEEN '$Date1' AND '$Date2';";
$stmtpre[2] = "ALTER TABLE tbalename AUTO_INCREMENT = 1;";
$stmtpre[3] = "LOAD DATA LOCAL INFILE 'file.csv' INTO TABLE tablename 
        FIELDS TERMINATED BY ',' 
        LINES TERMINATED BY ' ' ( `Col1`, `Col2`, `Col3`);";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM