sqlsrv_connect работает нормально, но laravel не работает с: Поставщик TCP: Соединение не может быть установлено, потому что целевая машина активно отказала ему - PullRequest
0 голосов
/ 03 октября 2019

К сожалению, мне нужно заставить laravel общаться с сервером sql .. Обычно я использую mysql .. и разработал быструю ненависть к серверу sql ..

Я запускаю xampp на localhost для разработки. Я могу подключиться и запросить к локальному серверу sql нормально с Navicat и с SQL Server Studio Studio.

sqlsrv_connect отлично работает в php, и я могу выполнять запросы вручную без проблем. mssql_connect прекрасно работает в php, и я могу запускать запросы без проблем.

, но laravel не удается.

в env:

DB_CONNECTION=sqlsrv
DB_HOST=localhost
DB_DATABASE=handheld2
DB_USERNAME=handheld
DB_PASSWORD=thepasswordhere
DB_PORT=1433

и в конфигурации базы данных laravel:

'sqlsrv' => [
            'driver' => 'sqlsrv',
            'url' => env('DATABASE_URL', 'localhost'),
            'host' => env('DB_HOST', 'localhost'),
            'port' => env('DB_PORT', '1433'),
            'database' => env('DB_DATABASE', 'handheld2'),
            'username' => env('DB_USERNAME', ''),
            'password' => env('DB_PASSWORD', ''),
            'charset' => 'utf8',
            'prefix' => '',
            'prefix_indexes' => true,
]

Мне не ясно, для чего нужен URL? чем это отличается от db_host?

я получаю

Подсветка \ База данных \ QueryException SQLSTATE [08001]: [Microsoft] [Драйвер ODBC 17 для SQL Server] Поставщик TCP: не может быть установлено соединениепотому что целевая машина активно отказалась от него.

и php_sqlsrv_72_ts_x64.dll и php_pdo_sqlsrc_72_x64.dll включены в php

я пропустил что-то простое и очевидное?

edit: обратите внимание, чтоэтот код работает

$connectionInfo = array(
    "Database"=>"handheld2",
    "UID" => "handheld",
    "PWD" => "thepasswordhere",
);
$conn = sqlsrv_connect("localhost", $connectionInfo);
if ($conn === false) {
    echo "Could not connect.\n";
    die(print_r(sqlsrv_errors(), true));
}
$stmt = sqlsrv_query($conn, 'SELECT top 1 * from users where users.id = 1');
if($stmt === false) {
    die( print_r( sqlsrv_errors(), true) );
}

while( $row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC) ) {
    print_r($row);
}

и распечатывает записи из базы данных .. так почему он работает здесь, но не работает как laravel ???

1 Ответ

0 голосов
/ 03 октября 2019

отладка в файлах laravels вендора. Оказывается, он пытался подключиться к 'andheld2' вместо 'handheld2'

, изменяя

'url' => env ('DATABASE_URL', 'handheld2'),

до

'url' => env ('DATABASE_URL', '/ handheld2'),

в конфигурации базы данных заставляет его работать. он явно игнорирует первый символ .. по какой-то причине? что угодно.

...