我试图通过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;
答案 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);
}