ADOdb

Database Abstraction Layer for PHP

User Tools

Site Tools


v5:userguide:learn_bind:bulkbinding
 

Bulk Binding

Some databases, Oracle in particular, offer massive performance improvements in insertion performance when used with 2 dimensional bind arrays. This technique is known as Bulk Binding.

Concept

Using our previous example, let us assume that we need to insert multiple some_table records, and that we can determine the values to be inserted prior to the execution of all the statements

Enabling Bulk Bind Support

Bulk Binding using 2D arrays is disabled by default in ADOdb. It must be deliberately enabled in the driver using the following syntax:

include 'adodb/adodb.inc.php';
 
$db = newAdoConnection('drivername');
 
$db->connect('parameters');
 
/*
* Enable bulk binding
*/
$db->bulkBind = true;

Code Modifications

Traditionally, we might write our insert statement like this:

$sql = "INSERT INTO some_table(col1,col2,col3) values ('A','B','C')";
$db->execute($sql);
$sql = "INSERT INTO some_table(col1,col2,col3) values ('D','E','F')";
$db->execute($sql);
$sql = "INSERT INTO some_table(col1,col2,col3) values ('G','H','I')";
$db->execute($sql);
$sql = "INSERT INTO some_table(col1,col2,col3) values ('J','K','L')";
$db->execute($sql);
etc......

We can also use bind variables like this, in this case we may obtain speed improvements over the previous execution:

$bindVars = array('A','B','C');
$sql = "INSERT INTO some_table(col1,col2,col3) values (?,?,?)";
$db->execute($sql,$bindVars);
$bindVars = array('D','E','F');
$sql = "INSERT INTO some_table(col1,col2,col3) values (?,?,?)";
$db->execute($sql,$bindVars);
etc......

If we now turn our $bindVars into a 2 dimensional array, we can create multiple records using a single SQL statement:

$bindVars = array(array('A','B','C'),
                  array('D','E','F'),
                  array('G','H','I'),
                  array('J','K','L'));
$sql = "INSERT INTO some_table(col1,col2,col3) values (?,?,?)";
$db->execute($sql,$bindVars)

Portable Support

In databases without Bulk Binding support, ADOdb simply iterates through the $bindVars array, and executes the prepared statement individually.

End Of Tutorial

v5/userguide/learn_bind/bulkbinding.txt · Last modified: 2016/03/23 02:09 by mnewnham