--- embedaddon/php/ext/pdo_mysql/pdo_mysql.c 2012/02/21 23:47:59 1.1.1.1 +++ embedaddon/php/ext/pdo_mysql/pdo_mysql.c 2012/05/29 12:34:41 1.1.1.2 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: pdo_mysql.c,v 1.1.1.1 2012/02/21 23:47:59 misho Exp $ */ +/* $Id: pdo_mysql.c,v 1.1.1.2 2012/05/29 12:34:41 misho Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -57,6 +57,30 @@ ZEND_DECLARE_MODULE_GLOBALS(pdo_mysql); # endif #endif +#ifdef PDO_USE_MYSQLND +#include "ext/mysqlnd/mysqlnd_reverse_api.h" +static MYSQLND * pdo_mysql_convert_zv_to_mysqlnd(zval * zv TSRMLS_DC) +{ + if (Z_TYPE_P(zv) == IS_OBJECT && Z_OBJCE_P(zv) == php_pdo_get_dbh_ce()) { + pdo_dbh_t * dbh = zend_object_store_get_object(zv TSRMLS_CC); + + if (!dbh || dbh->driver != &pdo_mysql_driver) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Provided PDO instance is not using MySQL but %s", dbh->driver->driver_name); + return NULL; + } + + return ((pdo_mysql_db_handle *)dbh->driver_data)->server; + } + return NULL; +} + +static MYSQLND_REVERSE_API pdo_mysql_reverse_api = { + &pdo_mysql_module_entry, + pdo_mysql_convert_zv_to_mysqlnd +}; +#endif + + /* {{{ PHP_INI_BEGIN */ PHP_INI_BEGIN() @@ -84,8 +108,8 @@ static PHP_MINIT_FUNCTION(pdo_mysql) REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_MAX_BUFFER_SIZE", (long)PDO_MYSQL_ATTR_MAX_BUFFER_SIZE); REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_READ_DEFAULT_FILE", (long)PDO_MYSQL_ATTR_READ_DEFAULT_FILE); REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_READ_DEFAULT_GROUP", (long)PDO_MYSQL_ATTR_READ_DEFAULT_GROUP); - REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_COMPRESS", (long)PDO_MYSQL_ATTR_COMPRESS); #endif + REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_COMPRESS", (long)PDO_MYSQL_ATTR_COMPRESS); REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_DIRECT_QUERY", (long)PDO_MYSQL_ATTR_DIRECT_QUERY); REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_FOUND_ROWS", (long)PDO_MYSQL_ATTR_FOUND_ROWS); REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_IGNORE_SPACE", (long)PDO_MYSQL_ATTR_IGNORE_SPACE); @@ -94,6 +118,11 @@ static PHP_MINIT_FUNCTION(pdo_mysql) REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_SSL_CA", (long)PDO_MYSQL_ATTR_SSL_CA); REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_SSL_CAPATH", (long)PDO_MYSQL_ATTR_SSL_CAPATH); REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_SSL_CIPHER", (long)PDO_MYSQL_ATTR_SSL_CIPHER); + +#ifdef PDO_USE_MYSQLND + mysqlnd_reverse_api_register_api(&pdo_mysql_reverse_api TSRMLS_CC); +#endif + return php_pdo_register_driver(&pdo_mysql_driver); } /* }}} */