Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php sqlsrv_connect工作正常,但laravel失败:TCP提供程序:无法建立连接,因为目标计算机主动拒绝它_Php_Laravel_Sqlsrv - Fatal编程技术网

Php sqlsrv_connect工作正常,但laravel失败:TCP提供程序:无法建立连接,因为目标计算机主动拒绝它

Php sqlsrv_connect工作正常,但laravel失败:TCP提供程序:无法建立连接,因为目标计算机主动拒绝它,php,laravel,sqlsrv,Php,Laravel,Sqlsrv,不幸的是,我不得不让laravel与sql server对话。。我通常使用mysql。。并迅速发展出对sql server的仇恨 我正在本地主机上运行xampp进行开发。我可以使用navicat和sql server management studio连接并查询本地sql server sqlsrv_connect在php中运行良好,我可以毫无问题地手动运行查询。 mssql_connect在php中运行良好,我可以毫无问题地手动运行查询 但拉威尔失败了 在环境方面: DB_CONNECTION

不幸的是,我不得不让laravel与sql server对话。。我通常使用mysql。。并迅速发展出对sql server的仇恨

我正在本地主机上运行xampp进行开发。我可以使用navicat和sql server management studio连接并查询本地sql server

sqlsrv_connect在php中运行良好,我可以毫无问题地手动运行查询。 mssql_connect在php中运行良好,我可以毫无问题地手动运行查询

但拉威尔失败了

在环境方面:

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_主机有何不同

我收到

照亮\数据库\查询异常 SQLSTATE[08001]:[Microsoft][ODBC驱动程序17 for SQL Server]TCP提供程序:无法建立连接,因为目标计算机主动拒绝了它

php中同时启用了php_sqlsrv_72_ts_x64.dll和php_pdo_sqlsrc_72_x64.dll

我是否遗漏了一些简单而明显的东西

编辑:请注意,此代码是有效的

$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???

在供应商的laravels文件中调试。。结果是它试图连接到“andheld2”而不是“handheld2”

改变

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

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


在数据库中,配置使其工作。。它显然忽略了第一个字符。。出于某种原因?不管怎样。

如果有人发现自己在这里,也许这会有所帮助

在我的头撞了好几个小时后,我的修复方法非常简单。我正在重新安装所有东西(包括Sql Server),我必须打开Sql Server配置管理器(…我最后不得不在windows文件夹中搜索Sql Server Manager,因为我不知道确切的版本号,它是15)


然后,已禁用>SQL Server网络配置>MSSQLSERVER协议>TCP/IP。启用此功能后,请在Windows服务和viola中重新启动SQLSERVER,laravel可以工作。

您是否尝试过
php artisan配置:clear
?我刚刚尝试过。。缓存已成功清除,但没有更改我没有SQL Server或Windows,但防火墙中不会出现端口问题?试着把它完全打开,我也认为主机应该以'Server'开头`