haw*_*awx 5 php sql-server ubuntu pdo azure
我有以下脚本连接到我的microsoft azure服务器.
<?php
try {
$hostname = "secrets.database.windows.net";
$dbname = "secrets";
$username = "secrets";
$pw = "secrets";
$dbh = new PDO ("dblib:host=$hostname;dbname=$dbname","$username","$pw");
} catch (PDOException $e) {
echo "Failed to get DB handle: " . $e->getMessage() . "\n";
exit;
}
echo "Passed!";
Run Code Online (Sandbox Code Playgroud)
上面的脚本传递我的旧服务器,但从新服务器执行时给我以下错误消息.
SQLSTATE[01002] Adaptive Server connection failed (severity 9)
Run Code Online (Sandbox Code Playgroud)
我的新服务器PHP设置如下:
sudo apt-get install -y php5.6-fpm php5.6-ldap php5.6-curl php5.6-cli php5.6-mcrypt php5.6-intl php5.6-json php5.6-pdo-dblib php5.6-mysqlnd php5.6-memcached php5.6-mbstring php5.6-imap php5.6-xml php5.6-sybase
Run Code Online (Sandbox Code Playgroud)
到目前为止我的检查:
1)两者都具有相同的面向公众的IP地址.
2)两者都具有相同的PHP PDO/ODBC设置.
$ php -i | grep PDO
DO
PDO support => enabled
PDO drivers => dblib, mysql, odbc
PDO Driver for FreeTDS/Sybase DB-lib => enabled
PDO Driver for MySQL => enabled
PDO_ODBC
PDO Driver for ODBC (unixODBC) => enabled
Run Code Online (Sandbox Code Playgroud)
3)我可以使用以下服务器使用telnet ping我的服务器:
telnet secrets.database.windows.net 1433
Run Code Online (Sandbox Code Playgroud)
任何建议,将不胜感激.
haw*_*awx 10
经过一些进一步的谷歌搜索,我遇到了这个答案.
原来我只需要更新我的/etc/freetds/freetds.conf
我的变化:
未注释的TDS协议版本并已更新.
tds version = 8.0
Run Code Online (Sandbox Code Playgroud)
在下面添加了mssql示例.
[mssql]
host =
Port = 1433
tds version = 8.0
Run Code Online (Sandbox Code Playgroud)
我在这里遇到了同样的问题,但通过直接在 PHP 代码中将 FreeTDS 8.0 版本添加到连接中来修复它:
<?php
try {
$hostname = "secrets.database.windows.net";
$dbname = "secrets";
$username = "secrets";
$pw = "secrets";
$dbh = new PDO ("dblib:version=8.0;charset=UTF-8;host={$hostname};dbname={$dbname}", $username, $pwd);
} catch (PDOException $e) {
echo "Failed to get DB handle: " . $e->getMessage() . "\n";
exit;
}
echo "Passed!";
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25434 次 |
| 最近记录: |