postgresql — цикл по вставкам — PHP Postgres Insert

Я делаю вставки через цикл, к сожалению, кажется, что вставляются только некоторые данные и игнорируются некоторые.

Я читаю содержимое файла и вставляю его в базу данных postgres с помощью PHP.

Смотрите мой код ниже.

$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

Решение

Я не понимаю, как это будет вставлять что-нибудь!

Эта строка неверна

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

Другие решения

Это работало, проблема была из-за неэкранированных символов в вставляемых строках, поэтому pg_escape_string помог очистить строку перед вставкой

0

По вопросам рекламы [email protected]