Cómo realizar una conexión a MongoDB desde PHP

10 de agosto, 2017 @ 10:18 — 1 comentarioDescargar PDF

Si has llegado a esta entrada desde un buscador, debes tener en cuenta que esta guía está pensada para los servicios de guebs.com. Los conceptos generales son válidos para cualquier uso de la extensión MongoDB php, pero los pasos particulares están pensados para los servicios de guebs.com.

1.- Incluir en PHP la extensión mongodb

En guebs.com tienes dicha extensión disponible a partir de php 5.6 . En las versiones inferiores a ésta  no la encontrarás disponible. Para ello sólo debes dirigirte a la sección de configuración php y añadir la extensión.

 

Modificar la configuración de PHP

Cuando añadas la extensión  la zona de configuración "Añadir parámetro" debe quedar del siguiente modo:

 

 

Entonces debes pulsar sobre Guardar. Hecho esto, si obtienes el resultado de un phpinfo encontrarás que ya tienes mongodb activado para tu php

2.- Usar la librería oficial para php de MongoDB

 

Para hacer uso de esta librería sólo debes usar composer, que está disponible de serie en todos nuestros servicios. La documentación oficial se encuentra en la siguiente dirección web:

https://github.com/mongodb/mongo-php-library

https://docs.mongodb.com/php-library/master/

 

Lo primero que debemos hacer es acceder via ssh a nuestro plan de alojamiento (aunque también puedes subir tus archivos si ya dispones de ellos a través de cualquier otro método)

 

Como acceder vía SSH a tu cuenta

 

 

Una vez hayamos accedido debemos posicionarnos en la raíz del documento en el cual estarán nuestros archivos públicos. Típicamente esta raíz será public_html. En este punto usaremos composer:

 

cd public_html ; /opt/php7.0/bin/php -dextension=mongodb.so /opt/cpanel/composer/bin/composer require mongodb/mongodb

El comando está pensado para un sitio que usa php7.0. Si usas otro php deberás establecer otra ruta para php. Por ejemplo si usaras php7.1 deberás usar /opt/php7.1/bin/php. En este punto ya estamos en condiciones de realizar una conexión a una base de datos  MongoDB y a sus colecciones.

 

3.- Establecer una conexión a la base de datos desde PHP

 

En el archivo donde vayamos a hacer la conexión, nos aseguramos de que la librería anterior está cargada:

 

require 'vendor/autoload.php'; 

 

Hecho esto podemos ya establecer la conexión. Usaremos el método de conectar a través de una connectionString (https://docs.mongodb.com/manual/reference/connection-string/)  y las clases de la MongoDB php library (https://docs.mongodb.com/php-library/master/)

El siguiente código se ocupa de insertar un documento en una colección de una base de datos:

 

<?php

require 'vendor/autoload.php' ;

$uri="mongodb://usuario:password@host_base_datos/base_de_datos?ssl=false";

$client=new MongoDB\Client($uri);

$collection = $client->base_de_datos->productos;

$result = $collection->insertOne( [ 'item' => 'producto1', 'cantidad' => '200' ] );

echo "Inserted with Object ID '{$result->getInsertedId()}'";

?>
  • El código está configurado para no usar ssl, pero es preferible activarlo si está disponible mediante ssl=true
  • Si productos no existiera se crearía automáticamente en la base de datos, lo mismo para cualquiera de los campos.

 

Hay más información básica y avanzada en las siguientes direcciones web:

 

http://php.net/manual/es/mongodb.tutorial.library.php

https://github.com/mongodb/mongo-php-library

https://docs.mongodb.com/php-library/master/

Extra: Ejemplo de conexión con MongoDB-Driver

<?php

use \MongoDB\Driver\Manager;
use \MongoDB\Driver\BulkWrite;
use \MongoDB\Driver\Query;

$host = 'mongodb.guebs.net:27017';
$usr = 'USUARIO';
$db = 'NOMBRE DE BASE DE DATOS';
$pass = 'CONTRASEA';
$collection = 'NONBRE DE LA COLECCION';

// Iniciar conexion
$con = new Manager(sprintf('mongodb://%s:%s@%s/%s', $usr, $pass, $host, $db));

// Definir namespace
$namespace = "$db.$collection";

// Obtener todos los registros
if (($res = $con->executeQuery($namespace, new Query([], [])))) {
    var_dump($res->toArray());
}

// Insertar un nuevo registro
$bw = new BulkWrite();
$bw->insert(['entry'=>time()]);
$con->executeBulkWrite($namespace, $bw);

?>

Etiquetas: