MySQL is the very popular open-source relational database management system which is used by popular high-volume websites such as Wikipedia, Google, Facebook, YouTube and Twitter as well as many others across the globe. This original version of MySQL is low-cost, easy to use, install and integrate, is flexible across many different platforms and is very reliable and scalable and performs well. As a result, over 100 millions copies of the software have been downloaded or distributed throughout its existence.
The follow up to MySQL, MySQLi is one of several options used to interact with and utilize the special features of MySQL. Like the “i” at the end of the name suggests, it is an enhanced and improved PHP interface to the original MySQL. Some of the improvements to the system include more interfacing capabilities, support for prepared and multiple statements as well as enhanced debugging support. MySQLi is not an alternative to MySQL but a method for interacting with it.
What’s Different About MySQLi?
As mentioned before, MySQLi is one of three ways to interact with a MySQL database server. The other two are the MySQL Extension, which deals with older versions of MySQL, and the simpler, more portable PHP Data Objects (PDO). Like the Extension, the new MySQLi was designed to better and more fully interact with MySQL, with the new and improved one dealing with MySQL versions 4.1.3, as well as newer editions and can be found in PHP versions 5 and later. Here are some of the differences between the original MySQL and the improved MySQLi.
- Dual object-oriented (OO) and procedural interfaces – This versatility was absent in previous version of MySQL. The procedural interface may be preferred by users migrating over from the old MySQL system, with function names differing only in prefix (simply add an “i). The object-oriented interface shows functions grouped by their purpose, making for an easier start. The two interfaces perform similarly with user preference being the deciding factor between the two.
- Support for prepared statements – Bringing MySQL/PHP up to date with other platforms, MySQLi is able to pass a query without any data to MySQL. After binding the parameters, the query is executed. This process results in increased performance, convenience for the developer and more security by preventing SQL injection attacks.
- Ability to process multiple statements – The ability to string together multiple statements in one statement string reduces client-server round trips. The individual statements that make up the string are separated by semicolons, then the results of each executed statement are fetched.
- Embedded server support – MySQLi offers methods of connecting and manipulating embedded MySQL server libraries.
- Enhanced debugging capabilities – Users are able to enter debugging queries into the system which results in a more efficient development process. An example of MySQLi debugging query would read: mysqli_debug(“d:t:o,/tmp/client.trace”)
- Support for ability to use transactions – Using transactions allows you to input a group of queries that execute but do not save their effects in the database. This is helpful if you have multiple inserts that rely on each other, if one fails, the others can be rolled back and none of the data is inserted.
The Pros and Cons of the Changes
While MySQLi has its advantages in interfacing with MySQL, the other options sometimes have a leg up and may be a better fit for the user, depending on personal preference and convenience. Like most things, the option that works best depends on whom you ask and what situation you need MySQLi or its competitors for.
- MySQLi’s interface is similar to the older MySQL interface. This versatility in using both object-oriented and procedural formats makes it easier for users of the older system to make the change to the improved one, as well as facilitating use for people that are completely new to the system. Using the old system, the user would enter a function looking like this: mysql_connect(), using the new system, this old code can be updated simply by changing the function to this: mysqli_connect().
- MySQLi has good support and maintenance, making the transition to and use of the new system safe and secure.
- The user has the ability to utilize new features available in the newest versions of MySQL servers. This is one of the biggest advantages of MySQLi. Other platforms are unable to take full advantage of MySQL’s newest capabilities.
- The installation process with MySQLi not only easy, but is automatic when the PHP5 MySQL package is installed in Windows or Linux.
- MySQLi performs (slightly) faster than its competition. With non-prepared statements, the system performs ~2.5% faster, and ~6.5% faster with prepared ones. This is only a slight advantage and may only matter to certain users.
- MySQLi only works with MySQL databases, whereas PDO is flexible and able to work with multiple database systems, including IBM, Oracle and MySQL. If you have to switch databases, MySQLi is not the best option.
- MySQLi is not as portable as PDO.
- Binding parameters with MySQLi is not as easy or flexible as with PDO. MySQLi uses a numbered binding system and doesn’t support named parameters like PDO does.
Like any software updates and improvements, there are bound to be bugs to be worked out in future versions as well as adherents to the older versions or alternates. Choosing MySQLi over PDO or the MySQL Extension depends on the user’s situation and preferences. While some options are objectively better than others, what it boils down to are the preferences of the user. MySQLi is a secure and versatile option to interacting with the classic MySQL database management system and in fact earns the little “i” at the end of its name.