mysqlnd API за приклучоци
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
mysqlnd API за приклучоци
Референца за `mysqlnd.plugin.api.php` со подобрена типографија и навигација.
mysqlnd API за приклучоци
Следиве се список на функции обезбедени во
mysqlnd API на приклучокот:
- mysqlnd_plugin_register()
- mysqlnd_plugin_count()
- mysqlnd_plugin_get_plugin_connection_data()
- mysqlnd_plugin_get_plugin_result_data()
- mysqlnd_plugin_get_plugin_stmt_data()
- mysqlnd_plugin_get_plugin_net_data()
- mysqlnd_plugin_get_plugin_protocol_data()
- mysqlnd_conn_get_methods()
- mysqlnd_result_get_methods()
- mysqlnd_result_meta_get_methods()
- mysqlnd_stmt_get_methods()
- mysqlnd_net_get_methods()
- mysqlnd_protocol_get_methods()
Не постои формална дефиниција за тоа што е приклучок и како работи механизмот за приклучоци.
Компоненти што често се наоѓаат во механизмите за приклучоци се:
- Менаџер на приклучоци
- API на приклучоци
- Сервиси на апликацијата (или модули)
- API на сервисите на апликацијата (или API на модулите)
На mysqlnd концептот на приклучоци ги користи овие карактеристики, и дополнително ужива отворена архитектура.
Без Ограничувања
Приклучокот има целосен пристап до внатрешните работи на
mysqlnd. Нема безбедносни ограничувања или рестрикции. Сè може да се презапише за да се имплементираат пријателски или непријателски алгоритми. Се препорачува да распоредувате приклучоци само од доверлив извор.
Како што претходно беше дискутирано, приклучоците можат слободно да користат покажувачи. Овие покажувачи не се ограничени на кој било начин и можат да покажуваат во податоците на друг приклучок. Едноставна аритметика на поместување може да се користи за читање податоци од друг приклучок.
Се препорачува да пишувате кооперативни приклучоци и секогаш да го повикувате родителскиот метод. Приклучоците секогаш треба да соработуваат со mysqlnd itself.
| Проширување | mysqlnd.query() покажувач | стек на повици ако се повикува родител |
|---|---|---|
| ext/mysqlnd | mysqlnd.query() | mysqlnd.query |
| ext/mysqlnd_cache | mysqlnd_cache.query() |
|
| ext/mysqlnd_monitor | mysqlnd_monitor.query() |
|
Во овој случај, се вчитуваат приклучоци за кеш (ext/mysqlnd_cache) и монитор (ext/mysqlnd_monitor) приклучок. И двата наследуваат од Connection::query(). Регистрацијата на приклучокот се случува на MINIT користејќи ја логиката прикажана претходно. PHP ги повикува екстензиите по азбучен ред по дифолт. Приклучоците не се свесни еден за друг и не поставуваат зависности од екстензии.
По дифолт, приклучоците го повикуваат родителскиот имплементација на методот query во нивната изведена верзија на методот.
Рекапитулација на PHP екстензии
Ова е рекапитулација на она што се случува кога се користи примерен приклучок,
ext/mysqlnd_plugin, кој го изложува
mysqlnd C API за приклучоци на PHP:
- Секоја PHP MySQL апликација се обидува да воспостави врска со 192.168.2.29
-
PHP апликацијата ќе користи или
ext/mysql,ext/mysqliorPDO_MYSQL. Сите три PHP MySQL екстензии користатmysqlndза воспоставување на врска со 192.168.2.29. -
Mysqlndго повикува својот метод connect, кој е наследен одext/mysqlnd_plugin. -
ext/mysqlnd_pluginго повикува userspace hookproxy::connect()регистриран од корисникот. -
userspace hook ја менува IP адресата на хостот за поврзување од 192.168.2.29 на 127.0.0.1 и ја враќа воспоставената врска од
parent::connect(). -
ext/mysqlnd_pluginја извршува еквивалентната операција наparent::connect(127.0.0.1)со повикување на оригиналниотmysqlndметод за воспоставување врска. -
ext/mysqlndвоспоставува врска и се враќа наext/mysqlnd_plugin.ext/mysqlnd_pluginсе враќа исто така. - Без оглед на тоа кој PHP MySQL екстензија бил користен од апликацијата, таа добива врска до 127.0.0.1. Самиот PHP MySQL екстензија се враќа на PHP апликацијата. Кругот е затворен.