Как подключиться к серверу sql с помощью PHP7? (Что мне не хватает?)

Здесь вывод phpinfo: version.php

Здесь код:

$serverName = "X.X.X.X";
$connection = array( "UID"=>"UserID", "PWD"=>"Password123", "Database"=>"database_name");
$conn = sqlsrv_connect( $serverName, $connection);

if ($conn === false) {
    $myfile3 = fopen("log.txt", "w");
    fwrite($myfile3, sqlsrv_errors());
    fclose($myfile3);

};

$tsql = "SELECT top 10 pName from products";
$stmt = sqlsrv_query( $conn, $tsql);
$row = sqlsrv_fetch_array($stmt);

$myfile4 = fopen("log.txt", "w");
fwrite($myfile4,  $row[0]);
fclose($myfile4);
sqlsrv_free_stmt( $stmt);
sqlsrv_close( $conn);

Ничего не записывается в файл журнала. Даже если я жестко кодирую текст в файле fwrite ($ myfile3, "жестко закодированный текст" ); место, ничего не выписывается.

Здесь раздел расширения в файле php.ini

[ExtensionList]
;extension=php_mysql.dll
extension=php_mysqli.dll
extension=php_mbstring.dll
extension=php_gd2.dll
extension=php_gettext.dll
extension=php_curl.dll
extension=php_exif.dll
extension=php_xmlrpc.dll
extension=php_openssl.dll
extension=php_soap.dll
extension=php_pdo_mysql.dll
extension=php_pdo_sqlite.dll
extension=php_imap.dll
extension=php_tidy.dll
extension=php_sqlsrv_7_nts_x64.dll
;extension=php_sqlsrv_7_ts_x64.dll

Наконец, я знаю, что мне не нужны все эти, но это 4 библиотеки DLL, которые есть в папке ext.

php_sqlsrv_7_nts_x64.dll
php_sqlsrv_7_nts_x86.dll
php_sqlsrv_7_ts_x64.dll
php_sqlsrv_7_ts_x86.dll

Ответ 1

Использование pdo:

$serverName = "(local)\sqlexpress";  

/* Connect using Windows Authentication. */  
try  
{  
  $conn = new PDO( "sqlsrv:server=$serverName ; Database=AdventureWorks", "", "");  
  $conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );  
}  
catch(Exception $e)  
{   
  die( print_r( $e->getMessage() ) );   
} 

Процедурный способ:

$serverName = "(local)\sqlexpress";  
$connectionOptions = array("Database"=>"AdventureWorks");  

/* Connect using Windows Authentication. */  
$conn = sqlsrv_connect( $serverName, $connectionOptions);  
if( $conn === false )  
die(sqlsrv_errors());  

Нажмите здесь для дополнительной информации

Ответ 2

Сначала вам нужно изолировать вашу проблему - это что-то не так с вашей записью файла или что-то не так с подключением к SQL-серверу или что-то не так с вашей настройкой PHP?

Устранение неполадок SQL Server

Вы можете использовать флаг SQLSRV_ERR_ALL при вызове sqlsrv_errors() как можно более подробно, и использовать результат die() или просто print_r/echo на экране (вместо того, чтобы писать в файл), чтобы вы могли увидеть там что-то не так - посмотрите примеры на странице документации sqlsrv_connect.

Далее я попытаюсь убедиться, что вы правильно указываете порт, например:

$serverName = 'X.X.X.X, 1433';

Или укажите экземпляр SQL Server, например:

$serverName = 'X.X.X.X\sqlexpress';

Также убедитесь, что ваш пользователь, пароль и имя базы данных верны, и что пользователь, которого вы указали, имеет соответствующие разрешения для этой базы данных. И, конечно, он работает на порту 1433 (или измените приведенное выше на любой порт, на котором он запущен).

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

sqlsrv_configure('WarningsReturnAsErrors', true);
sqlsrv_configure('LogSubsystems', SQLSRV_LOG_SYSTEM_ALL);
sqlsrv_configure('LogSeverity', SQLSRV_LOG_SEVERITY_ALL);

Посмотрите, что это делает что-то более полезное с SQL-сервера напрямую.

Устранение неполадок при записи файлов

  • вам нужно взглянуть на fopen - вы можете использовать a режим вместо w, чтобы убедиться, что файл не усечен при его открытии
  • Вы также должны проверить, соответствует ли возвращенный $myfile3 false документации, если файл само открытое не работает.
    • Если это так, тогда у вас может возникнуть проблема с разрешениями в каталоге, который вы пытаетесь создать файл. Если файл уже создан за вас заранее (не нужно беспокоиться о его создании), у вас также могут быть права на запись в этот файл. Если open не работает, он должен создать E_WARNING (который должен отображаться на странице, так как ваша настройка error_reporting установлена ​​на E_ALL, но вы также можете проверить файл журнала ошибок PHP). Вы также можете использовать file_exists и is_readable(), чтобы проверить разрешения.
    • Когда вы говорите жесткое кодирование, значение записи не выполняет никаких записей, это заставляет меня думать, что это настоящая проблема.
  • Я бы также рассмотрел использование разных файлов журналов для каждой части (не log.txt в обоих случаях)

Устранение неполадок PHP

Взгляните на документацию Microsoft, чтобы убедиться, что ваши DLL соответствуют правильной DLL-версии PHP7, которую вы используете в своей версии Windows, хотя это не указывает требования к операционной системе для v4.0 драйвера: они могут не поддерживать Windows Server 2008, хотя я был бы удивлен. Они также не показывают, к каким версиям SQL-сервера они поддерживают подключение, поэтому, если вы используете старую версию SQL-сервера, это может быть проблемой.

Ответ 3

В качестве альтернативы вы можете попробовать вместо этого установить PDO_SQLSRV. Это пример подключения к SQL-Server с использованием проверки подлинности Windows.

$serverName = "(local)\sqlexpress";    

/* Connect using Windows Authentication. */  
try  
{  
$conn = new PDO( "sqlsrv:server=$serverName ; Database=database_name", "", "");  
$conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );  
}  
catch(Exception $e)  
{   
die( print_r( $e->getMessage() ) );   
} 

Для получения дополнительной информации см.

Ответ 4

Из документов это даст вам дополнительную информацию: http://php.net/manual/en/function.sqlsrv-connect.php

$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));
}

Если это не дает вам ошибки, возможно, вы не можете записать файл из-за разрешений?