在PHP-PDO中“重置了连接”

时间:2014-02-25 05:46:40

标签: php pdo freetds

我试图通过PHP PDO扩展从Linux(ubuntu 12.04)服务器访问SQL Window Server,但是从浏览器向我显示“连接已重置”。

代码是 -

 try {
        self::$instance = new PDO('odbc:Driver=FreeTDS; Server=192.168.0.21; Port=1433; Database=MSSQLTips; UID=XXXX; PWD=XXXXX');
        self::$instance->setAttribute(PDO::ATTR_PERSISTENT, true);
        self::$instance->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);       

      } catch (PDOException $exception) {
            trigger_error($error->getMessage());
      }

访问代码是

$query = 'SELECT * FROM tblEmployee where Employee_Id = ?';       
$sth = $this->db->prepare($query);               
$sth->execute(array('1557'));
$result = $sth->fetch();
echo "<pre>"; print_r($result); die;

1 个答案:

答案 0 :(得分:0)

这是PHP中的已知错误。有关详细信息,请参阅bug report 64483

作为pdo_odbc的替代方法,您可以使用pdo_dblib驱动程序从Linux上的PHP访问MS SQL Server。请参阅PHP documentation on pdo_dblib

我已调整您的代码以使用dblib。

try { 
    self::$instance = new PDO ("dblib:host=192.168.0.21:1433;dbname=MSSQLTips","XXXX","XXXXX");
    self::$instance->setAttribute(PDO::ATTR_PERSISTENT, true);
    self::$instance->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);       

  } catch (PDOException $ex) {
      $msg = htmlentities($ex->getMessage());    
      trigger_error($msg);
  }

然后:

$query = 'SELECT * FROM tblEmployee where Employee_Id = ?';       
$sth = $this->db->prepare($query);
$sth->bindValue(1, "1557", PDO::PARAM_INT);               
$sth->execute();
$result = $sth->fetchAll();
if($result === false) {
    throw new Exception("Unable to fetch result.");
}

try {
    echo "<pre>"; 
    print_r($result);
    echo "</pre>";
} catch (Exception $ex) {
    $msg = htmlentities($ex->getMessage());
    trigger_error($msg,E_WARNING);
}