通过插入物循环-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';}
?>

我看不到这将如何插入任何东西!

这条线不正确

$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 (?, ?, ?)"); 

您的交易也没有多大意义,因为它会提交所有更新,这就是如果您没有开始交易,将会发生什么。因此,也许这是明智的,并且将实现全部或全部senario

此外,可以将准备时间重复多次,因此也可以从循环中移动,您也会发现脚本运行更快。

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(); 
} 

它有效,问题是由于插入字符串中的未示例字符引起的,因此PG_ESCAPE_STRING有助于在插入之前清理字符串

相关内容

  • 没有找到相关文章

最新更新