2016-12-13 6 views
0

私はループを介して挿入していますが、残念ながらデータの一部しか挿入せず、いくつかを無視しているようです。Insertを使ったループ - PHP Postgresの挿入

私はファイルの内容を読み、PHPを使用してそれらをpostgresデータベースに挿入しています。

以下のコードを参照してください。

$source='/Users/gsarfo/AVEC_ETL/TCCDec052016OSU.DAT'; 

$lines=file($source); 

$len =sizeof($lines); 

$connec = new PDO("pgsql:host=$dbhost;dbname=$dbname", $dbuser, $dbpwd); 

$ins=$connec->query('truncate table tbl_naaccr_staging'); 

try { 

    for ($x = 0; $x < $len; $x++) { 
     $a1=substr($lines[$x],146,9); 
     $a2=substr($lines[$x],2182,9); 
     $a3=substr($lines[$x],192,3); 
     $connec->beginTransaction(); 

     $sql2=$connec->prepare("INSERT INTO tbl_naaccr_staging 
           (addr,name, email) VALUES (?, ?, ?"); 

     $sql2->execute(array($a1, $a2, $a3)); 
     $connec->commit();  
    } 
    $res=$connec->query($sql) ; 
} 

catch (PDOException $e) { 
    echo "Error : " . $e->getMessage() . "<br/>"; 
    die(); 
} 

if ($sql2) 
{echo 'success';} 
?> 
+0

すべてのことに空白を挿入する前に、文字列を一掃助けたように、文字列内のエスケープ文字が挿入されることにしました – RiggsFolly

答えて

0

、問題はpg_escape_stringは、任意のより読みやすいコードを作成しません

1

私はそれが何かを挿入する方法を見ていない!

この行は、それはあなたが起動しなかった場合に何が起こるかであるすべての更新を、コミットしても、あなたのトランザクションはあまり意味がありません

$sql2=$connec->prepare("INSERT INTO tbl_naaccr_staging 
         (addr,name, email) VALUES (?, ?, ?"); 
                 ^^ here 

$sql2=$connec->prepare("INSERT INTO tbl_naaccr_staging 
         (addr,name, email) VALUES (?, ?, ?)"); 

にそれを修正して間違っていますトランザクション。だから多分これは賢明であり、すべてまたは何もないシナリオを達成するでしょう

さらに、準備は何度も再利用できるので、ループからもそれを移動すると、あなたのスクリプトはより速く実行されます。それは働いていた

try { 

    $connec->beginTransaction(); 

    // move this out of the loop 
    $sql2=$connec->prepare("INSERT INTO tbl_naaccr_staging 
          (addr,name, email) VALUES (?, ?, ?)"); 

    for ($x = 0; $x < $len; $x++) { 
     $a1=substr($lines[$x],146,9); 
     $a2=substr($lines[$x],2182,9); 
     $a3=substr($lines[$x],192,3); 

     $sql2->execute(array($a1, $a2, $a3)); 
    } 
    $connec->commit(); 

    // I do not see a `$sql` variable so this query seems to have no function 
    //$res=$connec->query($sql) ; 
} 

catch (PDOException $e) { 
    $connec->rollback();  

    echo "Error : " . $e->getMessage() . "<br/>"; 
    die(); 
} 
関連する問題