Ver Mensaje Individual
  #1 (permalink)  
Antiguo 30/09/2011, 11:25
dvex_92
 
Fecha de Ingreso: septiembre-2011
Ubicación: Peru - Lima
Mensajes: 16
Antigüedad: 13 años, 4 meses
Puntos: 0
Pregunta Problemas MongoDB con PHP



Saludos a todos! Soy Nuevo en este foro y a la vez soy principiante en utilizar MongoDB (NoSQL) ya q tengo un proyecto sobre esto. Cabe decir q en mi vida universitaria (actualmente) solo eh trabajado con DB's Relacionales.

Entre investigando en estos ultimos dias sobre PHP con MongoDB ya sé como hacer un "insert, delete y select" en la DB no relacional con PHP(ver. 5) (utilizando Netbeans).

Aqui os le pego el codigo que hize(inicialmente) para Testear todo lo que eh investigando:

Código PHP:
$username 'administrador';
            
$userpass 'administrador';
            
$dataBase 'Carrito';

            
$conexion = new Mongo("mongodb://$username:$userpass@localhost/$dataBase");

            
$collection $conexion->selectCollection($dataBase,'Productos');
                                    
            
$nuevoRegistro = array("nombre" => "El Arma Secreta""Precio" => "S/. 65""Cantidad" => "67 unid");
            
$collection->insert($nuevoRegistro);
            
            
$collection->remove(array('nombre' => 'El Arma Secreta'));
            
$collection->remove();
            
            
$cursor $collection->find(array('Precio' => 'S/. 154'));
            
$cursor $collection->find();
            
            foreach (
$cursor as $prod) {
                echo 
"El producto es: ".$prod["nombre"]." El precio es: ".$prod["Precio"]." La cantidad disponible es: ".$prod["Cantidad"]."\n";
            } 
Un Codigo pobre.. como principiante que soy. Aqui probe cada sentencia y me salio OK. Hacia todo en la DB
Ahora mi problema recae Cuando Quiero formalizar mas este codigo. Miren ahora:

Código PHP:
class Persistencia {
    
/* Patron Singleton*/
    
private static $_instancia;
    public static function 
getInstancia() {
        try {
            if(
self::$_instancia == null){
                
self::$_instancia = new Persistencia();
            }
        } catch (
Exception $exc) {
            throw 
$exc->getMessage();
        }
    }
    
/*Fin del Patron */

    
private $_cn;
    private 
$_collection;


    public function 
__construct() {
        try {
            
$username 'administrador';
            
$userpass 'administrador';
            
$database 'Carrito';
            
$colecction 'Productos';
            
            
$this->_cn = new Mongo("mongodb://$username:$userpass@localhost/$database");
            
$this->_collection $this->_cn->selectCollection($database$colecction);

        } catch (
Exception $exc) {
            
error_log($exc->getMessage()."\n"3"../log/Error.log");
        }
    }
    
    private function 
_executeQuery($query$tipo) {
        try{
            switch (
$tipo) {
                case 
:
                    
$cursor $this->_collection->find();
                    return 
$cursor;
                    break;
                case 
:
                    
$this->_collection->insert($query);
                    break;
                case 
:
                    
$this->_collection->remove();
                    break;
            }
        }  catch (
Exception $exc){
            
error_log($exc->getMessage()."\n"3"../log/Error.log");
            
error_log("Query:$query\n"3"../log/Error.log");
        }
    }


    public function 
findAll() {
        
$lista $this->_executeQuery(""1);
        return 
$lista;
    }
    
    public function 
addProduct($nombre$precio$cantidad) {
        
$query = array("nombre" => $nombre"Precio" => $precio"Cantidad" => $cantidad);
        
$this->_executeQuery($query2);
    }
    
    public function 
deleteAll() {
        
$this->_executeQuery(""3);
    }
}

Persistencia::getInstancia(); 
Como se daran cuenta.. solo eh transladado todo el codigo anterior ah hacerlo en una clase.

Ahora.. quiero testear esto a ver si me sale tal y como lo hize en el 1er codigo y comenze con el FIND.

Código PHP:
<?php
require_once '../model/Persistencia.php';

$miInstancia Persistencia::getInstancia();
$lista $miInstancia->findAll();
var_dump($lista);
?>
Y ahora, nose que PASO que me sale "Fatal error: Call to a member function findAll() on a non-object in xampp\htdocs\ConnectMongoDB\test\Testear.php on line 6"
No entiendo...¿Que es lo que paso? Esa es mi duda. Trato de ver documentacion pero no encuentro el error.

Y una cosa mas.... ¿Puedo mejorar este codigo?.. Alguna mejora puedo hacerle?

Gracias!.. Espero con ansias sus respuestas.