2014-02-25 33 views
1

我想通過PHP PDO擴展從Linux(Ubuntu 12.04)服務器訪問SQL窗口服務器,但是顯示「連接已重置」來自瀏覽器。「連接被重置」在PHP-PDO

守則 -

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; 

回答

0

這是PHP的一個已知的bug。有關更多信息,請參閱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); 
}