Last month, we looked at three ways you can access data files in PHP: mysql_*, mysqli_*, and the PDO API set. But there is one more option. Bet you can’t wait to see what it is.
One of the primary reasons for involving PHP in our otherwise pure RPG ILE /free world is to allow us to develop apps that have a GUI interface yet access data from our DB2 (or whatever) database.
Database access in PHP is done via an API set that contains the commands necessary to connect to your database (remember, PHP runs on the server while your database is probably local or at the very least not on the same server as PHP is running in) and then access and return the required information to the PHP program.
One of the most commonly used of these API sets is the mysqli_* functions (explored in last month’s TechTip). There is mysql_*, of course, but while that will still work, it has been officially deprecated by the Lords of PHP and so is not cool to use. The problem with mysqli_* is that it only allows access to MySQL databases, and that is a problem for us in the i world because we will probably have our information in DB2 tables. I say DB2 tables, but I’m also including the old DDS files that we have defined. But for brevity, I will just refer to DB2.
The cool way to connect to other databases, including DB2, is by using the PHP Data Objects (PDO) API set, which we discussed in some detail previously. But PDO is not the only way to go, and there are good reasons for considering other options.
There are a number of vendor-specific API sets that can be used instead of PDO (and technically this is where mysqli_* sits) that have been defined to communicate with databases such as Informix, Firebird, Ingres…and DB2. Naturally, IBM is the vendor that developed the DB2 API set, so let’s take a look at what that offers.
A Few Things
First the DB2_* API set does more than access DB2. It also provides access to Cloudscape and Apache Derby. This is actually one product, originally marketed by IBM as Cloudscape but now renamed as Apache Derby. This is an open-source project but is a full relational database management system. And that’s all I’m going to say about it.
Second, ibm_db2 is not an inherent part of PHP. Rather it is a PECL or PHP Extension that may or may not be part of your PHP stack. Fortunately, if you got your PHP from Zend, and I am guessing that most of us have, then if what you downloaded was for the IBM i, not only is ibm_db2 there but it is turned on by default. If you downloaded your PHP for Linux, Windows, or the Mac, then it is there but it is turned off. By going into Zend Server and using the GUI admin function, you can turn it on quite easily. If you got your PHP from Redhat or someone else, then you would have to check.
What It Looks Like
We may all be big code freaks, but the simple fact is that the first thing we generally want to know about a language is not what kind of weirdo things it can do but rather “what it looks like.” Fortunately, the syntax for ibm_db2_* is very similar to that of PDO or even mysql_*.
The best place to go to get familiar with the options available is the PHP.net website. They have a whole section devoted to ibm_db2 and PDO functionality. Just follow the link, and you’ll see.
So What Should You Use? PDO or ibm_db2?
Finally, it gets down to the real question. We have already seen that mysql_* is deprecated and should not be used. mysqli_* is OK to use, but it only allows you to access MySQL files, and that’s not where most of us live. So it comes to a showdown, a mano a mano confrontation between PDO and ibm_db2_*. And the question becomes, which should you use?
The answer, of course, is it depends. Seriously, did you really think there would be a hard and fast answer here? You did? Oh, that’s so sweet. Did you, like me, spend most of the holidays watching the Christmas movies on the Hallmark Channel? I personally recorded every one that has Lacey Chabert in it. (Shrug.) I like her. She’s sweet.
Anyway, depends on what? And the answer to that is, not all that much. Both options are fairly new—that is, PHP 5.0 and above—so they are both still maturing and we can expect growth for both API sets over the next few years. At the same time, both options are quite robust and reliable. Remember, they are APIs, so they both use the same PHP and C underpinnings (PHP is written in C).
Mike Pavlak from Zend feels that he has run into occasional problems with PDO requiring the database it is accessing to be under commitment control, and that may be a problem, especially for those of you who have legacy databases. But I am not sure (and he is not saying) this is enough of a reason to use ibm_db2 over PDO.
In the end, it may depend on who is going to do the coding. If you are using someone who is normally a web programmer, then they will feel more at home with PDO. And the fact is, you probably shouldn’t consider anyone who is not familiar with either PDO or ibm_db2.
So, time will tell for this but, for now, pick either one. I suggest playing craps to see who wins. It’s not scientific, but it will tell you a lot about the people on your team.