Laravel + mssql не может подключиться - PullRequest
0 голосов
/ 06 октября 2018

Я пытаюсь заставить laravel работать с mssql, и всегда получаю эту ошибку:

"SQLSTATE [HY000] Невозможно подключиться: Adaptive Server недоступен или не существует (192.168.1.1:1433) (серьезность 9) (SQL: SELECT GETDATE ()) (View: /resources/views/teste.blade.php)"

, но если я попробую простой скрипт:

<?php 
 try {
$hostname = "192.168.1.1";
$port = 1433;
$dbname = "some_db";
$username = "some_user";
$pw = "some_pass";

$dbh = new PDO ("dblib:host=$hostname:$port;dbname=$dbname","$username","$pw");
  } catch (PDOException $e) {
    echo "Failed to get DB handle: " . $e->getMessage() . "\n";
    exit;
  }

$stmt = $dbh->prepare("select getdate()");

  $stmt->execute();


  while ($row = $stmt->fetch()) {
    print_r($row);
  }
  unset($dbh); unset($stmt);
?>

itработает нормально .... нужна ли laravel какая-то специальная конфигурация или не использует pdo?

1 Ответ

0 голосов
/ 07 октября 2018

Возможно, вы захотите узнать, какой тип DSN возвращает метод getDSN () класса SqlServerConnector Ларавела.

Он находится в: /vendor/laravel/framework/src/Illuminate/Database/Connectors/SqlServerConnector.php

В моем случае я использовал ODBC, но метод getDSN () возвращал DSN Dblib по умолчанию.(ODBC и Dblib оба были в массиве getAvailableDrivers (), но сначала он проверяет Dblib.)

Метод getDsn () класса SqlServerConnector в laravel v5.6:

protected function getDsn(array $config)
{

   // checks for dblib first, by default. =(

    if (in_array('dblib', $this->getAvailableDrivers())) {
        return $this->getDblibDsn($config);
    } elseif ($this->prefersOdbc($config)) {
        return $this->getOdbcDsn($config);
    }

    return $this->getSqlSrvDsn($config);
}

UPDATE:Я только заметил, что они изменили его в laravel v5.7:

protected function getDsn(array $config)
{

   // Checking for ODBC first, before DBlib!

    if ($this->prefersOdbc($config)) {
        return $this->getOdbcDsn($config);
    }

    if (in_array('sqlsrv', $this->getAvailableDrivers())) {
        return $this->getSqlSrvDsn($config);
    } else {
        return $this->getDblibDsn($config);
    }
}

За этот ответ В итоге я создал переопределяющий класс SqlServerConnector и зарегистрировал его в AppServiceProvider, который сначала проверял ODBC.

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