lunes, 12 de marzo de 2012

CONEXION A SQL SERVER 2008 CON PHP Y PROCEDIMIENTOS ALMACENADOS


Hola a todos aquí les dejo un tutorial sencillo de como conectarse a SQL SERVER 2008 desde php utilizando una clase de conexión y sus respectivos métodos para abrir y cerrar la conexión, quiero aclarar que este tutorrial no es para nivel avanzado sino mas bien para alguien que recien inicia en el mundo php con bases de datos, utilice el servidor web xampp 1.7.2 (recomiendo descargarla)ya que lo probé en versiones mas recientes y la conexion a sql  server no funcionaba ni siquiera descomentando en el archivo php.ini la linea de extension=php_mssql.dll, que es lo primero que hay que hacer para poder conectarnos a sql server ya que por defecto en dicho archivo viene deshabilitado esta opcion. una vez hecho hacemos lo siguiente.



1.- Crear la bd en sql server 2008 , creamos un bd sencilla llamada prueba de una sola tabla llamada productos, luego insertaremos unos registros de prueba para despuès crear el procedimiento almacenado que me liste estos registros


---creamos la base de datos Prueba
create database Prueba
go
USE Prueba
go
--creamos la tabla producto en la bd Prueba
create table Producto
(
CodigoProducto int identity(1,1) not null,
DescripcionProducto varchar(50) not null,
PrecioProducto decimal(9,2) not null,
LineaProducto varchar(50) not null,
EstadoProducto int

 CONSTRAINT [PK_PPRODUCTO] PRIMARY KEY CLUSTERED (CodigoProducto)

)


---insertamos algunos registros

insert into Producto values('Aceite FRIOL',3.5,'ABARROTES',1)
insert into Producto values('Arroz Costeño',3,'ABARROTES',1)
insert into Producto values('Gaseosa Inka Kola 2 lts',4,'BEBIDAS',1)
insert into Producto values('Leche Gloria deslactozada',2,'LÁCTEOS',1)

---creamos el proceimiento almacenado para listar Productos

create procedure sp_lista_productos
as
select CodigoProducto ,DescripcionProducto,PrecioProducto,LineaProducto FROM Producto
GO

---ejecutamos el procedimiento almacenado para ver el resultado

exec sp_lista_productos
go

..y el resultado es el siguiente

2.- Una vez creado la BD , la tabla y el procedimiento almacenado que nos muestra los registros ahora procedemos programar en php la conexion a mi bd :) creamos un archivo de clase php llamado conexion en cualquiera que sea la IDE que estemos utilizando ya sea Eclipse, Net Beans, Dreamweaver o cualquiera, esta clase tiene su metodo para abrir la conexion y para cerrarla. IMPORTANTE ..reemplazamos los parametros de conexion es decir nombre pc, usuario sql y clave)



class conexion
{
private static $instance = null;
        private $conn;


private function __construct() {}
        private function __clone(){ }
        public static function getInstance()
         {
            if (!isset(self::$instance)) {
                $c = __CLASS__;
                self::$instance = new $c;
            }
            return self::$instance;
        }
        public function AbrirConexion() {
            try{
                if(!isset($this->conn)){
                $this->conn=mssql_connect("NOMBREDESUPC","USUARIOSQLSERVER","CLAVEUSUARIOSQLSERVER") ;
                $res = mssql_select_db("Prueba",$this->conn);
                }
                return $this->conn;
             }
             catch(Exception $ex)    {
          //    throw new $ex->getMessage();
              throw new Exception ("La conexión al servidor a fallado..");
             }
}
   
        public function CerrarConexion(){
if( isset( $this->conn) ){
mssql_close( $this->conn);
unset( $this->conn );
}
}
}
?>


3.- Una vez que tenemos la clase que nos sirve para poder conectarnos a la BD, ahora procedemos a programar el archivo que me va a mostrar el listado de Productos de la tabla Productos en mi caso lo hice en mismo index.php(quise poner el codigo en texto, pero no mostraba lo que ponia dentro de los echo, mil disculpas solo me quedo capturar la imagen)


4.- Si hemos seguido los pasos correctamente el resultado debe ser el siguiente(claro con aplicacion de algun estilo css).. ya bueno aqui les dejo el codigo del estilo tb :)


.demoTable {
border-spacing:1px;
font-family:Verdana, Arial, Helvetica, sans-serif;
font-size:10px;
background-color:#E7E7E7;
color: #b7b7b7;
width:70%;
margin:auto;
}
.demoTable td, .demoTable tr, .demoTable th{
border-collapse: separate;
border-collapse: collapse;
border-spacing: 0;
}
.demoTable caption {
font-weight: bold;
background: #50ADEA url(corner.gif) no-repeat right top;
border-bottom:2px solid #1975d7;
color: #FFF;
text-transform:uppercase;
padding:10px;
margin:auto;
}

.demoTable td, .demoTable th {
padding: 4px;
}

.demoTable thead th {
text-align: center;
background: #fff;
color: #0B173B;
border: 1px solid #0B173B;
text-transform:uppercase;
}



.demoTable tbody tr {
background-color:#fff;
        color: #0B173B;
text-align:left;
}
.demoTable tbody tr th {
background-color:#50ADEA;
        color: #fff;
text-align:left;
}
.demoTable tbody tr.odd {
background: #f9f9f9;
border-top:1px solid #FFF;
}
/*.demoTable tbody tr:hover {
background: red;
border-top:1px solid #FFF;
}*/

.demoTable tbody tr td {
height:50px;
background: #FFF;
border: 1px solid #FFF;
}

.demoTable tbody tr.odd td{
background: #f9f9f9;
border-top:1px solid #FFF;
}

.demoTable td a:link, .demoTable td a:visited {
color: #0B3861;
text-decoration: none;
}

.demoTable td a:hover {
color: #0B3861;
border-bottom:2px solid #8FD5FF;
text-decoration: none ;
}

.demoTable tfoot th, .demoTable tfoot td {
background-color:#fff; padding:10px;
text-align:center;
font-family:Georgia, "Times New Roman", Times, serif;
font-size:22px; font-weight:bold; font-style:italic;
border-bottom:3px solid #CCC;
border-top:1px solid #DFDFDF;
}





gracias de antemano, espero les haya sido de utilidad este breve tutorial
¡ GRACIAS!

7 comentarios:

  1. Buen articulo, me cayo de a pelo ;)

    ResponderEliminar
  2. Miercoles, 22 de Agosto de 2012

    Hola

    he realizado tu tutorial y salió un error; en el archivo index.php me dio el siguiente error:

    Fatal error: Call to undefined function mssql_init() in C:\xampp\htdocs\get_datos.php on line 5

    referente a la siguiente linea de codigo:

    $procedure = mssql_init("sp_lista_productos", $cn->AbrirConexion());
    ==========================================================

    A que podrá deberse?.
    el tutorial lo realise con php5 y MS SQL Server 2008 R2

    ResponderEliminar
  3. Hola
    tengo dudas con la conexion

    conn)){
    $this->conn=mssql_connect("NOMBREDESUPC","USUARIOSQLSERVER","CLAVEUSUARIOSQLSERVER");
    $res = mssql_select_db("Prueba",$this->conn);
    }
    return $this->conn;
    }
    catch(Exception $ex) {
    // throw new $ex->getMessage();
    throw new Exception ("La conexión al servidor a fallado..");
    }
    }

    public function CerrarConexion(){
    if( isset( $this->conn) ){
    mssql_close( $this->conn);
    unset( $this->conn );
    }
    }
    }
    ?>

    osea cuando haces la conexion a la base de datos
    en el caso de
    ("NOMBREDESUPC","USUARIOSQLSERVER","CLAVEUSUARIOSQLSERVER")

    hai va el nombre de la PC ??
    y usuarios de el servidor
    y la clave de servidor ?

    en mi caso es
    Nombre del servidor; EVOPC
    y en Nombre del usuario lo tengo inhabilitado y el password, osea no puedo escribir nada porque todo lo hace del servidor osea EVOPC. o a fuerza tengo que crear un usuario ????? y ponerle usuario y contraseña ?????

    osea lo tengo donde dice Autenticación lo tengo como: Autenticación de Windows

    por favor espero su contestación ing.
    saludos

    ResponderEliminar
  4. Hola ing.
    pues ahora solo me marca este error

    td1tdtd3.50tdABARROTES/tdtd2tdtd3.00tdABARROTES/tdtd3tdtd4.00tdBEBIDAS/tdtd4tdtd2.00tdLÁCTEOS/td
    Listado de Productos
    -/Codigo Producto/- -/Producto/- -/Precio/- -/Linea/-


    y solo me muestra solo escritura de Listado de Producto, Codigo Producto, Producto, Precio, Linea pero no me marca nada de registros de la base de datos de SQL Server 2008

    y la conexion de la base de datos quedo nombre de mi PC en este caso es EVOPC y usuario de SQL server: PruebaConexion y le puse la contraseña
    y solo me manda eso y el error lo marca arriba de las columnas, al momento de ponerle F12 para probar la pagina que es este:

    td1tdtd3.50tdABARROTES/tdtd2tdtd3.00tdABARROTES/tdtd3tdtd4.00tdBEBIDAS/tdtd4tdtd2.00tdLÁCTEOS/td

    aque se debe perdon ing ????
    me gustaria por favor que me explicara a que se debe ese error ????????????????? por favor
    le mando un saludo

    ResponderEliminar
  5. Hola que tal amigo! me ha salido un error en la linea 21 en mi clase conexion que se refleja aqui:

    public static function GetInstance(){
    if (!isset(self::$instance)) {
    $c=class; //Aqui marca Error
    self::$instance = new $c;
    }
    return self::$Instance;
    }

    ResponderEliminar
  6. que tal! ya corregi el error pasado, pero ahora me marca otro error:

    Fatal error: Access to undeclared static property: Modelo_Conexion::$instance in C:\wamp\www\Prroyecto\Modelo\Modelo_Conexion.php on line 22

    la linea es la siguiente:

    self::$instance = new $c;

    ResponderEliminar
  7. No me sales nada y en el titulome sale Error interno del servidor.

    ResponderEliminar