formDin
formDin copied to clipboard
SqlServer not port
SqlServer not port
Está relacionado com https://pt.stackoverflow.com/questions/396341/como-conectar-pdo-com-inst%c3%a2ncias-nomeadas-do-sqlserver
Solução em https://github.com/microsoft/msphpsql/issues/927#issuecomment-510185524
/***
* By Peter Stalman (Sarke)
* https://github.com/microsoft/msphpsql/issues/927
*/
function getPortSqlServer($host, $instance) {
$msg = chr(4) . $instance;
// make the UDP request
$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
socket_connect($socket, $host, 1434);
socket_write($socket, $msg, strlen($msg));
$buf = '';
socket_recv($socket, $buf, 2048, MSG_WAITALL);
socket_close($socket);
// format it nicely
$recv = explode(chr(0), $buf, 2);
$info = [];
foreach (array_chunk(explode(';', rtrim($recv[1], ';')), 2) as $pair)
$info[$pair[0]] = $pair[1];
//For Debug
//var_dump($info);
//$correctServer = $host . ',' . $info['tcp']; // 192.168.12.34,49161
//var_dump($correctServer);
return $info['tcp'];
}
function getHostPort($server, $port=null) {
list($host, $instance) = explode('\\', $server);
if( !empty($instance) && empty($port) ){
$port = getPortSqlServer($host,$instance);
}
if( !empty($port) ){
$server = $server.','.$port;
}
return $server;
}
$hostname = "SERVERNAME\INSTANCENAME";
$hostname = getHostPort($hostname);
$dbname = "myDataBase";
$username = "myUser";
$password = "myPass";
$conn = new PDO('sqlsrv:Server='.$hostname.';Database='.$dbname, $username , $password);