|  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #51242 Empty mysql.default_port does not default to 3306 anymore, but 0
Submitted: 2010-03-09 00:33 UTC Modified: 2010-03-09 06:08 UTC
From: php-bugs at thequod dot de Assigned: aharvey (profile)
Status: Closed Package: MySQL related
PHP Version: 5.3.2 OS:
Private report: No CVE-ID: None
 [2010-03-09 00:33 UTC] php-bugs at thequod dot de
I've upgraded a server to PHP 5.3.2 (from, and got "Connection 
refused" errors from mysql_connect.

The cause was that I've not specified a port with $host, and PHP used "0" 
  Connection refused (trying to connect via tcp://

I have “mysql.default_port = ” in the ini file, which is the default (I assume), 
and it defaulted to 3306 then previously (5.3.1 from dotdeb), but not anymore.


Add a Patch

Pull Requests

Add a Pull Request


AllCommentsChangesGit/SVN commitsRelated reports
 [2010-03-09 00:54 UTC] php-bugs at thequod dot de
TML could not reproduce this on ##php:

php -d mysql.default_port="" -r '$db = mysql_connect("") or 
die(mysql_error()); var_dump($db);'

I can (although using another IP).

The difference is also that I'm using the Suhosin patch (via and TML 
is not.
 [2010-03-09 05:20 UTC]
-Status: Open +Status: Assigned
 [2010-03-09 05:20 UTC]
I can reproduce this with a current, unpatched PHP_5_3 build. It does require an 
unusual and rather specific set of circumstances, though:

1. PHP has to be configured with --with-mysql-sock set and mysqlnd support.
2. mysql.default_port= must be in a configuration file without a value.
3. mysql_connect() must be called without a port specified.

Effectively, the empty string for the port setting gets converted by the atoi() 
call in OnMySQLPort to 0, which results in mysqlnd's connect method being called 
with port = 0. Said connect method has a test where the port is set to 3306 if 
both the port and socket aren't specified. In this case, of course, the socket 
is specified, even though it's unused, and hence the port number never gets 

This works with an external libmysqlclient because mysql_real_connect() handles 
the port being 0.

Fix forthcoming shortly, once I've satisfied myself it doesn't break anything 
 [2010-03-09 06:08 UTC]
Automatic comment from SVN on behalf of aharvey
Log: Fixed bug #51242 (Empty mysql.default_port does not default to 3306 anymore, but 0).
 [2010-03-09 06:08 UTC]
-Status: Assigned +Status: Closed
 [2010-03-09 06:08 UTC]
This bug has been fixed in SVN.

Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
Thank you for the report, and for helping us make PHP better.

PHP Copyright © 2001-2023 The PHP Group
All rights reserved.
Last updated: Tue Oct 03 14:01:25 2023 UTC