2012-02-13 4 views
6

Мне нужно подключиться к SQL Server 2008 через PHP (WAMP, последняя версия). У меня установлены и настроены драйверы sqlsrv, и они отображаются в phpinfo().Подключение к SQL Server 2008 через PHP

Я использую следующие строки для подключения к БД, с помощью проверки подлинности Windows:

$serverName = "(local)"; 
$connectionOptions = array("Database"=>"MyTestDatabase"); 
$conn = sqlsrv_connect($serverName, $connectionOptions) or die("Error!"); 

И я получаю следующее сообщение об ошибке:

Array 
( 
    [0] => Array 
    ( 
     [0] => IMSSP 
     [SQLSTATE] => IMSSP 
     [1] => -49 
     [code] => -49 
     [2] => This extension requires the Microsoft SQL Server 2011 Native Client. Access the following URL to download the Microsoft SQL Server 2011 Native Client ODBC driver for x86: http://go.microsoft.com/fwlink/?LinkId=163712 
     [message] => This extension requires the Microsoft SQL Server 2011 Native Client. Access the following URL to download the Microsoft SQL Server 2011 Native Client ODBC driver for x86: http://go.microsoft.com/fwlink/?LinkId=163712 
    ) 
    [1] => Array 
    ( 
     [0] => IM002 
     [SQLSTATE] => IM002 
     [1] => 0 
     [code] => 0 
     [2] => [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified 
     [message] => [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified 
    ) 
) 

Любая помощь будет большим, но, пожалуйста, будьте конкретны, так как я действительно не знаю своего пути вокруг WAMP, за исключением нескольких основ.

ответ

3

Ошибка вызвана ошибкой в ​​реестре. Существует ключ, в котором хранится путь к собственному клиенту, и личность, которую вы используете в пуле приложений, получает отказ в доступе.

  • Скачать Process Monitor и следуйте инструкциям на этой должности: http://www.iislogs.com/articles/processmonitorw3wp/ (В этом учебнике показано, как сделать это на IIS, с WAMP вам нужно будет найти EXE-процесс, который работает на память)
  • Найдите раздел реестра, в котором отказывается доступ к процессу w3wp.exe. Это в случае IIS, не уверен, что имя процесса в WAMP, но процедура такая же. В моем случае:

    HKLM\Software\ODBC\ODBCINST.INI\SQL Native Client 10.0 
    
  • Run смерзаться и найти ключ
  • правой кнопкой мыши и перейдите Права доступа
  • Добавить сетевую службу в список и дать ему разрешение на чтение.
  • Переработать приложение бассейн и он должен работать
+0

Да ... вы правы. Это также сработало для меня. Я наткнулся на это некоторое время назад, и я полностью забыл, что у меня даже был вопрос. Спасибо, что нашли время, чтобы подтвердить это: D – Eugen

+0

Но что, если я не получу «w3wp.exe» в диспетчере задач .. ?? –

+0

@NilayOnAndroid w3wp.exe - это процесс IIS. Если у вас нет этого, это означает, что ваш IIS не запущен. –

2

sqlsrv_connect PHP manual

Попробуйте этот подход, чтобы увидеть, что ошибка на самом деле:

$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

Я редактировал свой пост с ошибкой я теперь получаю. Спасибо, что нашли время ответить. – Eugen

+0

Исходя из вашей ошибки, похоже, что у вас нет собственного клиента Microsoft SQL Server 2011. Он предоставил ссылку для его загрузки. См. Третий пост здесь: http://forum.wampserver.com/read.php?2,53541,printview,page=1 – Jeremy

2

на основе вашей установки, вам, возможно, придется вернуться к функциям mssql_connect и соответствующие. Это отлично работает с mssql 2008, и вы обычно не теряете значимых функциональных возможностей.

Вот пример настройки соединения с базой данных. В зависимости от конфигурации может потребоваться добавить информацию порта и т.д.

$hostname = "server.domain.com"; 
$database = "DatabaseName"; 
$username = "LocalSQLUserName"; 
$password = "[email protected]"; 
$Connection = mssql_connect($hostname, $username, $password); 

Если вы работаете на окружающую среду XAMP, то он будет стоять собой разумеется, что вы работаете все локально. Если это так, ваш сервер будет localhost или 127.0.0.1, и вы можете определить свои собственные учетные записи в SQL. Как я уже сказал, я сам не использую учетные записи Windows, но вы можете добавить учетную запись NT на свой «сервер», а затем в инструменте управления SQL Server установить, чтобы пользователь имел доступ к используемой вами базе данных. Затем вы установили учетную запись и пароль и знаете, что они собой представляют. Если у вас возникли проблемы с учетной записью пользователя, вы можете попробовать computerName\userName.

Если вы не являетесь администратором, вам необходимо получить соответствующую информацию от них.

+0

Мне не нужно много функциональности, просто некоторые основные запросы в формате JSON. Еще одна вещь ... каковы параметры «имя-сервера», «пользователь» и «пароль», если я использую простейшую аутентификацию Windows по умолчанию ...? – Eugen

+0

Я скоро буду в офисе и заполню свой ответ, затем – AlexC

+0

@ Еуген. Я отредактировал свой ответ, чтобы показать пример моего подключения. Что касается Windows Auth, я лично избегаю этого по соображениям безопасности. Я всегда создаю локальную учетную запись для конкретной базы данных. – AlexC

Смежные вопросы