【问题标题】:Connect to SQL Server through PDO using SQL Server Driver使用 SQL Server Driver 通过 PDO 连接到 SQL Server
【发布时间】:2012-09-26 16:28:53
【问题描述】:

我正在尝试使用带有drivers provided by Microsoft 的 PDO 连接到现有 SQL Server 数据库。

我见过使用 odbc、dblib、mssql 等的示例,但是我认为与这些驱动程序的连接字符串应该使用 'sqlsrv'?

有没有很好的例子来说明如何正确地做到这一点?如果我应该通过其他方法执行此操作,请告诉我。谢谢!

【问题讨论】:

    标签: php sql-server windows pdo


    【解决方案1】:

    嗯,关于 PDO 最好的部分是它可以很容易地访问任何数据库。如果您已经安装了这些驱动程序,您应该能够:

    $db = new PDO("sqlsrv:Server=YouAddress;Database=YourDatabase", "Username", "Password");
    

    【讨论】:

    • 我需要在服务器上启用哪些驱动程序?只启用 pdo_odbc 会起作用吗?
    【解决方案2】:

    请注意,根据我和其他 (PHP - Why is new SQLSRV driver slower than the old mssql driver?) 的经验,使用 PDO_SQLSRV 比通过 PDO_ODBC 慢得多。

    如果您想使用更快的 PDO_ODBC,您可以使用:

    //use any of these or check exact MSSQL ODBC drivername in "ODBC Data Source Administrator"
    $mssqldriver = '{SQL Server}'; 
    $mssqldriver = '{SQL Server Native Client 11.0}';
    $mssqldriver = '{ODBC Driver 11 for SQL Server}';
    
    $hostname='127.0.0.1';
    $dbname='test';
    $username='user';
    $password='pw';
    $dbDB = new PDO("odbc:Driver=$mssqldriver;Server=$hostname;Database=$dbname", $username, $password);
    

    【讨论】:

    • 你可以检查我的问题相关serverfault.com/questions/722670/…
    • 这对我来说不适用于花括号。非常适合$mssqldriver = 'ODBC Driver 11 for SQL Server';
    • 在新服务器上,旧的 sqlsrv 驱动程序无法连接。这为我节省了很多时间。谢谢!
    【解决方案3】:

    想通了。很简单:

     new PDO("sqlsrv:server=[sqlservername];Database=[sqlserverdbname]",  "[username]", "[password]");
    

    【讨论】:

      【解决方案4】:

      这对我有用,在这种情况下是远程连接: 注意:端口对我很重要

      $dsn = "sqlsrv:Server=server.dyndns.biz,1433;Database=DBNAME";
      $conn = new PDO($dsn, "root", "P4sw0rd");
      $conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
      
      $sql = "SELECT * FROM Table";
      
      foreach ($conn->query($sql) as $row) {
          print_r($row);
      } 
      

      【讨论】:

        【解决方案5】:
        $servername = "";
        $username = "";
        $password = "";
        $database = "";
        $port = "1433";
        try {
            $conn = new PDO("sqlsrv:server=$servername,$port;Database=$database;ConnectionPooling=0", $username, $password,
                array(
                    PDO::ATTR_PERSISTENT => true,
                    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
                )
            );
        } catch (PDOException $e) {
            echo ("Error connecting to SQL Server: " . $e->getMessage());
        }
        

        【讨论】:

          【解决方案6】:
          try
          {
          
              $conn = new PDO("sqlsrv:Server=$server_name;Database=$db_name;ConnectionPooling=0", "", "");
              $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
          
          }
          catch(PDOException $e)
          {
          
              $e->getMessage();
          
          }
          

          【讨论】:

            猜你喜欢
            • 2021-01-10
            • 2010-10-22
            • 2020-10-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多