Blog

Archivo: marzo de 2010

Conectar desde php a SQL Azure. Problemas con MARS

Publicado en Cloud Computing Desarrollo web Sistemas TI en marzo 31, 2010 11:49 am

Por defecto y desde su versión 1.1, el driver oficial para trabajar con sql server 2005 o superior desde php realiza conexiones con marte MARS (Multiple Active Result Sets) activado.

Actualmente SQL Azure no soporta MARS, y para que nuestra conexión no fuerce la activación de esta funcionalidad en SQL Server tendremos que indicarle en el array de conexión lo siguiente:


$BD_SERVER = "[TOKEN].database.windows.net";
$BD_CONECTION_INFO   = array(
                              "UID"=>"blackslot@[TOKEN]",
                              "PWD"=>"P@ssw0rd",
                              "Database"=>"nombre_bd",
                              "ReturnDatesAsStrings"=> true,
                              "CharacterSet" => 'utf-8',
                              //Aquí desactivamos MARS
                              'MultipleActiveResultSets'=> false);

Nuestros planes grid ya soportan asp.net MVC 2

Publicado en Desarrollo web Novedades Nuestros servicios en marzo 30, 2010 9:30 pm

asp.net mvc

Hace un par de semanas se anunciaba la segunda versión del framework asp.net MVC 2, totalmente compatible con los desarrollos sobre asp.net MVC 1.

Además de helpers fuertemente tipados, validación de modelos y controladores asincronos nos encontramos otras novedades que  Scott Guthrie mencionó en su blog el día del lanzamiento

Podéis ver videos y materiales de introducción sobre el framework en el nuevo sitio web oficial.

Por nuestra parte acabamos de actualizar nuestros servidores grid Microsoft y ya disponen de soporte para MVC 2, además de contar como hasta ahora de SQL Server 2008.

Recordaros que podéis probar estos servicios por 1€ al mes durante 6 meses gracias a nuestra promoción junto a Microsoft.

Un vistazo al driver php_sqlsrv para trabajar con bases de datos Sql Server 2005 o superior en php

Publicado en Desarrollo web Sistemas TI en marzo 30, 2010 1:09 pm

Desde hace algunos años, sobre todo desde que fué publicada la versión 2005 de Sql server, el driver  que se facilita en los paquetes de php por defecto está considerado deprecated y no desaconseja su uso.

En su lugar por suerte disponemos de php_sqlsrv, una extensión creada desde Microsoft con la que podemos aprovechar de una forma mucho más avanzada este expléndido motor de bases de datos.

Traducción nativa de los datos a utf-8

Por empezar a comentaros, una de las características que más me han gustado en la versión 1.1 de este driver, es la traducción nativa y transparente de la codificación de los datos desde utf-8 a ucs-2 y viceversa.

Para quien haya tenido un mínimo de experiencia desarrollando aplicaciones en internet, la importancia de usar codificación UTF-8 es clave, nos puede evitar pasar varias noches sin dormir al encontrarnos multitud de problemas al integrar aplicaciones, consumir datos de fuentes externas o migrar a otras plataformas.

Es un detalle que los desarrolladores de esta librería le hayan dado prioridad a esta caracteristica vital para desarrolladores de aplicaciones php.

Para activar esta característica, os recomiendo que lo hagaís, basta con especificar el enconding en el array de conexión:

$params =  array(

"UID"  => "usuario",
"PWD"   => "password",
"Database" => "base_de_datos"

);

$params["CharacterSet"] = "utf-8";
$conexion = sqlsrv_connect( "nombre_de_la_instancia", $params);

Campos de tipo fecha recuperables como cadenas

Por defecto el driver nos permite recuperar los datos de tipo datetime, Date, Time, DateTime2 y DateTimeOffset como datos DateTime. Normalmente nos puede interesar más tratarlos como si fuesen cadenas desde php y para ellos, el driver nos provee de una forma de hacerlo.

Basta con inidicarlo en el array de conexión:

$params =  array(

"UID"  => "usuario",
"PWD"   => "password",
"Database" => "base_de_datos",
"CharacterSet" => "utf-8"

);

$params["ReturnDatesAsStrings"] = true;

$conexion = sqlsrv_connect( "nombre_de_la_instancia", $params);

Autenticación de sistema o de usuario de Sql Server

A la hora de conectarnos a una instancia, podemos hacerlo mediante autenticación de sistema o de usuario de Sql Server según esté establecido en la configuración de la instancia.

Aunque para una aplicación web, especialmente una aplicación que tenga como destino dar servicio en internet, nos interese aplicar una autenticación de usuario de Sql Server, el driver dispone de soporte nativo para reconocer el usuario con el cual estamos ejecutando la aplicación web y usar sus credenciales para realizar la autenticación.

Para realizar una autenticación de sistema no necesitamos indicar usuario ni contraseña, tan sólo la base de datos:

$params =  array("Database" => "base_de_datos");

$conexion = = sqlsrv_connect( "nombre_de_la_instancia", $params);

Limpieza de parámetros en las consultas

Uno de los puntos más vulnerables en una aplicación web siempre ha sido la forma en la que realizamos las consultas a la base de datos.

Para ayudarnos a securizar los datos que interoducimos en las consultas, disponemos de un mecanismo muy sencillo de limpieza.

$sql =  "INSERT INTO usuarios (email, password) VALUES (?,?);";

//creamos el array de parámetros
$params = array(strtolower($email),md5($pass));

//realizamos la consulta, pasándole los parámetros a blindar
$stmt = sqlsrv_query( $conexion, $sql, $params);

Instanciación de objectos específicos en los resultados de una consulta

Otra opción muy útil que nos provee el driver es la posibilidad de especificar un objeto que será instanciado como resultado de una query.

class User{
 public $object_id= null;
 public $user_id  = null;
 public $email    = null;
 public $password = null;

 public function __construct($id){
   $this->object_id = $id;
 }

}

$sql =  "SELECT TOP 1 user_id,email FROM users WHERE user_id = ? ";

$stmt = sqlsrv_query( $conexion, $sql, array($user_id));

if($stmt!==false){

 $i=0; $items = array();

 //cada variable $object será una instancia del objeto User
 while( $object = sqlsrv_fetch_object( $stmt, "User", array($i)))
 {
  $items[] = $object;
  $i++;
 }

 sqlsrv_free_stmt($stmt);
 $stmt=null;
}

Constantes para la conversión de tipos php a tipos nativos de Sql Server

En algunos casos necesitamos convertir el parámetro al tipo de dato nativo de sql server que necesitemos evaluar en la consulta, como es el caso de los tipos DateTime.

Para ello el driver dispone de una serie de constantes que nos ayudan a hacerlo.

$sql =  "SELECT user_id FROM usuarios WHERE created_at >= ? AND user_id < ?;";

//creamos el array de parámetros, cada elemento será un array en el que especifiquemos la constante del tipo que necesitamos
$params = array(array($date, null, null, SQLSRV_SQLTYPE_DATETIME), array($user_id,null));

//realizamos la consulta, pasándole los parámetros a blindar
$stmt = sqlsrv_query( $conexion, $sql, $params);

Otras opciones interesantes que he echado en falta

Soporte para PDO.

PDO es una capa de abstracción cuyo objetivo principal es aislarnos de las particularidades de cada driver disponible para atacar los diferentes motores de bases de datos que existen.

Muchos ORMs como doctrine y Propel lo usan, no disponer de soporte para PDO supone una barrera para algunso de los CMS o Frameworks más usados y un trabajo adicional para los desarrolladores a la hora de necesitar utilizar sql server en sus proyectos. Irónicamente, el antiguo driver a pesar de estar obsoleto soporta PDO.

Posibilidad de usarlo como un Objeto

Se agradece ir abandonando poco a poco el paradigma estructurado en php y algunas librerías como mysqli, nos permiten usarlas como si se tratase de un objeto.

Sería una muy buena característica para este driver.

Oferta: prueba nuestros servicios Microsoft por 1€ al mes durante 6 meses.

Publicado en Novedades Nuestros servicios en marzo 28, 2010 7:52 pm

Nuestro compromiso a la hora de ofrecer nuestros servicios de Hosting Microsoft desde Blackslot ha sido desde el principio disponer de una calidad excelente y las últimas tecnologías disponibles en el mercado.

Ahora junto a Microsoft, te ofrecemos dichas tecnologías en una plataforma ubicada en España, fácil de gestionar y con la mejor atención de nuestro equipo técnico, formado por profesionales apasionados en el desarrollo de soluciones para proyectos en internet.

Durante 6 meses podrás disfrutar de las siguientes dos opciones:

Hosting Grid Microsoft a 1€ al mes

Este alojamiento dispone de las siguientes caraacterísticas:

  • 250 MB de Espacio
  • Base de datos Sql Server 2008
  • Acceso a SQL Server desde Visual Studio
  • Soporte para Asp.net MVC y php
  • 1 Base de datos mysql
  • 8GB de transferencia
  • Silverlight 3.0 y Ajax extensions

¿Qué pasa después de estos 6 meses?

Nos pondremos en contacto contigo para saber si te ha gustado y te interesa pasar la configuración de tu grid a alguna de nuestras dos modalidades.

Nosotros haremos el cambio de forma transparente para que tu aplicación no tenga pérdida de servicio si deseas renovar el servicio.

Servidores HyperV preconfigurados con lo último con un 20% de descuento

Te aplicamos el 20% descuento sobre cualquier configuración de servidor HyperV con 1GB de Ram o superior, que tenga las siguientes característica preconfiguradas:

  • Asp.net mvc 2.0
  • .net framework 4.0
  • Php5.3
  • Sql server express edition
  • SEO tools, rewrite module
  • Web platform installer
  • SO Windows 2008 Server R2 Standard
  • Sql server 2008 express

¿cuánto tiempo dura este descuento?

El descuento dura durante el primer año de servicio.

Cómo contratar estos servicios

Basta con enviarnos un email a info@blackslot.com o poneros en contacto con nosotros desde aquí, nos comentáis en el asunto que queréis daros de alta en la oferta Microsoft de HyperV o en la oferta de servicio de Hosting Grid Microsoft. Una persona de nuestro departamento comercial se pondrá en contacto con vosotros para daros de alta.