无法使用PDO连接到本地服务器?

时间:2015-09-10 21:31:07

标签: php sql-server pdo

我一直在玩PHP。这就是我连接到sql server的方式,它可以工作:

$serverName = "SNAME";
$connectionInfo = array( "Database"=>"DBNAME", "UID"=>"USERNAME", "PWD"=>"PASSWORD");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
$sql = "SELECT X FROM myTable";
$query = sqlsrv_query($conn,$sql);
if ($query === false){  
    echo "Could not link to SQL Server";
}
while ($row = sqlsrv_fetch_array($query))
{
    $ARRAY[] = "$row[X]";
}

服务器SNAME位于本地网络上,我可以使用Sql Management Studio从我的计算机连接到它。

现在查看在线和其他地方我已经意识到PDO是更好的方法。所以我一直在尝试使用PDO连接到我的服务器,在线跟踪示例。这是代码:

$username = "USERNAME";
$password = "PASSWORD";
try{
   $conn = new PDO('mysql: host=SNAME;port=1433;dbname=DBNAME',$username,$password);
   $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
   $data = $conn->query('SELECT X FROM myTable');

   foreach($data as $row) {
        print_r($row); 
   }
}
catch{
    echo 'ERROR: ' . $e->getMessage();
}

当我运行这个时,我会在我的页面上看到这个:

  

错误:SQLSTATE [HY000] [2002]无法建立连接,因为   目标机器积极拒绝它。

现在我知道我的其他信息是正确的,因为我可以使用顶部块和sql管理工作室。有没有其他图书馆或特殊需要的东西。我的代码有问题吗?

更新 我在我的SQL Management Studio中运行它来检查我的端口,它给了我1433.

SELECT DISTINCT local_tcp_port FROM sys.dm_exec_connections WHERE local_tcp_port IS NOT NULL

1 个答案:

答案 0 :(得分:0)

在一个示例中,您使用的是sqlsrv_connect,但在另一个示例中,您告诉PDO连接到'mysql:'数据库。

您需要将正确的 DSN字符串用于SQL Server连接。

$conn = new PDO('sqlsrv:Server=SNAME,1433;Database=DBNAME',$username,$password);

手动:http://php.net/manual/en/ref.pdo-sqlsrv.connection.php

P.S。确保已安装PDO_SQLSRVhttp://php.net/manual/en/ref.pdo-sqlsrv.php