Π ΡΠ΅ΠΊΡΠΈΠΈ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΡΡ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ° ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ²
Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ° mysqlnd.
ΠΠ±Π·ΠΎΡ MySQL Native Driver
ΠΠ΅ΡΠ΅Π΄ Π½Π°ΡΠ°Π»ΠΎΠΌ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² Π΄Π»Ρ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ°
mysqlnd ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΡΠ·Π½Π°ΡΡ,
ΠΊΠ°ΠΊ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½ ΡΠ°ΠΌ Π΄ΡΠ°ΠΉΠ²Π΅Ρ mysqlnd.
Mysqlnd ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΡΠ»Π΅Π΄ΡΡΡΠΈΡ
ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ:
| ΠΠΎΠ΄ΡΠ»ΠΈ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠΈ | mysqlnd_statistics.c |
|---|---|
| Π‘ΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ | mysqlnd.c |
| Π Π΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠΈΠΉ Π½Π°Π±ΠΎΡ | mysqlnd_result.c |
| ΠΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠ΅Π³ΠΎ Π½Π°Π±ΠΎΡΠ° | mysqlnd_result_meta.c |
| ΠΠΏΠ΅ΡΠ°ΡΠΎΡ | mysqlnd_ps.c |
| Π‘Π΅ΡΡ | mysqlnd_net.c |
| ΠΡΠΎΡΠΎΠΊΠΎΠ» ΠΎΠ±ΠΌΠ΅Π½Π° | mysqlnd_wireprotocol.c |
ΠΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌΠ° C
ΠΠ° ΡΡΠΎΠ²Π½Π΅ ΠΊΠΎΠ΄Π°, mysqlnd ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ
ΠΏΠ°ΡΡΠ΅ΡΠ½ C Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄Π°.
Π C ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ struct.
Π§Π»Π΅Π½Ρ ΡΡΡΡΠΊΡΡΡΡ ΡΠ²Π»ΡΡΡΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°.
Π§Π»Π΅Π½Ρ ΡΡΡΡΠΊΡΡΡΡ, ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΠ΅ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΠ²Π»ΡΡΡΡΡ
ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ.
Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΡΠ°ΠΊΠΈΡ ΡΠ·ΡΠΊΠΎΠ² ΠΊΠ°ΠΊ C++ ΠΈΠ»ΠΈ Java, Π² C Π½Π΅Ρ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΏΡΠ°Π²ΠΈΠ» Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ. ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡΡΠ½Π½ΠΎΡΡΠΈ, ΠΊΠΎΡΠΎΡΡΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ, Π½ΠΎ ΡΡΠΎ ΠΌΡ ΠΎΠ±ΡΡΠ΄ΠΈΠΌ ΠΏΠΎΠ·ΠΆΠ΅.
ΠΠΈΠ·Π½Π΅Π½Π½ΡΠΉ ΡΠΈΠΊΠ» PHP
ΠΡΠΈ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΠΈ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΊΠ»Π° PHP ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π΄Π²Π° ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΡΠΈΠΊΠ»Π°:
ΠΡΠΈ ΡΡΠ°ΡΡΠ΅ Π΄Π²ΠΈΠΆΠΊΠ° PHP, ΠΏΠ΅ΡΠ²ΡΠΌ Π΄Π΅Π»ΠΎΠΌ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ (MINIT) Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΈ Π²ΡΠ΄Π΅Π»ΠΈΡΡ ΡΠ΅ΡΡΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ Π·Π°Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°Π½Ρ Π²ΡΠ΅ Π²ΡΠ΅ΠΌΡ ΠΆΠΈΠ·Π½ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π΄Π²ΠΈΠΆΠΊΠ° PHP. ΠΠΎΠ³Π΄Π° Π΄Π²ΠΈΠΆΠΎΠΊ PHP Π²ΡΠΊΠ»ΡΡΠ°Π΅ΡΡΡ, ΠΎΠ½ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ (MSHUTDOWN) Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ.
ΠΠ° ΠΏΡΠΎΡΡΠΆΠ΅Π½ΠΈΠΈ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΊΠ»Π° Π΄Π²ΠΈΠΆΠΊΠ° PHP, ΠΎΠ½ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π·Π°ΠΏΡΠΎΡΠΎΠ². ΠΠ°ΠΆΠ΄ΡΠΉ Π·Π°ΠΏΡΠΎΡ ΠΏΠΎΡΠΎΠΆΠ΄Π°Π΅Ρ Π½ΠΎΠ²ΡΠΉ ΠΆΠΈΠ·Π½Π΅Π½Π½ΡΠΉ ΡΠΈΠΊΠ». ΠΠ° ΠΊΠ°ΠΆΠ΄ΡΠΉ Π·Π°ΠΏΡΠΎΡ, Π΄Π²ΠΈΠΆΠΎΠΊ PHP Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ. ΠΠΎΠ΄ΡΠ»Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠ΅Π΄ΠΏΡΠΈΠ½ΡΡΡ Π²ΡΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΡΡΡΠΎΠ², ΡΡΠ΅Π±ΡΠ΅ΠΌΡΡ Π΄Π»Ρ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΡ Π·Π°ΠΏΡΠΎΡΠ°. ΠΠΎ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΠΈ ΠΆΠΈΠ·Π½ΠΈ Π·Π°ΠΏΡΠΎΡΠ°, Π΄Π²ΠΈΠΆΠΎΠΊ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π·Π°ΠΏΡΠΎΡΠ° (RSHUTDOWN) Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠΌ ΠΏΡΠΎΠΈΠ·Π²Π΅ΡΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΡΠΈΡΡΠΊΠΈ.
ΠΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΠ»Π°Π³ΠΈΠ½
ΠΠ»Π°Π³ΠΈΠ½ mysqlnd ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΠ΅ΡΠ΅Ρ
Π²Π°ΡΡΠ²Π°Ρ
Π²ΡΠ·ΠΎΠ²Ρ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΡ
mysqlnd,
ΠΊ mysqlnd. ΠΡΠΎ Π΄ΠΎΡΡΠΈΠ³Π°Π΅ΡΡΡ ΠΏΠΎΠ΄ΠΌΠ΅Π½ΠΎΠΉ
ΡΠ°Π±Π»ΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ mysqlnd Π½Π° ΡΠΎΠ·Π΄Π°Π½Π½ΡΡ
ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠΌ.
Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅Ρ Π·Π°ΠΌΠ΅Π½Ρ ΡΠ°Π±Π»ΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ
mysqlnd:
/* Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΡ */
struct st_mysqlnd_conn_methods org_methods;
void minit_register_hooks(TSRMLS_D) {
/* Π°ΠΊΡΠΈΠ²Π½Π°Ρ ΡΠ°Π±Π»ΠΈΡΠ° ΡΡΠ½ΠΊΡΠΈΠΉ */
struct st_mysqlnd_conn_methods * current_methods
= mysqlnd_conn_get_methods();
/* Π±ΡΠΊΠ°ΠΏ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΡ */
memcpy(&org_methods, current_methods,
sizeof(struct st_mysqlnd_conn_methods);
/* ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π½ΠΎΠ²ΡΡ
ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² */
current_methods->query = MYSQLND_METHOD(my_conn_class, query);
}
ΠΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΈΠ΅ΠΉ Ρ ΡΠ°Π±Π»ΠΈΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Π½ΠΈΠΌΠ°ΡΡΡΡ Π½Π° ΡΡΠ°ΠΏΠ΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ (MINIT). Π’Π°Π±Π»ΠΈΡΠ° ΡΡΠ½ΠΊΡΠΈΠΉ β Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠΉ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΡΠΉ ΡΠ΅ΡΡΡΡ. Π ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠΌ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΈ, ΡΠΎ ΡΠ±ΠΎΡΠΊΠΎΠΉ TSRM, ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΈΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠΌ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΡΠΌ ΡΠ΅ΡΡΡΡΠΎΠΌ Π½Π° ΡΡΠ°ΠΏΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π·Π°ΠΏΡΠΎΡΠ° Π²ΡΠ·ΠΎΠ²Π΅Ρ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΡ.
ΠΠ°ΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: ΠΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π»ΠΎΠ³ΠΈΠΊΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ²ΡΠ·Π°Π½Π° Ρ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ ΠΏΡΠΈ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΈΠΈ Ρ ΡΠ°Π±Π»ΠΈΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΉ
mysqlnd. ΠΡΠ΅Π³Π΄Π° Π΄ΠΎΠ±Π°Π²Π»ΡΠΉΡΠ΅ Π½ΠΎΠ²ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Π² ΠΊΠΎΠ½Π΅Ρ ΡΠ°Π±Π»ΠΈΡΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠ°ΠΌΠ° ΡΠ°Π±Π»ΠΈΡΠ° ΠΌΠΎΠΆΠ΅Ρ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ Π² Π»ΡΠ±ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡΡ.
ΠΡΠ·ΠΎΠ² ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²
ΠΡΠ»ΠΈ Π·Π°ΠΏΠΈΡΠΈ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠΎΡ ΡΠ°Π½ΠΈΠ»ΠΈΡΡ, ΠΎΡΡΠ°ΡΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΡΠ·Π²Π°ΡΡ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ β ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ.
Π ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ
ΡΠ»ΡΡΠ°ΡΡ
, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ Connection::stmt_init(), ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎ
Π²Π°ΠΆΠ½ΠΎ ΡΠ½Π°ΡΠ°Π»Π° Π²ΡΠ·Π²Π°ΡΡ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄, ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΌ Π΄Π΅Π»Π°ΡΡ
ΡΡΠΎ-Π»ΠΈΠ±ΠΎ Π² Π½ΠΎΠ²ΠΎΠΌ ΠΌΠ΅ΡΠΎΠ΄Π΅.
MYSQLND_METHOD(my_conn_class, query)(MYSQLND *conn,
const char *query, unsigned int query_len TSRMLS_DC) {
php_printf("my_conn_class::query(query = %s)\n", query);
query = "SELECT 'query rewritten' FROM DUAL";
query_len = strlen(query);
return org_methods.query(conn, query, query_len); /* Π²ΠΎΠ·Π²ΡΠ°Ρ Ρ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ */
}
Π Π°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²
ΠΠ±ΡΠ΅ΠΊΡΡ mysqlnd ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ ΠΊΠ°ΠΊ C struct.
ΠΠ΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ»Π΅Π½Π° Π² C struct Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² mysqlnd Π½Π΅ ΠΌΠΎΠ³ΡΡ
ΠΏΡΠΎΡΡΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΎΠ±ΡΠ΅ΠΊΡΡ.
ΠΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ (ΡΠ²ΠΎΠΉΡΡΠ²Π°) ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ ΠΊ
ΠΎΠ±ΡΠ΅ΠΊΡΡ mysqlnd Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ
ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ· ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ²Π°
mysqlnd_plugin_get_plugin_<object>_data().
ΠΡΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° mysqlnd
ΡΠ΅Π·Π΅ΡΠ²ΠΈΡΡΠ΅ΡΡΡ ΠΌΠ΅ΡΡΠΎ Π² ΠΊΠΎΠ½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π΄Π»Ρ ΡΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ
void * ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅.
mysqlnd ΡΠ΅Π·Π΅ΡΠ²ΠΈΡΡΠ΅Ρ ΠΌΠ΅ΡΡΠΎ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ
void * ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΏΠ»Π°Π³ΠΈΠ½.
Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΠ°Π±Π»ΠΈΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ Π²ΡΡΠΈΡΠ»ΠΈΡΡ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π΄Π»Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΏΠ»Π°Π³ΠΈΠ½Π°:
| ΠΠ΄ΡΠ΅Ρ ΠΏΠ°ΠΌΡΡΠΈ | Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ |
|---|---|
| 0 | ΠΠ°ΡΠ°Π»ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° mysqlnd (C struct) |
| n | ΠΠΎΠ½Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ° mysqlnd (C struct) |
| n + (m x sizeof(void*)) | void* Π΄Π»Ρ Π΄Π°Π½Π½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΏΠ»Π°Π³ΠΈΠ½Π° Π½ΠΎΠΌΠ΅Ρ m |
ΠΡΠ»ΠΈ Π²Ρ ΠΏΠ»Π°Π½ΠΈΡΡΠ΅ΡΠ΅ Π΄Π΅Π»Π°ΡΡ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡ ΠΎΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΎΠ² ΠΎΠ±ΡΠ΅ΠΊΡΠ°
mysqlnd, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½Ρ, ΠΈΠΌΠ΅ΠΉΡΠ΅ ΡΡΠΎ Π² Π²ΠΈΠ΄Ρ!
Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²:
/* ΠΡΠ±ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ Ρ
ΠΎΡΠΈΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ */
typedef struct my_conn_properties {
unsigned long query_counter;
} MY_CONN_PROPERTIES;
/* ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΏΠ»Π°Π³ΠΈΠ½Π° */
unsigned int my_plugin_id;
void minit_register_hooks(TSRMLS_D) {
/* ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΏΠ»Π°Π³ΠΈΠ½Π° */
my_plugin_id = mysqlnd_plugin_register();
/* snip - see Extending Connection: methods */
}
static MY_CONN_PROPERTIES** get_conn_properties(const MYSQLND *conn TSRMLS_DC) {
MY_CONN_PROPERTIES** props;
props = (MY_CONN_PROPERTIES**)mysqlnd_plugin_get_plugin_connection_data(
conn, my_plugin_id);
if (!props || !(*props)) {
*props = mnd_pecalloc(1, sizeof(MY_CONN_PROPERTIES), conn->persistent);
(*props)->query_counter = 0;
}
return props;
}
Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΏΠ»Π°Π³ΠΈΠ½Π° ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΡΡ Π΄Π°Π½Π½ΡΡ ΠΏΠ»Π°Π³ΠΈΠ½Π°.
Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΡΡ mysqlnd Π΄Π»Ρ Π΄Π°Π½Π½ΡΡ
ΠΏΠ»Π°Π³ΠΈΠ½Π°. ΠΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠ°ΠΊΠΈΠ΅ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡ:
mnd_*loc(). Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΡΡ mysqlnd ΠΈΠΌΠ΅Π΅Ρ
ΡΡΠ΄ ΠΏΠΎΠ»Π΅Π·Π½ΡΡ
ΡΠ²ΠΎΠΉΡΡΠ², ΡΠ°ΠΊΠΈΡ
ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΠΎΠ³ΠΎ
ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΡΡ Π² Π½Π΅ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΡΡ
ΡΠ±ΠΎΡΠΊΠ°Ρ
.
| Β | ΠΠΎΠ³Π΄Π° ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡ? | ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΈΠΌΠ΅Π΅Ρ ΡΠ²ΠΎΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ ΡΠ°Π±Π»ΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ? | ΠΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡ? |
|---|---|---|---|
| Π‘ΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ (MYSQLND) | MINIT | ΠΠ΅Ρ | mysqlnd_conn_get_methods() |
| Π Π΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠΈΠΉ Π½Π°Π±ΠΎΡ (MYSQLND_RES) | MINIT or later | ΠΠ° | mysqlnd_result_get_methods() ΠΈΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΡΡΡΠΈΠΌ ΡΠ°Π±Π»ΠΈΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΉ |
| Π Π΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠΈΠΉ Π½Π°Π±ΠΎΡ (MYSQLND_RES_METADATA) | MINIT | ΠΠ΅Ρ | mysqlnd_result_metadata_get_methods() |
| ΠΠΏΠ΅ΡΠ°ΡΠΎΡ (MYSQLND_STMT) | MINIT | ΠΠ΅Ρ | mysqlnd_stmt_get_methods() |
| Π‘Π΅ΡΡ (MYSQLND_NET) | MINIT ΠΈΠ»ΠΈ ΠΏΠΎΠ·ΠΆΠ΅ | ΠΠ° | mysqlnd_net_get_methods() ΠΈΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΡΡΡΠΈΠΌ ΡΠ°Π±Π»ΠΈΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΉ |
| ΠΡΠΎΡΠΎΠΊΠΎΠ» ΠΎΠ±ΠΌΠ΅Π½Π° (MYSQLND_PROTOCOL) | MINIT ΠΈΠ»ΠΈ ΠΏΠΎΠ·ΠΆΠ΅ | ΠΠ° | mysqlnd_protocol_get_methods() ΠΈΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΡΡΡΠΈΠΌ ΡΠ°Π±Π»ΠΈΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΉ |
ΠΡ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°Π±Π»ΠΈΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΏΠΎΡΠ»Π΅ MINIT, Π΅ΡΠ»ΠΈ ΡΡΠΎ ΠΏΡΡΠΌΠΎ Π½Π΅ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΎ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ Π²ΡΡΠ΅.
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΊΠ»Π°ΡΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠ°Π±Π»ΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ². ΠΡΠ΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Ρ Π΄Π΅Π»ΠΈΡΡ ΠΎΠ΄Π½Ρ ΠΈ ΡΡ ΠΆΠ΅ ΡΠ°Π±Π»ΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ. ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ Ρ Π°ΠΎΡΠ°, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠΌ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΈ, ΡΠΏΡΠ°Π²Π»ΡΡΡ ΡΠ°ΠΊΠΈΠΌΠΈ ΡΠ°Π±Π»ΠΈΡΠ°ΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ ΡΡΠΎΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ Π²ΠΎ Π²ΡΠ΅ΠΌΡ MINIT.
ΠΡΠΎΡΠΈΠ΅ ΠΊΠ»Π°ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΊΠΎΠΏΠΈΠΈ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎ ΡΠ°Π·Π΄Π΅Π»ΡΠ½Π½ΡΡ ΡΠ°Π±Π»ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ. Π’Π°Π±Π»ΠΈΡΠ° ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ. ΠΠ°ΠΆΠ΄ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠ²ΠΎΡ ΡΠ°Π±Π»ΠΈΡΡ. ΠΡΠΎ Π΄Π°ΡΡ Π²Π°ΠΌ Π΄Π²Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ: Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΡΠ°Π±Π»ΠΈΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΄Π»Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π²ΠΎ Π²ΡΠ΅ΠΌΡ MINIT, Π° ΡΠ°ΠΊΠΆΠ΅ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π½Π΅ Π·Π°ΡΡΠ°Π³ΠΈΠ²Π°Ρ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ ΡΡΠΎΠ³ΠΎ ΠΆΠ΅ ΠΊΠ»Π°ΡΡΠ°.
ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π½Π΅Ρ Π½ΡΠΆΠ΄Ρ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°Π±Π»ΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°.
| Π’ΠΈΠΏ | Π Π°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅, ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅, ΡΠ±ΡΠΎΡ | ΠΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ? | ΠΡΠ·ΡΠ²Π°ΡΡΠΈΠΉ |
|---|---|---|---|
| Connection (MYSQLND) | mysqlnd_init() | ΠΠ΅Ρ | mysqlnd_connect() |
| Π Π΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠΈΠΉ Π½Π°Π±ΠΎΡ (MYSQLND_RES) |
Π Π°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅:
|
ΠΠ°, Π½ΠΎ Π²ΡΠ·ΠΎΠ²ΠΈΡΠ΅ ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ! |
|
| ΠΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠ΅Π³ΠΎ Π½Π°Π±ΠΎΡΠ° (MYSQLND_RES_METADATA) | Connection::result_meta_init() | ΠΠ°, Π½ΠΎ Π²ΡΠ·ΠΎΠ²ΠΈΡΠ΅ ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ! | Result::read_result_metadata() |
| ΠΠΏΠ΅ΡΠ°ΡΠΎΡ (MYSQLND_STMT) | Connection::stmt_init() | ΠΠ°, Π½ΠΎ Π²ΡΠ·ΠΎΠ²ΠΈΡΠ΅ ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ! | Connection::stmt_init() |
| Π‘Π΅ΡΡ (MYSQLND_NET) | mysqlnd_net_init() | ΠΠ΅Ρ | Connection::init() |
| ΠΡΠΎΡΠΎΠΊΠΎΠ» ΠΎΠ±ΠΌΠ΅Π½Π° (MYSQLND_PROTOCOL) | mysqlnd_protocol_init() | ΠΠ΅Ρ | Connection::init() |
ΠΠ°ΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ Π½Π΅ Π·Π°ΠΌΠ΅Π½ΡΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ
ΡΠ΅Π»ΠΈΠΊΠΎΠΌ. ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ.
ΠΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π»Ρ API ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ²
mysqlnd ΠΈ Π΄Π»Ρ Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°
mysqlnd. ΠΡΠ»ΠΈ Π²Π°ΠΌ Π½Π΅ ΡΡΡΠ°ΡΠ½Ρ
ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ ΠΈ Ρ
ΠΎΡΠΈΡΠ΅ ΡΠΈΠ»ΡΠ½ΠΎ ΠΏΠΎΠΌΠ΅Π½ΡΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ, ΡΠΎ
Ρ
ΠΎΡΡ Π±Ρ Π²ΡΠ·ΠΎΠ²ΠΈΡΠ΅ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΏΡΠ΅ΠΆΠ΄Π΅, ΡΠ΅ΠΌ ΡΡΠΎ-Π»ΠΈΠ±ΠΎ Π΄Π΅Π»Π°ΡΡ.
ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ, ΡΡΠΎ Π±ΡΠ²Π°Π΅Ρ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌ Π΄Π»Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΠ°. ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ β ΠΎΡΠ»ΠΈΡΠ½ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ°Π±Π»ΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ Π΄Π»Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΡΠ°Π·Π΄Π΅Π»ΡΠ½Π½ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠΈΠΉ Π½Π°Π±ΠΎΡ, ΡΠ΅ΡΡ, ΠΏΡΠΎΡΠΎΠΊΠΎΠ» ΠΎΠ±ΠΌΠ΅Π½Π°.
| Β | ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΡΠ·Π²Π°ΡΡ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ? | ΠΠ΅ΡΡΡΡΠΊΡΠΎΡ |
|---|---|---|
| Π‘ΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ | Π΄Π°, ΠΏΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Π° | free_contents(), end_psession() |
| Π Π΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠΈΠΉ Π½Π°Π±ΠΎΡ | Π΄Π°, ΠΏΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Π° | free_result() |
| ΠΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠ΅Π³ΠΎ Π½Π°Π±ΠΎΡΠ° | Π΄Π°, ΠΏΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Π° | free() |
| ΠΠΏΠ΅ΡΠ°ΡΠΎΡ | Π΄Π°, ΠΏΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Π° | dtor(), free_stmt_content() |
| Π‘Π΅ΡΡ | Π΄Π°, ΠΏΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Π° | free() |
| ΠΡΠΎΡΠΎΠΊΠΎΠ» ΠΎΠ±ΠΌΠ΅Π½Π° | Π΄Π°, ΠΏΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Π° | free() |
ΠΠ΅ΡΡΡΡΠΊΡΠΎΡΡ ΡΠ²Π»ΡΡΡΡΡ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΡΡΠΈΠΌ ΠΌΠ΅ΡΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΡ ΡΠ΅ΡΡΡΡΡ, Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΡΠ΅
ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌΠΈ
mysqlnd_plugin_get_plugin_<object>_data().
ΠΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΠ΅ Π΄Π΅ΡΡΡΡΠΊΡΠΎΡΡ ΠΌΠΎΠ³ΡΡ Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ Ρ Π°ΠΊΡΡΠ°Π»ΡΠ½ΡΠΌΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ
mysqlnd Π΄Π»Ρ ΠΎΡΠΈΡΡΠΊΠΈ ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. ΠΠ΄Π½Π°ΠΊΠΎ ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡΡΡΡ ΡΠ°ΠΌΡΠΌ Π»ΡΡΡΠΈΠΌ
ΠΌΠ΅ΡΡΠΎΠΌ, ΠΊΡΠ΄Π° Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΠΊΠ»ΠΈΠ½ΠΈΡΡΡΡ Π΄Π»Ρ ΠΎΡΠΈΡΡΠΊΠΈ Π΄Π°Π½Π½ΡΡ
ΡΠ²ΠΎΠ΅Π³ΠΎ ΠΏΠ»Π°Π³ΠΈΠ½Π°. Π’Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ
Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°ΠΌΠΈ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΡΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ, Π½ΠΎ Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ Π½Π΅
ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ. ΠΡΠ»ΠΈ Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΡΠ°Π²ΠΈΡΡ Π² ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΡ
ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²
ΠΎΡΠΈΡΡΠΊΡ Π΄Π°Π½Π½ΡΡ
ΡΠ²ΠΎΠ΅Π³ΠΎ ΠΏΠ»Π°Π³ΠΈΠ½Π°, ΡΠΎ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ Π·Π°ΠΏΡΡΠΊ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΡ
ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² mysqlnd.
ΠΠ»Ρ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ β Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΠΎΠ΄ ΠΎΡΠΈΡΡΠΊΠΈ Π΄Π°Π½Π½ΡΡ ΠΏΠ»Π°Π³ΠΈΠ½Π° ΠΈ ΡΡΠ°Π·Ρ ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄.