Невозможно подключиться к базе данных msSQL через PHP - PullRequest
5 голосов
/ 22 января 2009

Я использую текущий код при попытке доступа к базе данных msSQL 2005:

<?php
$myServer = "[server]";
$myUser = "[username]";
$myPass = "[password]";
$myDB = "[db]";

//connection to the database
$dbhandle = mssql_connect($myServer, $myUser, $myPass)
  or die("Couldn't connect to SQL Server on $myServer");

//select a database to work with
$selected = mssql_select_db($myDB, $dbhandle)
  or die("Couldn't open database $myDB");

//declare the SQL statement that will query the database
$query = "SELECT id, name, year ";
$query .= "FROM cars ";
$query .= "WHERE name='BMW'";

//execute the SQL query and return records
$result = mssql_query($query);

$numRows = mssql_num_rows($result);
echo "<h1>" . $numRows . " Row" . ($numRows == 1 ? "" : "s") . " Returned </h1>";

//display the results
while($row = mssql_fetch_array($result))
{
  echo "<li>" . $row["id"] . $row["name"] . $row["year"] . "</li>";
}
//close the connection
mssql_close($dbhandle);
?>

Возвращает следующее:

Warning: mssql_connect() [function.mssql-connect]: Unable to connect to server: XXXXXXX in D:\xxxxx.xxx\xxxx.php on line 16
Couldn't connect to SQL Server on XXXXXXX

Как вы думаете, в чем проблема?

Ответы [ 8 ]

5 голосов
/ 22 января 2009

Мне кажется, что одна из ваших библиотек DLL неправильная версия. При переходе с SQL2000 на SQL2005 возникла какая-то проблема, которую создатели PHP не решили сами. Здесь есть различные посты: по следующей ссылке

Я считаю, что DLL - это ntwdblib.dll, и версия должна быть как минимум 2000.80.194.0. Если вы используете Apache или WampServer, существует идентичная DLL, в которой хранятся библиотеки Apache DLL, которые необходимо перезаписать.

Примечание. У меня возникла эта проблема несколько дней назад, и я обнаружил, что правильные библиотеки DLL и перезапись позволили ей работать.

Также: возможно, вам потребуется настроить удаленные соединения. В Sql Server 2005 удаленные подключения отключены по умолчанию. Вы можете разрешить удаленные подключения, запустив утилиту настройки поверхности SQL.

4 голосов
/ 22 января 2009

Попробуйте позвонить mssql_get_last_message(), чтобы получить последнее сообщение об ошибке:

$dbhandle = mssql_connect($myServer, $myUser, $myPass)
  or die("Couldn't connect to SQL Server on $myServer. Error: " . mssql_get_last_message());
1 голос
/ 07 марта 2014

прекратить использование

mssql_connect

и начните использовать

sqlsrv_connect

Это избавит вас от многих головных болей. Кроме того, функция * mssql_connect * устарела.

Для использования sqlsrv_connect необходимо загрузить драйвер и установить его как расширение для PHP, чтобы распознавать функции sqlsrv . Загрузите драйвер из центра загрузки Microsoft (выполните поиск по запросу «драйвер php сервера sql»), на момент публикации этот URL-адрес был: http://www.microsoft.com/en-us/download/details.aspx?id=20098

Правильные шаги для установки четко объяснены самой Microsoft на http://www.microsoft.com/en-us/download/details.aspx?id=20098

  1. скачать драйвер. 2. положить его в папку PHP ext. 3. обновить php.ini 4. перезагрузить сервер.

После установки драйвера сервера sql просто следуйте инструкциям из http://www.php.net/manual/en/function.sqlsrv-connect.php. Ниже приведен быстрый фрагмент:

<?php
$serverName = "serverName\sqlexpress"; //serverName\instanceName

// Since UID and PWD are not specified in the $connectionInfo array,
// The connection will be attempted using Windows Authentication.
$connectionInfo = array( "Database"=>"dbName");
$conn = sqlsrv_connect( $serverName, $connectionInfo);

if( $conn ) {
     echo "Connection established.<br />";
}else{
     echo "Connection could not be established.<br />";
     die( print_r( sqlsrv_errors(), true));
}
?>

Проголосуй!

0 голосов
/ 20 ноября 2015

Поздний ответ, но это может кому-то помочь. мы почти на месте, это проблема с вашими параметрами подключения, вероятно, вам нужно указать имя_сервера как IP:port

имя_сервера :: Сервер MS SQL. например hostname:port (Linux), or hostname,port (Windows).

Имя сервера должно быть «сервер \ экземпляр» Экземпляр - это не более чем конкретный адрес порта, отличный от 1433 ... так что просто найдите порт на сервере mssql и попробуйте подключиться, используя: ip:port

Пример кода, который отлично работает для меня ::

    ini_set('display_errors', '1');
    // $myServer = "winsrv22.somedns.co.uk:22320";//this style works as well
    $servername = "123.21.47.23:22320";
    $myUser = "UserName";
    $myPass = 'xxxxxxxx';
    $myDB = "[database]"; 

    //connection to the database
    $dbhandle = mssql_connect($servername, $myUser, $myPass)
        or die("Couldn'tt connect to SQL Server on $myServer"); 
    if($dbhandle) {
     echo "Success, Connected\r\n";
    } else {
        echo "problem :( \r\n";
    }

Надеюсь, это кому-нибудь поможет :) Удачного кодирования !!

0 голосов
/ 27 июня 2014

Загрузите драйвер с этого сайта http://www.microsoft.com/en-us/download/details.aspx?id=20098,, затем откройте файл php.ini и добавьте загружаемую DLL.

0 голосов
/ 17 марта 2013

Сначала попробуйте сделать что-то вроде phpinfo() в вашем браузере, чем посмотреть, какие базы данных разрешены.

Если вы не видите ничего похожего на mssql, значит, оно не настроено. Поэтому используйте odbc_connect(), который будет настроен ... ваша строка подключения будет выглядеть так:

$server = '';
$user = '';
$password = '';
$database = '';
$connection = odbc_connect("Driver={SQL Server Native Client `11.0};Server=$server;Database=$database;", $user, $password);`

Если вы используете mssql 2005 или 2008, измените d 11.0 на 10.0, а для других версий просто измените версию вашего mssql.

0 голосов
/ 26 июня 2009

У меня были некоторые трудности с этим несколько месяцев назад, и я обнаружил, что единственный способ заставить его работать - это включить имя экземпляра при указании сервера. Например:

$myServer = "SERVER\INSTANCENAME";

Указание только сервера не будет работать, даже если включен протокол TCP / IP.

0 голосов
/ 22 января 2009

Неверные учетные данные, если вы не используете localhost, убедитесь, что вы добавили IP-адрес сервера в список безопасных.

...