¿Cómo puedo instalar pdo_sqlsrv en mi Windows 2008 Server 2008 R2? [cerrado]
Estoy tratando de usar PDO para conectarme a una base de datos de SQL Server. He estado luchando con esto por un poco ahora. Recibo este error fatal en mi página donde intento conectarme a SQL Server.
Error grave: excepción no detectada 'PDOException' con mensaje 'SQLSTATE [IMSSP]: esta extensión requiere que el controlador ODBC del cliente nativo de Microsoft SQL Server 2012 se comunique con SQL Server. Acceda a la siguiente URL para descargar el controlador ODBC de Microsoft SQL Server 2012 Native Client para x86:http://go.microsoft.com/fwlink/?LinkId=163712'
He descargado los discos dehttp://www.microsoft.com/en-us/download/details.aspx?id=20098 (SQLSRV30.EXE) He colocado esos controladores en el directorio ext donde está instalado php en el servidor Server 2008 R2.
También he agregado estas 2 líneas al final de la lista de extensiones en el archivo php.ini
extension=php_pdo_sqlsrv_53_nts.dll
extension=php_sqlsrv_53_nts.dll
Estoy usando PH PVersion 5.3.19 Servidor API CGI / FastCGI Thread Safety desactivado
Yo veopdo_sqlsrv
pero no veo una versión de API de cliente.
¿Qué más debo hacer para poder usar PDO para conectar con el servidor remoto que tiene bases de datos SQL? ¿Necesito instalar algo en los servidores remotos?
esta es una captura de pantalla de mi php mi sección de administración
Esta es mi clase de conexion
<?php
class connection {
private $connString;
private $userName;
private $passCode;
private $server;
private $pdo;
private $errorMessage;
protected $lastQueryTime;
protected $lastQuery;
private $pdo_opt = array (
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"
);
function __construct($dbName = DATABASE_NAME, $serverName = DATABASE_HOST){
//sets credentials
$this->setConnectionCredentials($dbName, $serverName);
//start the connect
$this->startConnection();
}
function startConnection(){
$this->pdo = new PDO($this->connString, $this->userName, $this->passCode, $this->pdo_opt);
if( ! $this->pdo){
$this->errorMessage = 'Failed to connect to database. Please try to refresh this page in 1 minute. ';
$this->errorMessage .= 'However, if you continue to see this message please contact your system administrator.';
echo $this->getError();
}
}
//this will close the PDO connection
public function endConnection(){
$this->pdo = null;
}
//return a dataset with the results
public function getDataSet($query, $data = NULL)
{
$start = microtime(true);
$cmd = $this->pdo->prepare( $query );
$cmd->execute($data);
$ret = $cmd->fetchAll();
//$cmd->closeCursor();
$this->lastQueryTime = microtime(true) - $start;
$this->lastQuery = $query;
return $ret;
}
public function processQuery($query, $data = NULL)
{
$start = microtime(true);
//$this->pdo->beginTransaction();
$cmd = $this->pdo->prepare( $query );
$ret = $cmd->execute($data);
//$this->pdo->commit();
//$cmd->closeCursor();
$this->lastQueryTime = microtime(true) - $start;
$this->lastQuery = $query;
return $ret;
}
//return last insert id
public function lastInsertId($name = NULL) {
if(!$this->pdo) {
return false;
}
return $this->pdo->lastInsertId($name);
}
public function getOneResult($query, $data = NULL){
$cmd = $this->pdo->prepare( $query );
$cmd->execute($data);
return $cmd->fetchColumn();
}
public function getError(){
if($this->errorMessage != '')
return $this->errorMessage;
else
return true; //no errors found
}
//this where you need to set new server credentials with a new case statment
function setConnectionCredentials($dbName, $serv){
switch($serv){
//MS SQL server
case 'SQLSERVER':
$this->connString = 'sqlsrv:server='.$serv.';database='.$dbName;
$this->userName = 'username';
$this->passCode = 'password';
break;
//the defaults are predefined in the APP_configuration file - DO NOT CHANGE THE DEFAULT
default:
$this->connString = 'mysql:host='.DATABASE_HOST.';dbname='.DATABASE_NAME.';charset=utf8';
$this->userName = DATABASE_USERNAME;
$this->passCode = DATABASE_PASSWORD;
break;
}
}
public function lastQueryTime() {
if(!$this->lastQueryTime) {
throw new Exception('no query has been executed yet');
}
return $this->lastQueryTime;
}
public function lastQuery() {
if(!$this->lastQuery) {
throw new Exception('no query has been executed yet');
}
return $this->lastQuery;
}
}
?>
Así es como uso mi clase para extraer un conjunto de datos
<?php
include('connection.php');
$sql_db = new connection('databaseName','SQLSERVER');
$call_details = $sql_db->getDataSet('SELECT
LocalUserId AS loginName,
RemoteNumberCallId AS PhoneNumber,
SUM(CallDurationSeconds + HoldDurationSeconds + LineDurationSeconds) AS totalTalk
FROM dbo.CallDetail WHERE LocalUserId = \'blah\' AND RemoteNumberCallId = \'123456789\'
GROUP BY LocalUserId, RemoteNumberCallId');
$call_details->endConnection();
?>
Incluso he probado este código, así que no usaré mi clase y sigo recibiendo el mismo error
$ss = new PDO("sqlsrv:server=SQLSERVER; Database=databaseName", "userName", "Password");