php conexión con servidor – php azure

Pregunta:


Necesito conectar mi web a una base de datos alojada en un servidor de Microsoft Azure. El caso es que actualmente lo hago con mysqli orientado a procedimientos y Azure me genera el código de la conexión para PDO. Estoy tratando de usar los datos que me dan para adaptarlo a programación orientada a procedimientos. El código que ellos me generan:

// PHP Data Objects(PDO) Sample Code:
try {
    $conn = new PDO("sqlsrv:server = tcp:minombre.database.windows.net,1433; 
    Database = nombrebdd", "nombreusuario", "contrasena");
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (PDOException $e) {
    print("Error connecting to SQL Server.");
    die(print_r($e));
}

// SQL Server Extension Sample Code:
$connectionInfo = array("UID" => "[email protected]", "pwd" => "
contrasena", "Database" => "nombredb", "LoginTimeout" => 30, 
"Encrypt" => 1, "TrustServerCertificate" => 0);

$serverName = "tcp:minombre.database.windows.net,1433";

$conn = sqlsrv_connect($serverName, $connectionInfo);

Y lo que estoy tratando de hacer, y sin mucho éxito por ahora, es:

$servername = "tcp:minombre.database.windows.net,1433";
  $username = "nombreusuario";
  $password = "contrasena";
  $dbname = "nombrebdd";

  // Create connection
  $conn = new mysqli($servername, $username, $password, $dbname);
  // Check connection
  if ($conn->connect_error) {
      die("Connection failed: " . $conn->connect_error);
  } 

  $sql = "SELECT id FROM productos";
  $result = $conn->query($sql);

  if ($result->num_rows > 0) {
      // output data of each row
      while($row = $result->fetch_assoc()) {
          echo "Usuario" . $row["id"];
      }
  } else {
      echo "0 results";
  }
  $conn->close();

Si alguien sabe decirme lo que estoy haciendo mal se lo agradecería 😀

Preguntado por: gmarsi

Respuesta A. Cedano:

Yo te recomendaría el uso de PDO, el cual ofrece más posibilidades que MySQLi.

Pero se requiere tener tu PDO bien configurado, para tales fines lo mejor es tener tu propia clase PDO.

Un ejemplo sencillo de clase PDO, con algunas funciones personalizadas:


Db.php

<?php
    class Db 
    {

    private $host      = 'localhost';
    private $user      = 'tu-usuario';
    private $dbname    = 'nombre-bd';
    private $pass      = 'password';
    private static $instance;

    public function __construct()
    {
        // DSN: cadena de conexión
        $dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname;

        /* Opciones
            * Muy importante, para tener una buena conexión PDO

        */    
        $options = array(
            PDO::ATTR_PERSISTENT    => true, //establecer a false si no se quieren conexiones persistentes
            PDO::ATTR_EMULATE_PREPARES => false, //no cambiar nunca
            PDO::ATTR_ERRMODE       => PDO::ERRMODE_EXCEPTION, //no cambiar nunca
            PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'" //juego de caracteres
        );

        // Crea nueva instancia de PDO
        try{
            $this->dbh = new PDO($dsn, $this->user, $this->pass, $options);
        }
        // Captura los errores
        catch(PDOException $e){
            $this->error = $e->getMessage();
        }
    }



    public static function getInstance()
    {
        if (self::$instance == null) 
        {
            $className = __CLASS__;
            self::$instance = new $className();
        }
        return self::$instance;
    }



     /******************************************** MÉTODOS IMPRESCINDIBLES */

    //Recibe las consultas
    public function query($query)
    {
        $this->stmt = $this->dbh->prepare($query);
    }

    //Ejecuta las consultas
    public function execute()
    {
        return $this->stmt->execute();
    }

    //Devuelve resultados de la consulta en PDO::FETCH_ASSOC 
    //Se puede cambiar o agregar otro método con otro tipo de resultado
    public function resultset()
    {
        $this->execute();
        return $this->stmt->fetchAll(PDO::FETCH_ASSOC);

    }

    //Envía los datos por separado para proteger de la inyección SQL
    public function bind($param, $value, $type = null)
    {
        if (is_null($type)) 
        {
            switch (true) 
            {
                case is_int($value):
                    $type = PDO::PARAM_INT;
                    break;
                case is_bool($value):
                    $type = PDO::PARAM_BOOL;
                    break;
                case is_null($value):
                    $type = PDO::PARAM_NULL;
                    break;
                default:
                    $type = PDO::PARAM_STR;
            }
        }
        $this->stmt->bindValue($param, $value, $type);
    }

    /********************************************** FIN MÉTODOS IMPRESCINDIBLES




    /******************************************** MÉTODOS OPCIONALES */

    //Devuelve el último registro insertado
    public function lastInsertId()
    {
        return $this->dbh->lastInsertId();
    }

    //Obtiene un registro simple
    public function single()
    {
        $this->execute();
        return $this->stmt->fetch(PDO::FETCH_ASSOC);
    }


    //Devuelve un solo valor, columna o 0
    public function valor()
    {
        $this->execute();
        $valor=$this->stmt->fetch(PDO::FETCH_COLUMN);
        return (empty($valor)) ? 0 : $valor;

    }

    //Verifica si un registro existe devolviendo true o false
    public function si_existe()
    {
        $this->execute();
        if ($this->stmt->fetch(PDO::FETCH_ASSOC))
        {
            return true;
        } 
        else 
        {
            return false;
        }
    }
     /**********************************************/

}

?>

Ejemplo de uso

En cualquier parte donde quieras usar la conexión:

  1. Incluir el archivo de conexión

    include_once("Db.php")

    Indicar la ruta correcta donde se encuentra

  2. Crear instancia de la clase y objeto conexión:

    $oDb = new Db();
    $oPDO=$oDb->getInstance();

  3. Consultar

    $oPDO->query("SELECT * FROM tabla WHERE col1=:col1 AND col2=:col2");
    $oPDO->bind(':col1', $col1);
    $oPDO->bind(':col2', $col2);
    $arrDatos = $oPDO->resultset();

    Las variables $col1 y $col2 serían datos obtenidos desde fuera que se pasarían a la BD separados de la instrucción SQL. No hay que preocuparse del tipo de dato, la clase se ocupa de ello (ver método bind de la misma).
    El método resultset() devuelve un array asociativo de nuestros datos, listo para ser recorrido y presentado en cualquier parte del programa.

Fuente

Related Posts:

array push con keys php – php array
Pregunta: Buen día. Estoy tratando de crear un array con valores agrupados por categorías, mediante AJAX recibo dos variables una contiene un string con el nombre ...
Actualizar información con ajax php mysql – php jquery mysql
Pregunta: Tengo esta simple consulta que lo que simplemente me muestra las visitas de la web, pero quisiera que fuera automático con ajax ya que ...
¿Cómo insertar código en las entradas de WordPress? – php wordpress plugin
Pregunta: En algunos blogs de programación he visto algo como esto en las entradas: Me gustaría poder hacer lo mismo. Sin embargo, no solo quiero que ...
Como validar array checkbox – javascript php jquery
Pregunta: Que tal buen dia, alguien me podria decir como se puede hacer para que cuando presione el boton "BAJAR DATOS" si este esta vacio ...
Problema con UTF_8 – php sql sql-server
Pregunta: Buen día, mi problema es el siguiente, Php me lanza el siguiente Warning Warning: utf8_decode() expects parameter 1 to be string, object given ...
Obtener las fechas de los días Lunes dependiendo de un rango de fechas PHP – php datetime time
Pregunta: Dependiendo de un rango de fechas quiero obtener sólo las fechas de los días Lunes, tengo la siguiente función que funciona pero me trae ...
Customizar rutas de Login en Laravel 5.3 – php laravel laravel-5
Pregunta: Hola tengo un problema con el enrutado de Login con el metodo php artisan make:auth que te genera todo lo que se necesita Desde vamos ...
¿Cómo utilizar `count` para contabilizar la cantidad de registros para distintos valores de un campo en mysql? – php mysql sql
Pregunta: Resulta que tengo un campo llamado ESTADO en mi tabla. En este campo hay varias estados de pedido que son: LOGÍSTICA, PACKING, PICKING, CARTERA, ...
Precargar SOAP en PHP – php webservice soap
Pregunta: Estoy usando un webservice en el cual realizo la conexión por SOAP en PHP. El problema viene cuando en la primera llamada, a veces, no ...
Xampp no carga proyecto laravel – php laravel apache
Pregunta: Tengo el proyecto laravel en un mac con OSX el capitán con php artisan. El proyecto se ejecuta sin problema, pero por motivos personales ...
URLs absolutas con PHP – php pretty-urls
Pregunta: Explico mi problema, es sencillo, lo tengo solucionado, pero solamente de manera local, no me sirve lo que hice si yo uso esto en ...
Ejecutar función de otro controlador enviando parametros – php laravel laravel-5
Pregunta: Tengo a Controller1 el cual contiene una función llamada actualizarCartera($parametro1, $parametro2, $parametro3), desde Controller2 ¿Cómo hago para ejecutar esta función?, ¿Cómo debo incluír a ...
PHPExcel comentario en negro – php excel
Pregunta: Llevamos un tiempo usando PHPexcel para rellenar unas tablas desde la Base de Datos, lleva funcionando meses pero últimamente al escribir un comentario y ...
Update con MYSQL PHP – php mysql mysqli
Pregunta: Tengo este código, pero no hace el update, y no sé porque. <?php // if ($_POST == "" || $_POST == "" || $_POST == ""){ ...
alguien sabe porque no imprime el json – php json
Pregunta: $from $to = 20; $query = "SELECT idempleados,nombre,apellidos FROM empleados LIMIT ?,?"; $result = $mysqli->prepare($query); $result->bind_ param('ii', $from, $to); $result->execute(); /* bind result variables */ $result->bind_result($idempleados,$nombre,$apellidos); /* fetch values */ while ($result->fetch()){ ...
Tags:,

Add a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *