kit*_*sei 7 php sql-server freetds laravel
我正在尝试从Ubuntu机器连接一个SQL服务器,除了命名实例之外,每个方法都很好用:
这很有效
'data' => array(
'driver' => 'sqlsrv',
'host' => 'xxxx',
'port' => 1433,
'database' => 'db',
'username' => 'user',
'password' => 'pwd',
'prefix' => '',
),
Run Code Online (Sandbox Code Playgroud)
这不
'data' => array(
'driver' => 'sqlsrv',
'host' => 'yyyy\NAMEDINSTANCE',
'port' => 1433,
'database' => 'db',
'username' => 'user',
'password' => 'pwd',
'prefix' => '',
),
Run Code Online (Sandbox Code Playgroud)
我总是最终得到这个错误:
exception 'PDOException' with message 'SQLSTATE[HY000] Unknown host machine name (severity 2)' in /var/www/public/my.api/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:47
Run Code Online (Sandbox Code Playgroud)
我尝试了所有可能的组合:
有人能帮我吗 ?
编辑:因为我也尝试过没有实例名称(如此处所述),脚本继续尝试连接,直到我收到此错误:
exception 'PDOException' with message 'SQLSTATE[HY000] Unable to connect: Adaptive Server is unavailable or does not exist (severity 9)' in /var/www/public/my.api/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:47
Run Code Online (Sandbox Code Playgroud)
任何编辑器如Management Studio,DBeaver或Database.NET只能通过指定INSTANCENAME连接到该实例,因此它似乎更像是DSN的PDO问题
我也试图直接连接到那个命名实例而tsql没有任何运气:
tsql -S SERVER -U usr -P pwd -L dbname
Run Code Online (Sandbox Code Playgroud)
这里的/etc/freetds.conf文件:
[global]
tds version = 8.0
client charset = UTF-8
port = 1433
dump file = /tmp/freetds.log
dump file append = yes
text size = 64512
[SERVER]
host = ip
port = 1433
instance = instance_name
[SERVER2]
host = ip
port = 1433
Run Code Online (Sandbox Code Playgroud)
和tds日志文件:
log.c:196:Starting log file for FreeTDS 0.91
on 2015-03-19 15:35:46 with debug flags 0x4fff.
iconv.c:330:tds_iconv_open(0xc163a0, UTF-8)
iconv.c:187:local name for ISO-8859-1 is ISO-8859-1
iconv.c:187:local name for UTF-8 is UTF-8
iconv.c:187:local name for UCS-2LE is UCS-2LE
iconv.c:187:local name for UCS-2BE is UCS-2BE
iconv.c:349:setting up conversions for client charset "UTF-8"
iconv.c:351:preparing iconv for "UTF-8" <-> "UCS-2LE" conversion
iconv.c:391:preparing iconv for "ISO-8859-1" <-> "UCS-2LE" conversion
iconv.c:394:tds_iconv_open: done
net.c:205:Connecting to 195.70.16.92 port 1433 (TDS version 7.1)
net.c:270:tds_open_socket: connect(2) returned "Operation now in progress"
net.c:306:getsockopt(2) reported: Connection timed out
net.c:316:tds_open_socket() failed
util.c:331:tdserror(0xc16140, 0xc163a0, 20009, 110)
util.c:361:tdserror: client library returned TDS_INT_CANCEL(2)
util.c:384:tdserror: returning TDS_INT_CANCEL(2)
mem.c:615:tds_free_all_results()
Run Code Online (Sandbox Code Playgroud)
当然,如果我尝试连接到SERVER2(这是一个非命名实例),一切顺利......
我终于找到了解决方案,有两个问题:
所以我最终使用了FreeTDS DSN和laravel的组合来连接SQL命名实例服务器.
该/etc/freetds.conf DSN配置:
[NAMED_INSTANCE]
host = 127.0.0.1
port = 55021
Run Code Online (Sandbox Code Playgroud)
在laravel数据库适配器中:
'webcmd' => array(
'driver' => 'sqlsrv',
'host' => 'NAMED_INSTANCE',
'database' => 'db',
'username' => 'usr',
'password' => 'pwd',
'prefix' => '',
),
Run Code Online (Sandbox Code Playgroud)
这解决了我的问题,希望它也会帮助别人
| 归档时间: |
|
| 查看次数: |
5259 次 |
| 最近记录: |