Hi,

Саша Стаменковић wrote:
> Still, I'm not really informed about differences between mysqli
> and pdo. When you work with Zend_Db, you can choose between this
> 2 with just one config param.
> 
> I would like to know which one is faster?

This question will be asked every month ;-)

You should first understand, what's the difference between these two (well, 
there are 3 "adapters", in PHP 5.3 there you can choose between 4 "adapters") 
are. To do that, have a look at the native PHP stack, how these adapters are 
implemented and what they do.

PDO for example is just another layer, which should "abstract" the database 
access (that's why PDO supports different DBEs and mysql* only MySql ;-)).

In general: Everything which is abstracting something will be slower than a 
native implementation of the same thing, because of the "overhead". But you 
should benefit from a great abstraction, so abstraction isn't bad at all ;-)

So when you are using Zend_Db_*, you are already using some kind of 
"abstraction", so you don't really need another abstraction, some PHP database 
API is offering to you.

In theory, PDO should be much slower than ext/mysql or mysqli is. For example 
PDO will prepare everything. But the nature of a PHP script is, that it will 
die after each request, so a prepared statement can only be used while the 
request, which prepared the statement, is active. So preparing a simple "SELECT 
* FROM articles WHERE isPublished = 1 ORDER BY date DESC" doesn't really makes 
sense, because this query will just be executed once in the request.

If you would prepare a select statement and execute it more than once with 
different parameters in one request, you would benefit from preparation (well, 
only when preparation is done on server-side, client-side prepared statements 
are another kind of abstraction and therefore aren't as good as server-side 
prepared statements).

So PDO is bad, isn't it? ;)

No! If you don't use any kind of abstraction like Zend_Db* is offering to you, 
the client-side prepared statements are offering you some kind of security. 
Binding parameters to a query makes them secure against known SQL injections.
At least other DBEs just need to implement the PDO interface to support PHP. 
They don't need to re-invent everything.

Ergo:
When you are using Zend_Db*, I would recommend to use ext/mysql or mysqli, 
because it's faster and you are already using a abstracted DBA.

If you don't use a abstracted DBA, I would recommend to use PDO.

In a normal application, you shouldn't notice any differences.

Only on high traffic applications you would notice differences. But in high 
traffic applications, you won't use Zend_Db*, because Zend_Db* won't support 
the DBE specific (optimized) commands, just "generalized" commands, which will 
work across all supported adapters. ;-)


P.s.: Ulf Wendel (from MySQL) wrote about that topic some month ago in this 
list: 
<http://zend-framework-community.634137.n4.nabble.com/PDO-or-Mysqli-td1556941.html>


-- 
Regards,
Thomas


Reply via email to