Laravel 到 SQL Server (sqlsrv)。 [PDOException] 找不到驱动程序
Posted
技术标签:
【中文标题】Laravel 到 SQL Server (sqlsrv)。 [PDOException] 找不到驱动程序【英文标题】:Laravel to SQL Server (sqlsrv). [PDOException] could not find driver 【发布时间】:2017-02-13 02:10:00 【问题描述】:介绍。我的 laravel 应用程序使用的是 mysql,现在它需要托管在我正在工作的公司的网络中(我是一名远程工作者)。而且这家公司是微软的偷窥者,所以我需要将 laravel 集成到他们的 SQL Server 中。
我的 .env 中有这个
DB_CONNECTION=sqlsrv
DB_HOST=ip.address.of.server
DB_PORT=3306
DB_DATABASE=my_db
DB_USERNAME=my_username
DB_PASSWORD=my_password
使用php artisan migrate
后
错误:
[PDOException]
could not find driver
我正在使用 Ubuntu,这是一个专门为我设计的远程机器(来自我的雇主)。我之前曾尝试在我的 laravel 应用程序中使用 sql server(使用我的 Windows PC)。据我记得,我在 xampp php.ini 中编辑了一些文本。作为一个 Linux 新手,对我来说太难了(因为我只使用 CLI)。
已编辑(新版本)
所以我已经获得了从 Ubuntu 到数据库服务器的连接。我使用了sqlcmd -S <host> -U <username>
我测试了查询(例如SELECT * from users_data
)并且它有效。
现在,我修改了config/database.php
并添加了这个。
'sqlsrv' => [
'driver' => 'MSSQL',
'host' => env('DB_HOST', 'host.of.the.database'),
'database' => env('DB_DATABASE', 'my_database'),
'username' => env('DB_USERNAME', 'my_username'),
'password' => env('DB_PASSWORD', 'my_pass'),
'port' => '1433',
'prefix' => '',
],
但我得到一个错误:
[InvalidArgumentException]
Unsupported driver [MSSQL]
“MSSQL”是我用来配置 FreeTDS 的名称。
【问题讨论】:
这可能会给你一些线索easysoft.com/products/data_access/odbc-sql-server-driver/… 这甚至可能是重复的***.com/questions/149395/… 我一直在关注这个askubuntu.com/questions/578934/mssql-connection-from-ubuntu,但它使用的是 MSSQL 而不是 sqlsrv。而且我找不到 /usr/local/etc/odbcinst.ini 对我来说,odbcinst.ini 在 /etc/odbcinst.ini 我不知道你是否找到了解决方案,但我和你有同样的问题。我可以使用命令行很好地连接到我的数据库,但 php 看不到驱动程序。 嗨@VahnMartyCagalawan,我也有同样的问题。你能解决吗? 【参考方案1】:在尝试运行这些命令之前始终运行sudo apt-get upgrade
。
谢谢,这些答案很有帮助。请让我解释一下我使用 laravel/homestead vagrant box 版本 7.1.0 和 PHP 7.3 做了什么。
我在我的流浪宅基地虚拟盒子中运行了命令sudo apt-get install freetds-common freetds-bin unixodbc php7.3-sybase
。
此命令两次提示我要么保留本地 php.ini 配置文件,要么使用“安装程序的版本”。我两次都选择使用安装程序的版本,一切都很好。 Here is my database.php file in my laravel config folder。另外,我设置了default => env('DB_CONNECTION', 'sqlsrv')
【讨论】:
【参考方案2】:安装 sybase 时,请确保它与您的 VM 使用的版本匹配。
运行
php --version
然后安装正确的sybase版本:
sudo apt-get install freetds-common freetds-bin unixodbc php7.#-sybase
如果您遇到编码错误,您还需要更新您的 freedts 和 php.ini 配置。更改 /etc/freetds/freetds.conf 使其看起来像:
[global]
# TDS protocol version
tds version = 8.0
# Whether to write a TDSDUMP file for diagnostic purposes
# (setting this to /tmp is insecure on a multi-user system)
; dump file = /tmp/freetds.log
; debug flags = 0xffff
# Command and connection timeouts
; timeout = 10
; connect timeout = 10
# If you get out-of-memory errors, it may mean that your client
# is trying to allocate a huge buffer for a TEXT field.
# Try setting 'text size' to a more reasonable limit
text size = 64512
client charset = UTF-8
# A typical Sybase server
[egServer50]
host = symachine.domain.com
port = 5000
tds version = 5.0
# A typical Microsoft server
[egServer70]
host = ntmachine.domain.com
port = 1433
tds version = 7.0
[mssql]
host =
Port = 1433
tds version = 8.0
将此添加到您的 php.ini:
client charset = UTF-8
【讨论】:
【参考方案3】:对于后来的人
确定你使用的PHP版本(对我来说宅基地目前使用php 7.1,所以我安装了php7.1-sybase)
sudo apt-get install freetds-common freetds-bin unixodbc php7.1-sybase
司机是
'sqlsrv' => [
'driver' => 'sqlsrv',
'host' => env('DB_HOST', 'localhost'),
'database' => env('DB_DATABASE', 'forge'),
'port' => env('DB_PORT', '1433'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'prefix' => '',
]
您可以使用 tsql 确保连接信息正确
TDSVER=8.0 tsql -H Host -U Username -D DatabaseName -p 1433 -P Password
【讨论】:
如何在 Windows 10 中执行此操作? @KeVin,你找到解决方案了吗?我在windows中也有同样的问题。 对于php7.2我换成了php7.2-sybase
不适用于 7.4,由于某些原因该包不存在【参考方案4】:
还有could not find driver
错误,安装以下包后解决:
sudo apt-get install freetds-common freetds-bin unixodbc php5-sybase
但是我使用的是sqlsrv
驱动程序,这是我的config/database.php
:
'sqlsrv' => [
'driver' => 'sqlsrv',
'host' => env('DB_HOST', 'localhost'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'prefix' => '',
],
【讨论】:
以上是关于Laravel 到 SQL Server (sqlsrv)。 [PDOException] 找不到驱动程序的主要内容,如果未能解决你的问题,请参考以下文章
使用 Laravel 在 SQL Server 中添加 varchar 列类型
在 Laravel 5.3 中从 SQL Server 获取多个结果集
Laravel 8:调用 DB::unprepared($sql) 时出现 ErrorException::("PDO::exec(): MySQL server has gone away