diff options
| author | George Schlossnagle <gschlossnagle@php.net> | 2005-08-31 04:06:10 +0000 | 
|---|---|---|
| committer | George Schlossnagle <gschlossnagle@php.net> | 2005-08-31 04:06:10 +0000 | 
| commit | b247dc341860d9080494463998b2fbd786529b6c (patch) | |
| tree | 7a4c0e601677c680df62ee50646ed0d2dfa5d694 /ext/pdo_mysql/mysql_driver.c | |
| parent | 43f63e4753273f8d7f2a1dab11b9cd98bcc0c2e4 (diff) | |
| download | php-git-b247dc341860d9080494463998b2fbd786529b6c.tar.gz | |
MFH, fix 34072
Diffstat (limited to 'ext/pdo_mysql/mysql_driver.c')
| -rwxr-xr-x | ext/pdo_mysql/mysql_driver.c | 24 | 
1 files changed, 16 insertions, 8 deletions
| diff --git a/ext/pdo_mysql/mysql_driver.c b/ext/pdo_mysql/mysql_driver.c index b7297800a7..c017e97920 100755 --- a/ext/pdo_mysql/mysql_driver.c +++ b/ext/pdo_mysql/mysql_driver.c @@ -188,6 +188,13 @@ static int mysql_handle_preparer(pdo_dbh_t *dbh, const char *sql, long sql_len,  	if (mysql_stmt_prepare(S->stmt, sql, sql_len)) {  		/* TODO: might need to pull statement specific info here? */ +		/* if the query isn't supported by the protocol, fallback to emulation */ +		if (mysql_errno(H->server) == 1295) { +			if (nsql) { +				efree(nsql); +			} +			goto fallback; +		}  		pdo_mysql_error(dbh);  		if (nsql) {  			efree(nsql); @@ -212,9 +219,9 @@ static int mysql_handle_preparer(pdo_dbh_t *dbh, const char *sql, long sql_len,  	return 1; -#else -	stmt->supports_placeholders = PDO_PLACEHOLDER_NONE; +fallback:  #endif +	stmt->supports_placeholders = PDO_PLACEHOLDER_NONE;  	return 1;  } @@ -388,7 +395,7 @@ static int pdo_mysql_handle_factory(pdo_dbh_t *dbh, zval *driver_options TSRMLS_  #endif  		; -	php_pdo_parse_data_source(dbh->data_source, dbh->data_source_len, vars, 4); +	php_pdo_parse_data_source(dbh->data_source, dbh->data_source_len, vars, 5);  	H = pecalloc(1, sizeof(pdo_mysql_db_handle), dbh->is_persistent); @@ -415,14 +422,15 @@ static int pdo_mysql_handle_factory(pdo_dbh_t *dbh, zval *driver_options TSRMLS_  			goto cleanup;  		}  	} -	 + +	dbname = vars[1].optval; +	host = vars[2].optval;	 +	if(vars[3].optval) { +		port = atoi(vars[3].optval); +	}  	if (vars[2].optval && !strcmp("localhost", vars[2].optval)) {  		unix_socket = vars[4].optval;   -	} else { -		host = vars[2].optval; -		port = atoi(vars[3].optval);   	} -	dbname = vars[1].optval;  	if (mysql_real_connect(H->server, host, dbh->username, dbh->password, dbname, port, unix_socket, connect_opts) == NULL) {  		pdo_mysql_error(dbh);  		goto cleanup; | 
