summaryrefslogtreecommitdiff
path: root/ext/pdo_mysql/pdo_mysql.c
diff options
context:
space:
mode:
authorOndřej Surý <ondrej@sury.org>2012-02-01 21:25:15 +0100
committerOndřej Surý <ondrej@sury.org>2012-02-01 21:25:15 +0100
commit96fb2ff5760132a915766f1d9ec7c63001feacd8 (patch)
tree160904a89a8f3522fa4e47632db101b045e7814a /ext/pdo_mysql/pdo_mysql.c
parent8f1428d29ef91d74b4d272af171675f2971eb15b (diff)
downloadphp-96fb2ff5760132a915766f1d9ec7c63001feacd8.tar.gz
Imported Upstream version 5.4.0~rc6upstream/5.4.0_rc6
Diffstat (limited to 'ext/pdo_mysql/pdo_mysql.c')
-rwxr-xr-xext/pdo_mysql/pdo_mysql.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/ext/pdo_mysql/pdo_mysql.c b/ext/pdo_mysql/pdo_mysql.c
index aa122efc9..814517558 100755
--- a/ext/pdo_mysql/pdo_mysql.c
+++ b/ext/pdo_mysql/pdo_mysql.c
@@ -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()
@@ -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);
}
/* }}} */