Concepts
7
MySQL native driver (mysqlnd)
MySQL client server library
(libmysqlclient)
Performance statistics
Yes
No
LOAD LOCAL INFILE respects
the open_basedir directive
Yes
No
Uses PHP's native memory
management system (e.g., follows
PHP memory limits)
Yes
No
Return numeric column as double
(COM_QUERY)
Yes
No
Return numeric column as string
(COM_QUERY)
Yes
Yes
Plugin API
Yes
Limited
Read/Write splitting for MySQL
Replication
Yes, with plugin
No
Load Balancing
Yes, with plugin
No
Fail over
Yes, with plugin
No
Lazy connections
Yes, with plugin
No
Query caching
Yes, with plugin
No
Transparent query manipulations
(E.g., auto-EXPLAIN or
monitoring)
Yes, with plugin
No
2.5 Concepts
Copyright 1997-2014 the PHP Documentation Group.
These concepts are specific to the MySQL drivers for PHP.
2.5.1 Buffered and Unbuffered queries
Copyright 1997-2014 the PHP Documentation Group.
Queries are using the buffered mode by default. This means that query results are immediately transferred
from the MySQL Server to PHP and then are kept in the memory of the PHP process. This allows
additional operations like counting the number of rows, and moving (seeking) the current result pointer. It
also allows issuing further queries on the same connection while working on the result set. The downside
of the buffered mode is that larger result sets might require quite a lot memory. The memory will be
kept occupied till all references to the result set are unset or the result set was explicitly freed, which will
automatically happen during request end the latest. The terminology "store result" is also used for buffered
mode, as the whole result set is stored at once.
Note
When using libmysqlclient as library PHP's memory limit won't count the memory
used for result sets unless the data is fetched into PHP variables. With mysqlnd the
memory accounted for will include the full result set.
Unbuffered MySQL queries execute the query and then return a resource while the data is still waiting on
the MySQL server for being fetched. This uses less memory on the PHP-side, but can increase the load
Pdf create fillable form - C# PDF Field Edit Library: insert, delete, update pdf form field in C#.net, ASP.NET, MVC, Ajax, WPF
Online C# Tutorial to Insert, Delete and Update Fields in PDF Document
change font in pdf fillable form; allow saving of pdf form
Pdf create fillable form - VB.NET PDF Field Edit library: insert, delete, update pdf form field in vb.net, ASP.NET, MVC, Ajax, WPF
How to Insert, Delete and Update Fields in PDF Document with VB.NET Demo Code
add photo to pdf form; create a pdf form to fill out
Buffered and Unbuffered queries
8
on the server. Unless the full result set was fetched from the server no further queries can be sent over the
same connection. Unbuffered queries can also be referred to as "use result".
Following these characteristics buffered queries should be used in cases where you expect only a limited
result set or need to know the amount of returned rows before reading all rows. Unbuffered mode should
be used when you expect larger results.
Because buffered queries are the default, the examples below will demonstrate how to execute unbuffered
queries with each API.
Example 2.3 Unbuffered query example: mysqli
<?php
$mysqli  = new mysqli("localhost", "my_user", "my_password", "world");
$uresult = $mysqli->query("SELECT Name FROM City", MYSQLI_USE_RESULT);
if ($uresult) {
while ($row = $uresult->fetch_assoc()) {
echo $row['Name'] . PHP_EOL;
}
}
$uresult->close();
?>
Example 2.4 Unbuffered query example: pdo_mysql
<?php
$pdo = new PDO("mysql:host=localhost;dbname=world", 'my_user', 'my_pass');
$pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);
$uresult = $pdo->query("SELECT Name FROM City");
if ($uresult) {
while ($row = $uresult->fetch(PDO::FETCH_ASSOC)) {
echo $row['Name'] . PHP_EOL;
}
}
?>
Example 2.5 Unbuffered query example: mysql
<?php
$conn = mysql_connect("localhost", "my_user", "my_pass");
$db   = mysql_select_db("world");
$uresult = mysql_unbuffered_query("SELECT Name FROM City");
if ($uresult) {
while ($row = mysql_fetch_assoc($uresult)) {
echo $row['Name'] . PHP_EOL;
}
}
?>
VB.NET Create PDF from PowerPoint Library to convert pptx, ppt to
Convert multiple pages PowerPoint to fillable and editable PDF documents. Easy to create searchable and scanned PDF files from PowerPoint.
add picture to pdf form; adding an image to a pdf form
VB.NET Create PDF from Word Library to convert docx, doc to PDF in
Edit Bookmark. Metadata: Edit, Delete Metadata. Form Process. Create PDF files from both DOC and DOCX formats. Convert multiple pages Word to fillable and editable
add attachment to pdf form; add text field to pdf acrobat
Character sets
9
2.5.2 Character sets
Copyright 1997-2014 the PHP Documentation Group.
Ideally a proper character set will be set at the server level, and doing this is described within the Character
Set Configuration section of the MySQL Server manual. Alternatively, each MySQL API offers a method to
set the character set at runtime.
The character set and character escaping
The character set should be understood and defined, as it has an affect on every
action, and includes security implications. For example, the escaping mechanism
(e.g., mysqli_real_escape_string for mysqli, mysql_real_escape_string
for mysql, and PDO::quote for PDO_MySQL) will adhere to this setting. It is
important to realize that these functions will not use the character set that is defined
with a query, so for example the following will not have an effect on them:
Example 2.6 Problems with setting the character set with SQL
<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
// Will NOT affect $mysqli->real_escape_string();
$mysqli->query("SET NAMES utf8");
// Will NOT affect $mysqli->real_escape_string();
$mysqli->query("SET CHARACTER SET utf8");
// But, this will affect $mysqli->real_escape_string();
$mysqli->set_charset('utf8');
// But, this will NOT affect it (utf-8 vs utf8) -- don't use dashes here
$mysqli->set_charset('utf-8');
?>
Below are examples that demonstrate how to properly alter the character set at runtime using each API.
Possible UTF-8 confusion
Because character set names in MySQL do not contain dashes, the string "utf8" is
valid in MySQL to set the character set to UTF-8. The string "utf-8" is not valid, as
using "utf-8" will fail to change the character set.
Example 2.7 Setting the character set example: mysqli
<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
printf("Initial character set: %s\n", $mysqli->character_set_name());
if (!$mysqli->set_charset('utf8')) {
printf("Error loading character set utf8: %s\n", $mysqli->error);
exit;
}
VB.NET Create PDF from Excel Library to convert xlsx, xls to PDF
Link: Edit URL. Bookmark: Edit Bookmark. Metadata: Edit, Delete Metadata. Form Process. Create fillable and editable PDF documents from Excel in Visual
best pdf form creator; add forms to pdf
C# Create PDF from Excel Library to convert xlsx, xls to PDF in C#
Create fillable and editable PDF documents from Excel in both .NET WinForms and ASP.NET. Create searchable and scanned PDF files from Excel.
build pdf forms; pdf form creation
Character sets
10
echo "New character set information:\n";
print_r( $mysqli->get_charset() );
?>
Example 2.8 Setting the character set example: pdo_mysql
Note: This only works as of PHP 5.3.6.
<?php
$pdo = new PDO("mysql:host=localhost;dbname=world;charset=utf8", 'my_user', 'my_pass');
?>
Example 2.9 Setting the character set example: mysql
<?php
$conn = mysql_connect("localhost", "my_user", "my_pass");
$db   = mysql_select_db("world");
echo 'Initial character set: ' .  mysql_client_encoding($conn) . "\n";
if (!mysql_set_charset('utf8', $conn)) {
echo "Error: Unable to set the character set.\n";
exit;
}
echo 'Your current character set is: ' .  mysql_client_encoding($conn);
?>
C# Create PDF from PowerPoint Library to convert pptx, ppt to PDF
Convert multiple pages PowerPoint to fillable and editable PDF documents. Easy to create searchable and scanned PDF files from PowerPoint.
add date to pdf form; allow users to save pdf form
C# Create PDF from Word Library to convert docx, doc to PDF in C#.
Convert multiple pages Word to fillable and editable PDF documents in both .NET WinForms and ASP.NET. Easy to create searchable and scanned PDF files from
adding a signature to a pdf form; add print button to pdf form
11
Chapter 3 MySQL Improved Extension
Table of Contents
3.1 Overview.................................................................................................................................... 14
3.2 Quick start guide ........................................................................................................................ 18
3.2.1 Dual procedural and object-oriented interface .................................................................... 18
3.2.2 Connections ..................................................................................................................... 20
3.2.3 Executing statements ....................................................................................................... 22
3.2.4 Prepared Statements ....................................................................................................... 26
3.2.5 Stored Procedures........................................................................................................... 33
3.2.6 Multiple Statements......................................................................................................... 38
3.2.7 API support for transactions ............................................................................................. 39
3.2.8 Metadata ......................................................................................................................... 40
3.3 Installing/Configuring................................................................................................................... 42
3.3.1 Requirements .................................................................................................................. 42
3.3.2 Installation ....................................................................................................................... 42
3.3.3 Runtime Configuration ...................................................................................................... 44
3.3.4 Resource Types.............................................................................................................. 46
3.4 The mysqli Extension and Persistent Connections ........................................................................ 46
3.5 Predefined Constants................................................................................................................. 47
3.6 Notes ......................................................................................................................................... 50
3.7 The MySQLi Extension Function Summary.................................................................................. 51
3.8 Examples................................................................................................................................... 57
3.8.1 MySQLi extension basic examples ................................................................................... 57
3.9 The mysqli class........................................................................................................................ 59
3.9.1 mysqli::$affected_rowsmysqli_affected_rows ................................................. 62
3.9.2 mysqli::autocommitmysqli_autocommit ............................................................... 65
3.9.3 mysqli::begin_transactionmysqli_begin_transaction ................................... 66
3.9.4 mysqli::change_usermysqli_change_user ........................................................... 68
3.9.5 mysqli::character_set_name, mysqli_character_set_name ............................... 71
3.9.6 mysqli::$client_infomysqli_get_client_info ................................................. 72
3.9.7 mysqli::$client_versionmysqli_get_client_version ..................................... 73
3.9.8 mysqli::close, mysqli_close ................................................................................... 74
3.9.9 mysqli::commit, mysqli_commit ............................................................................... 75
3.9.10 mysqli::$connect_errnomysqli_connect_errno ............................................... 77
3.9.11 mysqli::$connect_errormysqli_connect_error ............................................... 78
3.9.12 mysqli::__constructmysqli_connect ................................................................. 80
3.9.13 mysqli::debug, mysqli_debug ................................................................................. 83
3.9.14 mysqli::dump_debug_infomysqli_dump_debug_info ......................................... 84
3.9.15 mysqli::$errno, mysqli_errno ............................................................................... 85
3.9.16 mysqli::$error_listmysqli_error_list ........................................................... 87
3.9.17 mysqli::$error, mysqli_error ............................................................................... 88
3.9.18 mysqli::$field_count, mysqli_field_count ....................................................... 90
3.9.19 mysqli::get_charsetmysqli_get_charset ......................................................... 92
3.9.20 mysqli::get_client_infomysqli_get_client_info ......................................... 93
3.9.21 mysqli_get_client_stats ....................................................................................... 94
3.9.22 mysqli_get_client_versionmysqli::$client_version .................................... 97
3.9.23 mysqli::get_connection_statsmysqli_get_connection_stats ...................... 97
3.9.24 mysqli::$host_info, mysqli_get_host_info ...................................................... 100
3.9.25 mysqli::$protocol_versionmysqli_get_proto_info ...................................... 102
3.9.26 mysqli::$server_infomysqli_get_server_info .............................................. 103
C# Create PDF Library SDK to convert PDF from other file formats
Create fillable PDF document with fields. Load PDF from existing documents and image in SQL server. Load PDF from stream programmatically.
change font size pdf fillable form; create a pdf form online
VB.NET Create PDF Library SDK to convert PDF from other file
Create fillable PDF document with fields in Visual Basic .NET application. Load PDF from existing documents and image in SQL server.
adding images to pdf forms; pdf form save
12
3.9.27 mysqli::$server_versionmysqli_get_server_version .................................. 105
3.9.28 mysqli::get_warnings, mysqli_get_warnings .................................................... 106
3.9.29 mysqli::$info, mysqli_info ................................................................................. 107
3.9.30 mysqli::init, mysqli_init ................................................................................... 108
3.9.31 mysqli::$insert_idmysqli_insert_id ............................................................. 109
3.9.32 mysqli::kill, mysqli_kill ................................................................................... 111
3.9.33 mysqli::more_results, mysqli_more_results .................................................... 113
3.9.34 mysqli::multi_query, mysqli_multi_query ........................................................ 114
3.9.35 mysqli::next_result, mysqli_next_result ........................................................ 116
3.9.36 mysqli::optionsmysqli_options ....................................................................... 117
3.9.37 mysqli::ping, mysqli_ping ................................................................................... 118
3.9.38 mysqli::poll, mysqli_poll ................................................................................... 120
3.9.39 mysqli::preparemysqli_prepare ....................................................................... 122
3.9.40 mysqli::query, mysqli_query ............................................................................... 124
3.9.41 mysqli::real_connect, mysqli_real_connect .................................................... 127
3.9.42 mysqli::real_escape_stringmysqli_real_escape_string ............................ 131
3.9.43 mysqli::real_querymysqli_real_query ............................................................ 134
3.9.44 mysqli::reap_async_querymysqli_reap_async_query .................................... 134
3.9.45 mysqli::refreshmysqli_refresh ....................................................................... 135
3.9.46 mysqli::release_savepointmysqli_release_savepoint ................................ 136
3.9.47 mysqli::rollbackmysqli_rollback ................................................................... 136
3.9.48 mysqli::rpl_query_typemysqli_rpl_query_type ............................................ 139
3.9.49 mysqli::savepointmysqli_savepoint ............................................................... 140
3.9.50 mysqli::select_dbmysqli_select_db ............................................................... 140
3.9.51 mysqli::send_querymysqli_send_query ............................................................ 142
3.9.52 mysqli::set_charset, mysqli_set_charset ........................................................ 143
3.9.53 mysqli::set_local_infile_default, mysqli_set_local_infile_default .... 145
3.9.54 mysqli::set_local_infile_handler, mysqli_set_local_infile_handler .... 145
3.9.55 mysqli::$sqlstatemysqli_sqlstate ................................................................. 148
3.9.56 mysqli::ssl_setmysqli_ssl_set ....................................................................... 150
3.9.57 mysqli::stat, mysqli_stat ................................................................................... 151
3.9.58 mysqli::stmt_initmysqli_stmt_init ............................................................... 152
3.9.59 mysqli::store_result, mysqli_store_result .................................................... 153
3.9.60 mysqli::$thread_idmysqli_thread_id ............................................................. 154
3.9.61 mysqli::thread_safe, mysqli_thread_safe ........................................................ 156
3.9.62 mysqli::use_resultmysqli_use_result ............................................................ 156
3.9.63 mysqli::$warning_countmysqli_warning_count .............................................. 159
3.10 The mysqli_stmt class ............................................................................................................. 161
3.10.1 mysqli_stmt::$affected_rowsmysqli_stmt_affected_rows .......................... 162
3.10.2 mysqli_stmt::attr_getmysqli_stmt_attr_get ................................................ 164
3.10.3 mysqli_stmt::attr_setmysqli_stmt_attr_set ................................................ 165
3.10.4 mysqli_stmt::bind_parammysqli_stmt_bind_param ........................................ 166
3.10.5 mysqli_stmt::bind_resultmysqli_stmt_bind_result .................................... 169
3.10.6 mysqli_stmt::closemysqli_stmt_close ............................................................ 171
3.10.7 mysqli_stmt::__construct ................................................................................... 172
3.10.8 mysqli_stmt::data_seekmysqli_stmt_data_seek ............................................ 172
3.10.9 mysqli_stmt::$errnomysqli_stmt_errno .......................................................... 175
3.10.10 mysqli_stmt::$error_listmysqli_stmt_error_list .................................... 177
3.10.11 mysqli_stmt::$error, mysqli_stmt_error ........................................................ 179
3.10.12 mysqli_stmt::execute, mysqli_stmt_execute .................................................. 181
3.10.13 mysqli_stmt::fetch, mysqli_stmt_fetch .......................................................... 184
3.10.14 mysqli_stmt::$field_count, mysqli_stmt_field_count ................................ 186
3.10.15 mysqli_stmt::free_result, mysqli_stmt_free_result .................................. 186
3.10.16 mysqli_stmt::get_resultmysqli_stmt_get_result ...................................... 187
VB.NET Create PDF from OpenOffice to convert odt, odp files to PDF
Create PDF document from OpenOffice Text Document with embedded Export PDF document from OpenOffice Presentation. ODT, ODS, ODP forms into fillable PDF formats.
create a fillable pdf form online; add form fields to pdf online
C# Create PDF from OpenOffice to convert odt, odp files to PDF in
Create PDF document from OpenOffice Presentation in both .NET WinForms and ASP.NET NET control to change ODT, ODS, ODP forms to fillable PDF formats in Visual
change font on pdf form; acrobat create pdf form
13
3.10.17 mysqli_stmt::get_warnings, mysqli_stmt_get_warnings .............................. 189
3.10.18 mysqli_stmt::$insert_idmysqli_stmt_insert_id ........................................ 190
3.10.19 mysqli_stmt::more_results, mysqli_stmt_more_results .............................. 190
3.10.20 mysqli_stmt::next_result, mysqli_stmt_next_result .................................. 191
3.10.21 mysqli_stmt::$num_rowsmysqli_stmt_num_rows ............................................ 192
3.10.22 mysqli_stmt::$param_count, mysqli_stmt_param_count ................................ 194
3.10.23 mysqli_stmt::prepare, mysqli_stmt_prepare .................................................. 195
3.10.24 mysqli_stmt::reset, mysqli_stmt_reset .......................................................... 198
3.10.25 mysqli_stmt::result_metadatamysqli_stmt_result_metadata .................. 199
3.10.26 mysqli_stmt::send_long_datamysqli_stmt_send_long_data ...................... 201
3.10.27 mysqli_stmt::$sqlstatemysqli_stmt_sqlstate ............................................ 202
3.10.28 mysqli_stmt::store_result, mysqli_stmt_store_result .............................. 204
3.11 The mysqli_result class........................................................................................................... 207
3.11.1 mysqli_result::$current_fieldmysqli_field_tell ...................................... 208
3.11.2 mysqli_result::data_seekmysqli_data_seek .................................................. 210
3.11.3 mysqli_result::fetch_allmysqli_fetch_all .................................................. 212
3.11.4 mysqli_result::fetch_arraymysqli_fetch_array .......................................... 213
3.11.5 mysqli_result::fetch_assocmysqli_fetch_assoc .......................................... 215
3.11.6 mysqli_result::fetch_field_directmysqli_fetch_field_direct .............. 218
3.11.7 mysqli_result::fetch_fieldmysqli_fetch_field .......................................... 221
3.11.8 mysqli_result::fetch_fieldsmysqli_fetch_fields ...................................... 223
3.11.9 mysqli_result::fetch_objectmysqli_fetch_object ...................................... 226
3.11.10 mysqli_result::fetch_row, mysqli_fetch_row ................................................ 229
3.11.11 mysqli_result::$field_countmysqli_num_fields ........................................ 231
3.11.12 mysqli_result::field_seekmysqli_field_seek ............................................ 232
3.11.13 mysqli_result::free, mysqli_free_result ...................................................... 234
3.11.14 mysqli_result::$lengthsmysqli_fetch_lengths .......................................... 235
3.11.15 mysqli_result::$num_rows, mysqli_num_rows .................................................. 237
3.12 The mysqli_driver class ........................................................................................................... 239
3.12.1 mysqli_driver::embedded_server_end, mysqli_embedded_server_end .......... 240
3.12.2 mysqli_driver::embedded_server_startmysqli_embedded_server_start .. 240
3.12.3 mysqli_driver::$report_modemysqli_report .................................................. 241
3.13 The mysqli_warning class ....................................................................................................... 243
3.13.1 mysqli_warning::__construct ............................................................................. 244
3.13.2 mysqli_warning::next ........................................................................................... 244
3.14 The mysqli_sql_exception class ............................................................................................... 244
3.15 Aliases and deprecated Mysqli Functions ................................................................................. 245
3.15.1 mysqli_bind_param ................................................................................................. 245
3.15.2 mysqli_bind_result ............................................................................................... 245
3.15.3 mysqli_client_encoding ....................................................................................... 246
3.15.4 mysqli_connect ....................................................................................................... 246
3.15.5 mysqli::disable_reads_from_master,
mysqli_disable_reads_from_master.............................................................................. 247
3.15.6 mysqli_disable_rpl_parse ................................................................................... 247
3.15.7 mysqli_enable_reads_from_master ...................................................................... 248
3.15.8 mysqli_enable_rpl_parse ..................................................................................... 248
3.15.9 mysqli_escape_string ........................................................................................... 248
3.15.10 mysqli_execute ...................................................................................................... 249
3.15.11 mysqli_fetch .......................................................................................................... 249
3.15.12 mysqli_get_cache_stats ...................................................................................... 249
3.15.13 mysqli_get_links_stats ...................................................................................... 250
3.15.14 mysqli_get_metadata ............................................................................................ 250
3.15.15 mysqli_master_query ............................................................................................ 251
3.15.16 mysqli_param_count .............................................................................................. 251
Overview
14
3.15.17 mysqli_report ........................................................................................................ 252
3.15.18 mysqli_rpl_parse_enabled .................................................................................. 252
3.15.19 mysqli_rpl_probe .................................................................................................. 252
3.15.20 mysqli_send_long_data ........................................................................................ 252
3.15.21 mysqli::set_opt, mysqli_set_opt ...................................................................... 253
3.15.22 mysqli_slave_query .............................................................................................. 253
3.16 Changelog .............................................................................................................................. 253
Copyright 1997-2014 the PHP Documentation Group.
The mysqli extension allows you to access the functionality provided by MySQL 4.1 and above. More
information about the MySQL Database server can be found at http://www.mysql.com/
An overview of software available for using MySQL from PHP can be found at Section 3.1, “Overview”
Documentation for MySQL can be found at http://dev.mysql.com/doc/.
Parts of this documentation included from MySQL manual with permissions of Oracle Corporation.
Examples use either the world or sakila database, which are freely available.
3.1 Overview
Copyright 1997-2014 the PHP Documentation Group.
This section provides an introduction to the options available to you when developing a PHP application
that needs to interact with a MySQL database.
What is an API?
An Application Programming Interface, or API, defines the classes, methods, functions and variables that
your application will need to call in order to carry out its desired task. In the case of PHP applications that
need to communicate with databases the necessary APIs are usually exposed via PHP extensions.
APIs can be procedural or object-oriented. With a procedural API you call functions to carry out tasks, with
the object-oriented API you instantiate classes and then call methods on the resulting objects. Of the two
the latter is usually the preferred interface, as it is more modern and leads to better organized code.
When writing PHP applications that need to connect to the MySQL server there are several API options
available. This document discusses what is available and how to select the best solution for your
application.
What is a Connector?
In the MySQL documentation, the term connector refers to a piece of software that allows your application
to connect to the MySQL database server. MySQL provides connectors for a variety of languages,
including PHP.
If your PHP application needs to communicate with a database server you will need to write PHP code to
perform such activities as connecting to the database server, querying the database and other database-
related functions. Software is required to provide the API that your PHP application will use, and also
handle the communication between your application and the database server, possibly using other
intermediate libraries where necessary. This software is known generically as a connector, as it allows your
application to connect to a database server.
What is a Driver?
Overview
15
A driver is a piece of software designed to communicate with a specific type of database server. The driver
may also call a library, such as the MySQL Client Library or the MySQL Native Driver. These libraries
implement the low-level protocol used to communicate with the MySQL database server.
By way of an example, the PHP Data Objects (PDO) database abstraction layer may use one of several
database-specific drivers. One of the drivers it has available is the PDO MYSQL driver, which allows it to
interface with the MySQL server.
Sometimes people use the terms connector and driver interchangeably, this can be confusing. In the
MySQL-related documentation the term “driver” ”  is reserved for software that provides the database-specific
part of a connector package.
What is an Extension?
In the PHP documentation you will come across another term - extension. The PHP code consists of a
core, with optional extensions to the core functionality. PHP's MySQL-related extensions, such as the
mysqli extension, and the mysql extension, are implemented using the PHP extension framework.
An extension typically exposes an API to the PHP programmer, to allow its facilities to be used
programmatically. However, some extensions which use the PHP extension framework do not expose an
API to the PHP programmer.
The PDO MySQL driver extension, for example, does not expose an API to the PHP programmer, but
provides an interface to the PDO layer above it.
The terms API and extension should not be taken to mean the same thing, as an extension may not
necessarily expose an API to the programmer.
What are the main PHP API offerings for using MySQL?
There are three main API options when considering connecting to a MySQL database server:
• PHP's MySQL Extension
• PHP's mysqli Extension
• PHP Data Objects (PDO)
Each has its own advantages and disadvantages. The following discussion aims to give a brief introduction
to the key aspects of each API.
What is PHP's MySQL Extension?
This is the original extension designed to allow you to develop PHP applications that interact with a MySQL
database. The mysql extension provides a procedural interface and is intended for use only with MySQL
versions older than 4.1.3. This extension can be used with versions of MySQL 4.1.3 or newer, but not all of
the latest MySQL server features will be available.
Note
If you are using MySQL versions 4.1.3 or later it is strongly recommended that you
use the mysqli extension instead.
The mysql extension source code is located in the PHP extension directory ext/mysql.
For further information on the mysql extension, see Chapter 5, Original MySQL API.
Overview
16
What is PHP's mysqli Extension?
The mysqli extension, or as it is sometimes known, the MySQL improved  extension, was developed
to take advantage of new features found in MySQL systems versions 4.1.3 and newer. The mysqli
extension is included with PHP versions 5 and later.
The mysqli extension has a number of benefits, the key enhancements over the mysql extension being:
• Object-oriented interface
• Support for Prepared Statements
• Support for Multiple Statements
• Support for Transactions
• Enhanced debugging capabilities
• Embedded server support
Note
If you are using MySQL versions 4.1.3 or later it is strongly recommended that you
use this extension.
As well as the object-oriented interface the extension also provides a procedural interface.
The mysqli extension is built using the PHP extension framework, its source code is located in the
directory ext/mysqli.
For further information on the mysqli extension, see Chapter 3, MySQL Improved Extension.
What is PDO?
PHP Data Objects, or PDO, is a database abstraction layer specifically for PHP applications. PDO provides
a consistent API for your PHP application regardless of the type of database server your application will
connect to. In theory, if you are using the PDO API, you could switch the database server you used, from
say Firebird to MySQL, and only need to make minor changes to your PHP code.
Other examples of database abstraction layers include JDBC for Java applications and DBI for Perl.
While PDO has its advantages, such as a clean, simple, portable API, its main disadvantage is that it
doesn't allow you to use all of the advanced features that are available in the latest versions of MySQL
server. For example, PDO does not allow you to use MySQL's support for Multiple Statements.
PDO is implemented using the PHP extension framework, its source code is located in the directory ext/
pdo.
For further information on PDO, see the http://www.php.net/book.pdo.
What is the PDO MYSQL driver?
The PDO MYSQL driver is not an API as such, at least from the PHP programmer's perspective. In fact
the PDO MYSQL driver sits in the layer below PDO itself and provides MySQL-specific functionality. The
programmer still calls the PDO API, but PDO uses the PDO MYSQL driver to carry out communication with
the MySQL server.
Documents you may be interested
Documents you may be interested