Open Source RDBMS - Seamless, Scalable, Stable and Free

한국어 | Login |Register

Current Events
Join our developers event to win one of the valuable prizes!
posted 4 years ago
viewed 19965 times
Share this article

New CUBRID PHP and PDO drivers now support altHosts and loadBalancing


We are happy to announce that we have updated our CUBRID PHP and PDO drivers to roll out loads of improvements and bug fixes. The latest releases can be installed from  CUBRID and PDO_CUBRID PECL packages. Below is a list of improvements which landed in cubrid- and pdo_cubrid- versions.

  • Connection parameters support.
  • Improved CUBRID database sharding support.
  • Collection data types support.
  • Removed dynamic CUBRID CCI API dependency.
  • Improved LOB data support.
  • Improved documentation.
  • Other minor improvements.

Connection parameters support

[APIS-580] Now both PHP and PDO drivers support all connection parameters supported by the underlying CCI API. When connecting to a CUBRID Broker, you can pass a list of various options like a list of alternative hosts which can be used either in HA environment to provide seamless failover functionality or in non-HA environment to provide driver level load balancing functionality. These are espectially useful in CUBRID SHARD environment.

Here is an example in PHP:

$conn = cubrid_connect($host, $port, $db, $user, $password, $createNewLink, "altHosts=,");

Alternatively, connect with a URL:

$conn = cubrid_connect_with_url("CUBRID:localhost:33000:demodb:user:password:?login_timeout=100&altHosts=,");

Or in PDO:

$db = new PDO("cubrid:dbname=demodb;host=localhost;port=33000", $user, $password, array("altHosts"=>"","rcTime"=>"600"));

Improved CUBRID database sharding support

We fixed a bug in PHP driver [APIS-562] which prevented DELETE queries from being executed by cubrid_execute() function in CUBRID SHARD environment.

Collection data types support

[APIS-555] Now PHP and PDO drivers provide native support for CUBRID collection data types like SET, MULTISET, LIST and SEQUENCE. There are multiple ways to insert an array of values into a collection data type column. 

Inserting an array of integers

$sql_stmt_insert = "INSERT INTO set_tbl_int VALUES (?);";
$data = array(123,456,789);

$stmt = $dbh->prepare($sql_stmt_insert);

// Provide the data type of elements as a third parameter.
$ret = $stmt->bindParam(1, $data, PDO::PARAM_INT);

$ret = $stmt->execute();

Inserting an array of strings

To insert an array of strings, set the PDO data type to NULL. This will tell PDO not to perform any conversion.

$sql_stmt_insert = "INSERT INTO set_tbl_str VALUES (?);";
$data = array("abc","def","ghi");

$stmt = $cubrid_pdo->prepare($sql_stmt_insert);

// When inserting an array of string, set the data type to NULL.
// This will tell PDO not to perform any conversion.
$ret = $stmt->bindParam(1, $data, PDO::PARAM_NULL);

$ret = $stmt->execute();

Alternatively, setting integer as a PDO data type will work as well. PDO will still keep the values as strings.

$sql_stmt_insert = "INSERT INTO set_tbl_str VALUES (?);";
$data = array("abc","def","ghi");

$stmt = $cubrid_pdo->prepare($sql_stmt_insert);

$ret = $stmt->bindParam(1, $data, PDO::PARAM_INT);

$ret = $stmt->execute();

The third way to insert an array of string is to specify the CUBRID data type in the fifth parameter as shown below.

$sql_stmt_insert = "INSERT INTO set_tbl_str VALUES (?);";
$data = array("abc","def","ghi");

$stmt = $cubrid_pdo->prepare($sql_stmt_insert);

$ret = $stmt->bindParam(1, $data, 0, 0, "varchar");

$ret = $stmt->execute();
  1. Notice that PDO::PARAM_ARRAY cannot be used because PDO does not support it.
  2. PDO::PARAM_STR also should not be used because PDO will throw an error that an array to string conversion is not allowed.

Removed dynamic CUBRID CCI API dependency

[APIS-559] Since this release CUBRID PHP and PDO drivers do not have dynamic dependency on CUBRID CCI driver. Instead we now compile PHP and PDO driver together with CCI source code. This allows to install PHP and PDO drivers on environments where CUBRID Server is not installed. This is one more step closer to provide a platform independent PHP and PDO drivers.

Improved LOB data support

  • [APIS-556] - We fixed a LOB related bug in cubrid_fetch() function which tried to allocate 4 billion bytes.
  • [APIS-364] - Also fixed a bug which affected Windows users when a user tried to export LOB data from a database which was successfully imported from a fie prior to export.

Documentation improvements

  • [APIS-553] - Manual page for cubrid_close_request() should be edited.
  • [APIS-554] - cubrid_connect_with_url() example does not have updated connection url.
  • [APIS-557] - cubrid_lob2_seek64 example does not work properly.
  • [APIS-558] - incorrect documentation.
  • [APIS-584] - Some 'Example' codes about the driver in are somewhat confused.
  • [APIS-596] - The 'test_lob' table which is not created initially may lead some misunderstandings.

Other minor improvements

  • [APIS-120] - Return value is not correct when passing a date parameter to cubrid_bind method.
  • [APIS-121] - Return value is not false when passing a invalid time to cubrid_bind method.
  • [APIS-358] - Create table failed when using default timestamp '2038-01-19 12:14:07'.
  • [APIS-513] - CAS error code is not expected in Windows.
  • [APIS-560] - Cannot load PHP API in CentOS 5.6: undefined symbol: pthread_create in Unknown on line 0.
  • [APIS-583] - The cubrid_get_class_name() function throws a warning if select data from a system table.
  • [APIS-586] - cubrid_bind() doesn't work properly when insert bit data.
  • [APIS-587] - cubrid_bind() doesn't support select bit data from a prepared statement.
  • [APIS-549] - Warnings during PHP/PDO API build via PECL.

What's next

In the next version we will focus on improving Mac OS X support. The current release was a preparation for this. After removing the dynamic CCI dependency we can easily compile our PHP ad PDO drivers on Mac OS X as well.

Stay tuned for further updates!

comments powered by Disqus