PHP_FUNCTION(mysqli_connect)
{
mysqli_common_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, FALSE);
-#if 0
- MY_MYSQL *mysql = NULL;
- MYSQLI_RESOURCE *mysqli_resource = NULL;
- zval *object = getThis();
- char *hostname = NULL, *username=NULL, *passwd=NULL, *dbname=NULL, *socket=NULL;
- unsigned int hostname_len = 0, username_len = 0, passwd_len = 0, dbname_len = 0, socket_len = 0;
- zend_bool persistent = FALSE;
- long port = 0;
- uint hash_len;
- char *hash_key = NULL;
- zend_bool new_connection = FALSE;
- zend_rsrc_list_entry *le;
- mysqli_plist_entry *plist = NULL;
-
- if (getThis() && !ZEND_NUM_ARGS()) {
- RETURN_NULL();
- }
-
- hostname = username = dbname = passwd = socket = NULL;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s&s&s&s&ls&", &hostname, &hostname_len, UG(utf8_conv),
- &username, &username_len, UG(utf8_conv), &passwd, &passwd_len, UG(utf8_conv),
- &dbname, &dbname_len, UG(utf8_conv), &port, &socket, &socket_len, UG(utf8_conv)) == FAILURE) {
- return;
- }
-
- if (!socket_len || !socket) {
- socket = MyG(default_socket);
- }
-
- if (!passwd) {
- passwd = MyG(default_pw);
- passwd_len = strlen(SAFE_STR(passwd));
- }
- if (!username){
- username = MyG(default_user);
- }
- if (!hostname || !hostname_len) {
- hostname = MyG(default_host);
- }
-
-
- if (object && instanceof_function(Z_OBJCE_P(object), mysqli_link_class_entry TSRMLS_CC)) {
- mysqli_resource = ((mysqli_object *) zend_object_store_get_object(object TSRMLS_CC))->ptr;
- if (mysqli_resource && mysqli_resource->ptr &&
- mysqli_resource->status >= MYSQLI_STATUS_INITIALIZED)
- {
- mysql = (MY_MYSQL*)mysqli_resource->ptr;
- php_clear_mysql(mysql);
- if (mysql->mysql) {
- mysqli_close(mysql->mysql, MYSQLI_CLOSE_EXPLICIT);
- mysql->mysql = NULL;
- }
- }
- }
- if (!mysql) {
- mysql = (MY_MYSQL *) ecalloc(1, sizeof(MY_MYSQL));
- }
-
- if (strlen(SAFE_STR(hostname)) > 2 && !strncasecmp(hostname, "p:", 2)) {
- hostname += 2;
- if (!MyG(allow_persistent)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Persistent connections are disabled. Downgrading to normal");
- } else {
- mysql->persistent = persistent = TRUE;
-
- if (!strlen(hostname)) {
- hostname = MyG(default_host);
- }
-
- hash_len = spprintf(&hash_key, 0, "mysqli_%s%ld%s%s%s", SAFE_STR(hostname),
- port, SAFE_STR(username), SAFE_STR(dbname),
- SAFE_STR(passwd));
-
- mysql->hash_key = hash_key;
-
- /* check if we can reuse exisiting connection ... */
- if (zend_hash_find(&EG(persistent_list), hash_key, hash_len + 1, (void **)&le) == SUCCESS) {
- if (Z_TYPE_P(le) == php_le_pmysqli()) {
- plist = (mysqli_plist_entry *) le->ptr;
-
- do {
- if (zend_ptr_stack_num_elements(&plist->free_links)) {
- mysql->mysql = zend_ptr_stack_pop(&plist->free_links);
-
- MyG(num_inactive_persistent)--;
- /* reset variables */
- /* todo: option for ping or change_user */
-#if G0
- if (!mysql_change_user(mysql->mysql, username, passwd, dbname)) {
-#else
- if (!mysql_ping(mysql->mysql)) {
-#endif
-#ifdef HAVE_MYSQLND
- mysqlnd_restart_psession(mysql->mysql);
-#endif
- MyG(num_active_persistent)++;
- goto end;
- } else {
-#if defined(HAVE_MYSQLND)
- mysqlnd_end_psession(mysql->mysql);
-#endif
- mysqli_close(mysql->mysql, MYSQLI_CLOSE_IMPLICIT);
- mysql->mysql = NULL;
- }
- }
- } while (0);
- }
- } else {
- zend_rsrc_list_entry le;
- le.type = php_le_pmysqli();
- le.ptr = plist = calloc(1, sizeof(mysqli_plist_entry));
-
- zend_ptr_stack_init_ex(&plist->free_links, 1);
- zend_hash_update(&EG(persistent_list), hash_key, hash_len + 1, (void *)&le, sizeof(le), NULL);
- }
- }
- }
-
- if (MyG(max_links) != -1 && MyG(num_links) >= MyG(max_links)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Too many open links (%ld)", MyG(num_links));
- goto err;
- }
- if (persistent && MyG(max_persistent) != -1 &&
- (MyG(num_active_persistent) + MyG(num_inactive_persistent))>= MyG(max_persistent))
- {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Too many open persistent links (%ld)",
- MyG(num_active_persistent) + MyG(num_inactive_persistent));
- goto err;
- }
-
-#if !defined(HAVE_MYSQLND)
- if (!(mysql->mysql = mysql_init(NULL))) {
-#else
- if (!(mysql->mysql = mysqlnd_init(persistent))) {
-#endif
- goto err;
- }
- new_connection = TRUE;
-
- if (UG(unicode)) {
- mysql_options(mysql->mysql, MYSQL_SET_CHARSET_NAME, "utf8");
- }
-
-#ifdef HAVE_EMBEDDED_MYSQLI
- if (hostname_len) {
- unsigned int external=1;
- mysql_options(mysql->mysql, MYSQL_OPT_USE_REMOTE_CONNECTION, (char *)&external);
- } else {
- mysql_options(mysql->mysql, MYSQL_OPT_USE_EMBEDDED_CONNECTION, 0);
- }
-#endif
-
-#if !defined(HAVE_MYSQLND)
- if (mysql_real_connect(mysql->mysql, hostname, username, passwd, dbname, port, socket, CLIENT_MULTI_RESULTS) == NULL)
-#else
- if (mysqlnd_connect(mysql->mysql, hostname, username, passwd, passwd_len, dbname, dbname_len,
- port, socket, CLIENT_MULTI_RESULTS, MyG(mysqlnd_thd_zval_cache) TSRMLS_CC) == NULL)
-#endif
- {
- /* Save error messages */
- php_mysqli_set_error(mysql_errno(mysql->mysql), (char *) mysql_error(mysql->mysql) TSRMLS_CC);
- php_mysqli_throw_sql_exception((char *)mysql_sqlstate(mysql->mysql), mysql_errno(mysql->mysql) TSRMLS_CC,
- "%s", mysql_error(mysql->mysql));
-
- /* free mysql structure */
- mysqli_close(mysql->mysql, MYSQLI_CLOSE_DISCONNECTED);
- goto err;
- }
-
- /* when PHP runs in unicode, set default character set to utf8 */
- if (UG(unicode)) {
- mysql->conv = UG(utf8_conv);
- }
-
- /* clear error */
- php_mysqli_set_error(mysql_errno(mysql->mysql), (char *) mysql_error(mysql->mysql) TSRMLS_CC);
-
-#if !defined(HAVE_MYSQLND)
- mysql->mysql->reconnect = MyG(reconnect);
-
- /* set our own local_infile handler */
- php_set_local_infile_handler_default(mysql);
-#endif
-
- mysql_options(mysql->mysql, MYSQL_OPT_LOCAL_INFILE, (char *)&MyG(allow_local_infile));
-
-end:
- if (!mysqli_resource) {
- mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE));
- mysqli_resource->ptr = (void *)mysql;
- }
- mysqli_resource->status = MYSQLI_STATUS_VALID;
-
- /* store persistent connection */
- if (persistent && new_connection) {
- MyG(num_active_persistent)++;
- }
-
- mysql->hash_key = hash_key;
- MyG(num_links)++;
-
-#if !defined(HAVE_MYSQLND)
- mysql->multi_query = 0;
-#else
- mysql->multi_query = 1;
-#endif
-
-
- if (!object || !instanceof_function(Z_OBJCE_P(object), mysqli_link_class_entry TSRMLS_CC)) {
- MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_link_class_entry);
- } else {
- ((mysqli_object *) zend_object_store_get_object(object TSRMLS_CC))->ptr = mysqli_resource;
- }
- return;
-
-err:
- efree(mysql);
- if (hash_key) {
- efree(hash_key);
- }
- RETVAL_FALSE;
-#endif
}
/* }}} */