我正在开发一个需要从外部MSSQL数据库获取数据的应用程序。我花了很多时间尝试使用PHP获取各种连接MSSQL的方法,但有几条折旧的路线。如何在Windows开发环境中使用PHP中的MSSQL进行PDO?
在我运行Debian的生产环境,我能充分利用PDO_DLIB和freetds的东西是这样的连接:
$this->db = new \PDO('dblib:host='.$thedb_host_prod.';dbname='.$thedb_database_name_prod, $thedb_database_user, $thedb_database_pass);
在Windows,MSSQL折旧。我相信我使用Microsoft SQL Server驱动程序,并只能够得到它使用ODBC,它看起来像这样的工作:
$dsn = "Driver={SQL Server};Server=".$thedb_host_dev.";Database=".$thedb_database_name_dev;
$this->odbc = odbc_connect($dsn, $thedb_database_user, $thedb_database_pass);
然后,问题变成,在每一个方法,我需要做些什么对于ODBC来说,与我为DLIB做的不同。
public function exampleMethod(){
// logic and create the query in $query
if($this->dev == false){
// PRODUCTION
try {
$stmt = $this->db->prepare($query);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_OBJ);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
} else {
// DEVELOPMENT
$query = $query;
$stmt = odbc_exec($this->odbc, ($query));
$result = array();
while($currentRow = odbc_fetch_object($stmt)){
$jobNumber = $currentRow->Code; // Set object key to jobNumber
array_push($result, $currentRow);
}
}
}
这实际工作,但问题是,如何与需要准备VS的DBLIB查询应该如何准备ODBC查询,也就是说,如果我不想在每两次编写查询方法,我必须在每个动作之前创建它。这是非常糟糕的,因为这意味着我没有将我的变量放入带有PDO bindValue的查询中。
那么,有没有人能够在Windows环境下使用PHP 5.4和MSSQL获得PDO?有没有人看到一种保护查询的方式,它不会让我在每种方法中重复查询,一次用于ODBC,一次用于DBLIB?
我的计划目前是开发应用程序,然后删除所有的ODBC的东西,这将允许我正确地把查询放在$ stmt,避免这个问题。但在此之前,这让发展成为巨大的痛苦。
谢谢你的回答。我也认为我的问题与我的64位WAMP安装有关。我按照你的指示并重新安装了WAMP,这次是32位,并能够使php_pdo_sqlsrv_54_ts.dll扩展工作。对于有类似问题的任何其他人警告一句话,在WAMP和Apache文件夹的PHP文件夹中也有一个php.ini文件。我必须在两个php.ini文件中启用扩展。 – Dominick