我一直在为我的Android应用程序使用azure移动服务。 然后我想使用Php。
使用我的Localhost和远程服务器访问我的数据库数据我尝试了以下Azure文档提供的代码。
$conn = new PDO ( "sqlsrv:server = tcp:MYSERVERNAME.database.windows.net,1433; Database = MY_DATABASE_NAME", "MY_USER_NAME", "MY_PASSWORD" );
try {
$conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
} catch ( PDOException $e ) {
print( "Error connecting to SQL Server." );
die( print_r( $e ) );
};
当代码在Localhost或远程服务器上运行时,即Linux服务器,我收到错误
修改
我认为这是关于Azure防火墙规则的,我在服务器
的Azure防火墙规则中添加了我的IP号码当我尝试通过SQLPro连接到服务器时,我可以成功连接并开始查询。但我不能通过Localhost与我的Php代码连接。
答案 0 :(得分:4)
您使用的函数PDO sqlsrv:server
需要SQLSRV extension
php_pdo_sqlsrv_53_nts.dll
,但它只与在Windows上运行的PHP兼容。
要在Unix中使用PHP连接到SQL服务器,可以使用ODBC
扩展名和Microsoft's SQL Server ODBC Driver for Linux。
答案 1 :(得分:1)
从Linux服务器连接Azure SQL DB的另一个建议是使用sqlshim。 sqlshim项目旨在在Linux / OS X上复制用于PHP的Microsoft SQL Server驱动程序(sqlsrv)。
以下是该项目的链接:https://github.com/radsectors/sqlshim
以下是如何安装它:
Download the latest release from: https://github.com/radsectors/sqlshim/releases
Extract src/sqlshim.php and src/globals.php.
Include it.
require 'src/sqlshim.php';
干杯,
符合
答案 2 :(得分:-1)
您是否将防火墙例外添加到数据库或数据库实例?
实例级别(在主服务器上运行):
EXECUTE sp_set_firewall_rule N'my_rule','123.0.0.1','123.0.0.1';
--EXECUTE sp_set_firewall_rule N'rule_name','IP_Range_low','IP_Range_high';
数据库级别(在目标数据库上运行):
EXECUTE sp_set_database_firewall_rule N'my_db_rule';
,'123.0.0.1' --IP_Range_low
,'123.0.0.1' --IP_Range_high