The mysqlnd user handler plugin can be understood as a client-side proxy
for all PHP MySQL extensions (mysqli,
PDO_MYSQL), if they are compiled to
use the mysqlnd library. The
extensions use the
mysqlnd library internally, at the C
level, to communicate with the MySQL server. PECL/mysqlnd_uh
allows it to hook many
mysqlnd calls. Therefore,
most activities of the PHP MySQL extensions can be monitored.
Because monitoring happens at the level of the library, at a layer below the application, it is possible to monitor applications without changing them.
On the C level, the
mysqlnd library is structured in modules
or classes. The extension hooks almost all methods of the
connection class and exposes them through the
user space class
MysqlndUhConnection. Some few methods of
the mysqlnd internal
statement class are made available
to the PHP user with the class
By subclassing the classes
MysqlndUhPreparedStatement users get access to
mysqlnd internal function calls.
mysqlnd function calls are not designed
to be exposed to the PHP user. Manipulating their activities may
cause PHP to crash or leak memory. Often, this is not considered a bug. Please,
keep in mind that you are accessing C library functions through
PHP which are expected to take certain actions, which you may not be able to
emulate in user space. Therefore, it is strongly recommended to always call
the parent method implementation when subclassing
MysqlndUhPreparedStatement. To prevent the worst
case, the extension performs some sanity checks. Please, see also the
Mysqlnd_uh Configure Options.