Foros del Web » Programando para Internet » PHP »

¿Cómo podría hacer que mediante una sentencia SQL se cree una tabla "si no existe"?

Estas en el tema de ¿Cómo podría hacer que mediante una sentencia SQL se cree una tabla "si no existe"? en el foro de PHP en Foros del Web. Hola a todos, tengo un pequeño problema con la creación de mi sistema, y es que tenía el codigo de Crear la Tabla en el ...
  #1 (permalink)  
Antiguo 03/10/2009, 05:20
Avatar de Distriker  
Fecha de Ingreso: marzo-2008
Ubicación: Las Palmas De Gran Canarias
Mensajes: 924
Antigüedad: 16 años, 1 mes
Puntos: 23
¿Cómo podría hacer que mediante una sentencia SQL se cree una tabla "si no existe"?

Hola a todos, tengo un pequeño problema con la creación de mi sistema, y es que tenía el codigo de Crear la Tabla en el archivo de configuracion.php que siempre es llamado en todos los archivos por lo que siempre sustituye a esa tabla una y otra vez y nunca guarda los registros de users, un gran problema, finalmente tomé la decisión de hacer un install.php aparte, lo que pienso que me solucionaría el problema, pero tengo unos problemillas aun.

¿Cómo podría hacer yo para que el install.php solo cree la tabla si no existe y que si existe te mande un mensaje estilo "La BD de Datos ya ha sido instalado..."?

Lo que yo tengo es esto:

Código php:
Ver original
  1. <?php
  2.  
  3. require ('configuracion.php') ;
  4.  
  5. $query = "CREATE TABLE `users` (
  6. `id` INT (4) NOT NULL AUTO_INCREMENT,
  7. `nick` VARCHAR (30) BINARY NOT NULL,
  8. `contrasena` VARCHAR (30) BINARY NOT NULL,
  9. `email` VARCHAR (100) NOT NULL,
  10. `fecharegistro` INT (15) NOT NULL,
  11. `niveldeusuario` INT (1) NOT NULL,
  12. `descripciondeusuario` LONGTEXT NOT NULL,
  13. INDEX (`id`)
  14. ) ;" ;
  15.  
  16. mysql_query ($query) ;
  17.  
  18. ?>

Navegando por Google me encontré con este post de FDW.

Probé lo que dice Cluster, el poner el CREATE TABLE `users` IF NOT EXISTS pero no me funciona, no me crea la tabla.

Si pusiese esa función, se me quedaría así:

Código PHP:
<?php

require ('configuracion.php') ;

$query "CREATE TABLE `users` IF NOT EXISTS (
`id` INT (4) NOT NULL AUTO_INCREMENT,
`nick` VARCHAR (30) BINARY NOT NULL,
`contrasena` VARCHAR (30) BINARY NOT NULL,
`email` VARCHAR (100) NOT NULL,
`fecharegistro` INT (15) NOT NULL,
`niveldeusuario` INT (1) NOT NULL,
`descripciondeusuario` LONGTEXT NOT NULL,
INDEX (`id`)
) ;" 
;

mysql_query ($query) ;

?>
¿Cómo podría solucionar esto?

Saludos
__________________
Si no te quejas, nunca conseguiras nada, pero si te quejas siempre lo perderás todo.
Una mala acción da fruto a un mal Karma.
  #2 (permalink)  
Antiguo 03/10/2009, 05:42
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: ¿Cómo podría hacer que mediante una sentencia SQL se cree una tabla "si no

es así:

CREATE TABLE IF NOT EXISTS `users`

suerte!

el nombre siempre va al final
  #3 (permalink)  
Antiguo 03/10/2009, 05:45
Avatar de Distriker  
Fecha de Ingreso: marzo-2008
Ubicación: Las Palmas De Gran Canarias
Mensajes: 924
Antigüedad: 16 años, 1 mes
Puntos: 23
Respuesta: ¿Cómo podría hacer que mediante una sentencia SQL se cree una tabla "si no

Cita:
Iniciado por maycolalvarez Ver Mensaje
es así:

CREATE TABLE IF NOT EXISTS `users`

suerte!

el nombre siempre va al final
Una pregunta May, y si quiero que cuando las haya instalado aparesca un mensaje, ¿cómo lo haría?

¿Algún echo, else o if?

Saludos
__________________
Si no te quejas, nunca conseguiras nada, pero si te quejas siempre lo perderás todo.
Una mala acción da fruto a un mal Karma.
  #4 (permalink)  
Antiguo 03/10/2009, 05:53
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: ¿Cómo podría hacer que mediante una sentencia SQL se cree una tabla "si no

uff, buena pregunta, realmente no sabría decirte, porque mysql_affected_rows te devuelve el total de registro afectados, pero eso es cuando editas registros, cuando pasas una instrucción DDL (data definition language) creo que no te devolverá nada, en realidad no se si existe una función que sea especifica para consultas sobre DDL, intenta buscar si con la libreria MySqli puedas hacerlo.
  #5 (permalink)  
Antiguo 03/10/2009, 05:55
Avatar de Distriker  
Fecha de Ingreso: marzo-2008
Ubicación: Las Palmas De Gran Canarias
Mensajes: 924
Antigüedad: 16 años, 1 mes
Puntos: 23
Respuesta: ¿Cómo podría hacer que mediante una sentencia SQL se cree una tabla "si no

Cita:
Iniciado por maycolalvarez Ver Mensaje
uff, buena pregunta, realmente no sabría decirte, porque mysql_affected_rows te devuelve el total de registro afectados, pero eso es cuando editas registros, cuando pasas una instrucción DDL (data definition language) creo que no te devolverá nada, en realidad no se si existe una función que sea especifica para consultas sobre DDL, intenta buscar si con la libreria MySqli puedas hacerlo.
Ok, buscaré eso y ya comunicaré si me ha servido de algo, ahora voy a crear otro post con otro problema xD. Esto de crear algo conlleva bastante esfuerzo

Saludos
__________________
Si no te quejas, nunca conseguiras nada, pero si te quejas siempre lo perderás todo.
Una mala acción da fruto a un mal Karma.
  #6 (permalink)  
Antiguo 03/10/2009, 17:38
Avatar de buzu  
Fecha de Ingreso: octubre-2006
Ubicación: San Francisco, CA
Mensajes: 2.168
Antigüedad: 17 años, 6 meses
Puntos: 122
Respuesta: ¿Cómo podría hacer que mediante una sentencia SQL se cree una tabla "si no

intenta con:

$hecho = mysql_query($query);

if($echo){

}else{
$resultado = "La BD ya ha sido instalada";
echo $resultado;
}

No estoy seguro de que trabaje, todo depende del valor devuelto por la funcion mysql_query en caso de que no se cree la tabla. Estoy seguro de que n caso de haber un error, mysql_qeury te devolvera falso, por lo que se ejecutaria el else, pero no se que te devuelva si la tabla ya existe. De cualquier modo, si no funciona, la solucion de afected rows debe funcionar.
__________________
twitter: @imbuzu
  #7 (permalink)  
Antiguo 15/10/2009, 14:27
Avatar de Distriker  
Fecha de Ingreso: marzo-2008
Ubicación: Las Palmas De Gran Canarias
Mensajes: 924
Antigüedad: 16 años, 1 mes
Puntos: 23
Respuesta: ¿Cómo podría hacer que mediante una sentencia SQL se cree una tabla "si no

Cita:
Iniciado por buzu Ver Mensaje
intenta con:

$hecho = mysql_query($query);

if($echo){

}else{
$resultado = "La BD ya ha sido instalada";
echo $resultado;
}

No estoy seguro de que trabaje, todo depende del valor devuelto por la funcion mysql_query en caso de que no se cree la tabla. Estoy seguro de que n caso de haber un error, mysql_qeury te devolvera falso, por lo que se ejecutaria el else, pero no se que te devuelva si la tabla ya existe. De cualquier modo, si no funciona, la solucion de afected rows debe funcionar.
Bueno Buzu, por lo que yo entiendo en ese codigo, es que cuando se produca la query salga ese mensaje, pero y si yo lo que quiero es que evite que produsca esa acción si ya las tablas han sido instaladas, ¿cómo lo haría?

Saludos
__________________
Si no te quejas, nunca conseguiras nada, pero si te quejas siempre lo perderás todo.
Una mala acción da fruto a un mal Karma.
  #8 (permalink)  
Antiguo 15/10/2009, 16:25
Avatar de gildus  
Fecha de Ingreso: agosto-2003
Mensajes: 1.495
Antigüedad: 20 años, 8 meses
Puntos: 105
Respuesta: ¿Cómo podría hacer que mediante una sentencia SQL se cree una tabla "si no

Holas,

Interesante, una opcion, podrias al final de que hayas ejecutado todos los CREATES (SQL) puedas hacer un SHOW TABLES y que te retorne si esta esa tabla que creastes si esta imprimes echo 'Creado tabla ....'; sino, le muestras no se pudo crear algo asi.

Podria ser una opcion pero creo q es valida.

Saludos
Gildus
__________________
.: Gildus :.
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 21:15.