Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

extendiendo PDO

Estas en el tema de extendiendo PDO en el foro de Frameworks y PHP orientado a objetos en Foros del Web. cordial saludo, desde hace un par de horas horas estoy tratando de extender PDO a mis necesidades y trato de crear un metodo que me ...
  #1 (permalink)  
Antiguo 18/10/2008, 04:23
 
Fecha de Ingreso: enero-2008
Mensajes: 33
Antigüedad: 16 años, 3 meses
Puntos: 1
extendiendo PDO

cordial saludo,

desde hace un par de horas horas estoy tratando de extender PDO a mis necesidades y trato de crear un metodo que me permita crear una base de datos nueva. ¿es esto posible con PDO luego de hacer establecido una conexion con otra base de datos?

es decir..... si ya estoy conectado con una BD "general" puedo ejecutar la sentencia "CREATE DATABASE nombre_empresa".

la estoy probando y no me ejecuta correctamente... me aparece el siguiente error

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the right syntax to use near '\''empresa'\'' at line 1

-
  #2 (permalink)  
Antiguo 18/10/2008, 09:17
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: extendiendo PDO

que consulta estas escribiendo, como la escribes??
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 18/10/2008, 10:38
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: extendiendo PDO

Tema trasladado a PHP Orientado a Objetos.
  #4 (permalink)  
Antiguo 18/10/2008, 22:03
 
Fecha de Ingreso: enero-2008
Mensajes: 33
Antigüedad: 16 años, 3 meses
Puntos: 1
Respuesta: extendiendo PDO

Haré la pregunta mas directa... como hago para crear una base de datos empleando PDO.
  #5 (permalink)  
Antiguo 18/10/2008, 22:38
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: extendiendo PDO

no es el adaptador que uses para las bases de datos... al final se trata de sintaxis de SQL

Postgre, MySQL, etc... todo es SQL (Simple Query Languaje)

así que... mas que usar alguna función o clase de PHP, deberías aprender sintaxis SQL ... ya después es mas fácil ejecutarla...

suerte!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #6 (permalink)  
Antiguo 18/10/2008, 22:47
 
Fecha de Ingreso: enero-2008
Mensajes: 33
Antigüedad: 16 años, 3 meses
Puntos: 1
Respuesta: extendiendo PDO

ok... me ayudaria mucho que me dijeras donde esta mi error de sitaxis en la siguiente clase
el método es crearDB
Código php:
Ver original
  1. .
  2. class JGBD extends PDO{
  3.  
  4.   private static $instancia;
  5.  
  6.   function __construct($usuario, $clave, $configPDO = array()){
  7.     $configPDO = ($configPDO->lengths > 0)? $configPDO:array(PDO::ATTR_PERSISTENT=>true,PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION);
  8.     try{
  9.       parent::__construct('mysql:host=localhost;dbname=mysql', $usuario,$clave, $configPDO);
  10.     }catch(PDOException $err){
  11.        echo "return-Error: ".$err->getMessage()."<br>";
  12.        die("Error de conexion.  Comuniquese con el Adminsitrador");
  13.     }
  14.   }
  15.  
  16.  
  17. //BASE DE DATOS
  18.   function crearBD($nombre){
  19.     try{
  20.       $sql = "CREATE DATABASE $nombre";
  21.       self::$instancia->query($sql);
  22.     }catch(PDOException $err){
  23.       echo "Error: ".$err->getMessage()."<br>";      
  24.     }
  25.      
  26.   }  
  27.  
  28.  
  29.  
  30.   public static function singleton($usuario, $clave){
  31.     if(!isset(self::$instancia))
  32.       self::$instancia = new self($usuario, $clave);
  33.  
  34.     return self::$instancia;
  35.   }
  36.  
  37. }
  #7 (permalink)  
Antiguo 18/10/2008, 23:25
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: extendiendo PDO

Tu problema son las comillas, de alguna forma el nombre que le estas pasando se esta pasando con comillas invertidas extras que arruinan la consulta.

Saludos.
  #8 (permalink)  
Antiguo 19/10/2008, 00:41
 
Fecha de Ingreso: enero-2008
Mensajes: 33
Antigüedad: 16 años, 3 meses
Puntos: 1
Respuesta: extendiendo PDO

disculpa... el metodo es este

Código php:
Ver original
  1. function crearBD($nombre){
  2.     try{
  3.     /*
  4.       $sql = "CREATE DATABASE $nombre;";      
  5.       self::$instancia->query($sql);
  6.   */
  7.     $sql = "CREATE DATABASE :nombre";
  8.     $tmp = self::$instancia->prepare($sql);
  9.     $tmp->bindParam(':nombre', $dato );
  10.     $dato = $nombre;
  11.     $tmp->execute();  
  12.          
  13.       echo "La tabla $nombre se creo correctamente";      
  14.     }catch(PDOException $err){
  15.       echo "return-Error: ".$err->getMessage()."<br>";      
  16.     }
  17.      
  18.   }

y lo uso así

Código php:
Ver original
  1. $dbtest = JGBD::singleton("pedro", "xxxx");
  2.   $dbtest->crearBD("Empresa");

Última edición por feloton79; 19/10/2008 a las 01:02
  #9 (permalink)  
Antiguo 22/10/2008, 00:19
 
Fecha de Ingreso: enero-2008
Mensajes: 33
Antigüedad: 16 años, 3 meses
Puntos: 1
Respuesta: extendiendo PDO

he notado que al emplear las variables correspondientes en la sentecias sql para crear tablas o bases de datos, las ejecuta correctamente, pero al utilizar por ejemplo :nombre o el signo '?' en "prepare", aparece un error de doble comilla sencilla. es decir

al ejecutar
Código php:
Ver original
  1. $tmp = $conn->prepare ("CREATE [DATABASE| TABLE]* $nombre")
  2. $tmp->execute();

Funciona correctamente, pero al emplear
Código php:
Ver original
  1. $tmp = $conn->prepare ("CREATE [DATABASE| TABLE]* ? ")
  2. $tmp->execute(array($nombre));
sale un error de sintaxis ''empresa'', donde el error es un uso de dos comillas sencillas... si alguien conoce la razon, me gustaria conocerla.. o si es algo que solo me ha ocurrido a mí.

* es una forma de enfatizar que ocurre con CREATE, sé que la sintaxis para crear tablas es mas compleja.
  #10 (permalink)  
Antiguo 22/10/2008, 08:40
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: extendiendo PDO

Hola feloton79,

El "problema" en si es que al tu usar el prepare y pasar los datos con un placeholder, el engine de PDO escapa la variable para prevenir SQL inyection, y al tu usar CREATE o alguna otra sentencia que necesita las variables "directamente" te marca ese error.

Saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:53.