Question: I have about 14000 rows of comma separated values that I am trying to insert into a sqlite table using PHP PDO, like so:

```
<?php
// create a PDO object
$dbh = new PDO('sqlite:mydb.sdb');

$lines = file('/csv/file.txt'); // import lines as array
foreach ($lines as $line) {
    $line_array = (','$line); // create an array of comma-separated values in each line
    $values = '';
    foreach ($line_array as $l) {
        $values .= "'$l', ";
    }
    substr($values,-2,0); // get rid of the last comma and whitespace
    $query = "insert into sqlite_table values ($values)"; // plug the value into a query statement
    $dbh->query($query); // run the query
}

?>

```

This query takes a long time, and to run it without interuption, I would have to use PHP-CLI. 
Is there a better (faster) way to do this?

Answer: 
Start a transaction before the loop and commit it after the loop  

the way your code is working now, it starts a transaction on every insert
From [SQLlite FAQ](http://www.sqlite.org/faq.html) :

> 
> Transaction speed is limited by disk drive speed because (by default)
>  SQLite actually waits until the data
>  really is safely stored on the disk
>  surface before the transaction is
>  complete. That way, if you suddenly
>  lose power or if your OS crashes, your
>  data is still safe. For details, read
>  about atomic commit in SQLite..
>  [...]
> 
> 
> Another option is to run PRAGMA synchronous=OFF. This command will
>  cause SQLite to not wait on data to
>  reach the disk surface, which will
>  make write operations appear to be
>  much faster. But if you lose power in
>  the middle of a transaction, your
>  database file might go corrupt.
> 
> 
> 

I'd say this last paragraph is what you need.

**EDIT**: No sure about this, but I believe using sqlite\_unbuffered\_query() should do the trick.