我正在尝试让laravel与mssql一起工作,我总是得到这样的错误:
"SQLSTATEHY000无法连接:自适应服务器不可用或不存在(192.168.1.1:1433) (严重性9) (SQL: SELECT GETDATE()) (查看:/资源/视图/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);
?>
它工作得很好...laravel是否需要任何特殊配置或不使用pdo?
发布于 2018-10-07 05:57:30
您可能希望查看Laravel的SqlServerConnector类getDSN()方法返回的DSN类型。
它位于: /vendor/laravel/framework/src/Illuminate/Database/Connectors/SqlServerConnector.php
在我的例子中,我使用的是ODBC,但是getDSN()方法默认返回Dblib DSN。(ODBC和Dblib都在getAvailableDrivers()数组中,但它首先检查Dblib。)
laravel v5.6中的SqlServerConnector类getDsn()方法:
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);
}
更新:我刚刚注意到他们在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);
}
}
ODBC最终创建了一个覆盖的SqlServerConnector类,并将其注册到首先检查Per this answer的AppServiceProvider中。
https://stackoverflow.com/questions/52683179
复制相似问题