As an example of typical (but not ideal) procedure of DB connection, let me post the source code from Joomla!CMS (it allows to use both variant: non-standard tcp/ip port or the non-standard socket/pipe):
- Code: Select all
function __construct( $options )
{
$host = array_key_exists('host', $options) ? $options['host'] : 'localhost';
$user = array_key_exists('user', $options) ? $options['user'] : '';
$password = array_key_exists('password',$options) ? $options['password'] : '';
$database = array_key_exists('database',$options) ? $options['database'] : '';
$prefix = array_key_exists('prefix', $options) ? $options['prefix'] : 'jos_';
$select = array_key_exists('select', $options) ? $options['select'] : true;
// Unlike mysql_connect(), mysqli_connect() takes the port and socket
// as separate arguments. Therefore, we have to extract them from the
// host string.
$port = NULL;
$socket = NULL;
$targetSlot = substr( strstr( $host, ":" ), 1 );
if (!empty( $targetSlot )) {
// Get the port number or socket name
if (is_numeric( $targetSlot ))
$port = $targetSlot;
else
$socket = $targetSlot;
// Extract the host name only
$host = substr( $host, 0, strlen( $host ) - (strlen( $targetSlot ) + 1) );
// This will take care of the following notation: ":3306"
if($host == '')
$host = 'localhost';
}
// perform a number of fatality checks, then return gracefully
if (!function_exists( 'mysqli_connect' )) {
$this->_errorNum = 1;
$this->_errorMsg = 'The MySQL adapter "mysqli" is not available.';
return;
}
// connect to the server
if (!($this->_resource = @mysqli_connect($host, $user, $password, NULL, $port, $socket))) {
$this->_errorNum = 2;
$this->_errorMsg = 'Could not connect to MySQL';
return;
}
// finalize initialization
parent::__construct($options);
// select the database
if ( $select ) {
$this->select($database);
}
}
PS. Using TeraWURFL 2.1.2 we've been forced to use workaround with ini_set:
- Code: Select all
if(strpos($host, ':')!==false)
{
list($host, $port) = explode(':', $host);
if(is_numeric($port))
ini_set('mysqli.default_port', $port);
else
ini_set('mysqli.default_socket', $port);
}
if($host == '')
$host = 'localhost';
TeraWurflConfig::$DB_HOST = $host;
but as you add support for nonstandard port to 2.1.3, we hope that support for nonstandard sockets/pipes will be added also.