Проблема с sqlsrv_connect на php, linux сервере - PullRequest
0 голосов
/ 17 мая 2019

Я могу подключиться к серверу sql удаленно.Строка подключения:

Provider=SQLOLEDB.1; Persist Security Info=True; Data Source=3.120.12.12;
Initial Catalog=StoreDB; User ID=mohan; PASSWORD=123456

Я использовал sqlsrv_connect для подключения:

$serverName = "3.120.12.12";
$connectionOptions = array
(
   "Database" => "StoreDB",
   "Uid" => "mohan",
   "PWD" => "123456"
);
$conn = sqlsrv_connect($serverName, $connectionOptions);
if($conn) echo "Connected!"; else die( print_r( sqlsrv_errors(), true));

Но это не подключается к базе данных и показывает следующую ошибку:

Array
(
[0] => Array
    (
        [0] => HYT00
        [SQLSTATE] => HYT00
        [1] => 0
        [code] => 0
        [2] => [Microsoft][ODBC Driver 17 for SQL Server]Login timeout expired
        [message] => [Microsoft][ODBC Driver 17 for SQL Server]Login timeout expired
    )

[1] => Array
    (
        [0] => 08001
        [SQLSTATE] => 08001
        [1] => 258
        [code] => 258
        [2] => [Microsoft][ODBC Driver 17 for SQL Server]TCP Provider: Error code 0x102
        [message] => [Microsoft][ODBC Driver 17 for SQL Server]TCP Provider: Error code 0x102
    )

[2] => Array
    (
        [0] => 08001
        [SQLSTATE] => 08001
        [1] => 258
        [code] => 258
        [2] => [Microsoft][ODBC Driver 17 for SQL Server]A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online.
        [message] => [Microsoft][ODBC Driver 17 for SQL Server]A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online.
    ))

После этой ошибки я изменяю $ serverName на «3.120.12.12:1433», и затем отображается эта ошибка:

Array ( [0] => Array ( [0] => HYT00 [SQLSTATE] => HYT00 [1] => 0 [code] => 0 [2] => [Microsoft][ODBC Driver 17 for SQL Server]Login timeout expired [message] => [Microsoft][ODBC Driver 17 for SQL Server]Login timeout expired ) [1] => Array ( [0] => 08001 [SQLSTATE] => 08001 [1] => 87 [code] => 87 [2] => [Microsoft][ODBC Driver 17 for SQL Server]MAX_PROVS: Connection string is not valid [87]. [message] => [Microsoft][ODBC Driver 17 for SQL Server]MAX_PROVS: Connection string is not valid [87]. ) [2] => Array ( [0] => 08001 [SQLSTATE] => 08001 [1] => 87 [code] => 87 [2] => [Microsoft][ODBC Driver 17 for SQL Server]A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online. [message] => [Microsoft][ODBC Driver 17 for SQL Server]A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online. ) )

Однако я могу подключиться к базе данных с помощью «Microsoft SQL Server Management»studio "без проблем.

Как можно подключиться к базе данных с помощью sqlsrv_connect?

1 Ответ

0 голосов
/ 28 июня 2019

Это либо брандмауэр, либо любые дополнительные функции безопасности, работающие в вашей системе, например selinux (если вы работаете в Red Hat).

Если у вас есть ядро ​​selinux, проверьте булевы значения и убедитесь, что httpd_can_network_connect_db выключен с getsebool -a.Если это от вас нужно включить его.Вы можете сделать это с помощью этой команды: setsebool -P httpd_can_network_connect_db 1

И не забудьте перезапустить ваш сервер (apache или nginx)

подробнее об этой команде здесь:

https://linux.die.net/man/8/setsebool

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...