Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Problemas al probar si tabla existe

Estas en el tema de Problemas al probar si tabla existe en el foro de PHP en Foros del Web. Estoy haciendo una prueba para valiar si existe una tabla o no. Si existe la tabla verificar si hay registros o no. Este es el ...
  #1 (permalink)  
Antiguo 15/05/2017, 16:14
Avatar de bandolera  
Fecha de Ingreso: abril-2009
Mensajes: 613
Antigüedad: 15 años
Puntos: 7
Pregunta Problemas al probar si tabla existe

Estoy haciendo una prueba para valiar si existe una tabla o no.
Si existe la tabla verificar si hay registros o no.
Este es el código.
Pero cuando la tabla no existe aparece un mensaje: PDOException: SQLSTATE[42S02]: Base table or view not found: 1146
en la línea del query y no entra al If.
Cuál es mi error? o debo validar de otra manera? (Uso PHP/PDO).
Código PHP:
<?php
require ('includes/config.php');
$bd = new Conexion();
$sql "SELECT campo1, campo2 FROM tabla";
$sth $bd->query($sql);
if (!
$sth){
    echo 
"No se ejecutó consulta"// Se supone que muestra si no existe tabla o algún campo u otro problema.
} else {
    if (
$stm->rowCount() > 0) {
        echo 
"Existen registros";
    } else {
        echo 
"No existen registros";
    }
}
?>
__________________
Todos somos iguales. NO! a la violencia de género.
  #2 (permalink)  
Antiguo 15/05/2017, 16:48
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: Problemas al probar si tabla existe

La razón es porque lo quieres hacer como si estuvieras programando estructurado y el mensaje de error te esta enviando una excepción.

Esto lo solucionas usando try/catch.

Código PHP:
Ver original
  1. require ('includes/config.php');
  2.  
  3. try {
  4.    
  5.     $bd = new Conexion();
  6.     $sql = "SELECT campo1, campo2 FROM tabla";
  7.     $sth = $bd->query($sql);
  8.    
  9.     if ($stm->rowCount() > 0) {
  10.         echo "Existen registros";
  11.     } else {
  12.         echo "No existen registros";
  13.     }
  14.    
  15. } catch (PDOException $exception) {
  16.     echo $exception->getMessage();
  17. }
Mas o menos algo así debe de funcionar.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 15/05/2017, 23:49
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Problemas al probar si tabla existe

Aparte de lo mencionado por hhs, estás tratando de consultar una tabla sin saber si existe; si no existe, entonces vas a obtener una excepción.

Podrías hacer algo como:
Código PHP:
Ver original
  1. require ('includes/config.php');
  2. $bd = new Conexion();
  3. $sql = "SHOW TABLES LIKE 'AquiElNombreDeLaTabla'";
  4. $stm = $bd->query($sql);
  5. if($stm->rowCount() == 0) {
  6.     echo 'No existe la tabla';
  7. } else {
  8.     // Sí existe la tabla, aquí haz la otra consulta
  9. }

Ten cuidado con tus variables, porque estás usando $sth para ejecutar la consulta y $stm para ver el total de filas obtenidas (rowCount).
__________________
- León, Guanajuato
- GV-Foto
  #4 (permalink)  
Antiguo 16/05/2017, 09:35
Avatar de bandolera  
Fecha de Ingreso: abril-2009
Mensajes: 613
Antigüedad: 15 años
Puntos: 7
Respuesta: Problemas al probar si tabla existe

Cita:
Iniciado por hhs Ver Mensaje
La razón es porque lo quieres hacer como si estuvieras programando estructurado y el mensaje de error te esta enviando una excepción.

Esto lo solucionas usando try/catch.

Código PHP:
Ver original
  1. require ('includes/config.php');
  2.  
  3. try {
  4.    
  5.     $bd = new Conexion();
  6.     $sql = "SELECT campo1, campo2 FROM tabla";
  7.     $sth = $bd->query($sql);
  8.    
  9.     if ($stm->rowCount() > 0) {
  10.         echo "Existen registros";
  11.     } else {
  12.         echo "No existen registros";
  13.     }
  14.    
  15. } catch (PDOException $exception) {
  16.     echo $exception->getMessage();
  17. }
Mas o menos algo así debe de funcionar.
Tuve que agregar a mi clase conexión la siguiente línea: setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
Para que las excepciones funcione. Gracias.
__________________
Todos somos iguales. NO! a la violencia de género.

Última edición por bandolera; 16/05/2017 a las 09:52
  #5 (permalink)  
Antiguo 16/05/2017, 10:01
Avatar de bandolera  
Fecha de Ingreso: abril-2009
Mensajes: 613
Antigüedad: 15 años
Puntos: 7
Pregunta Respuesta: Problemas al probar si tabla existe

Respuesta alternativa. Esto también funciona sin la excepciones, pero supongo que no es una buena practica. O es una alternativa?
Código PHP:
$sql "SELECT cod, nom FROM tabla";
if (
$stm $BD->query($sql)){
    if (
$stm->rowCount() > 0) {
        echo 
"hay registros";
    } else {
        echo 
"No hay registros";
    }    
} else {
    echo 
"Error";

__________________
Todos somos iguales. NO! a la violencia de género.
  #6 (permalink)  
Antiguo 16/05/2017, 10:45
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Busqueda Respuesta: Problemas al probar si tabla existe

Muy bien creo que necesitas usar setAttribute, desconozco como implementas tu clase Conexión así que te pondré un ejemplo usando directamente PDO solo necesitas adaptar la idea a tu clase.
Código PHP:
Ver original
  1. try {
  2.    
  3.     $bd = new PDO('mysql:host=localhost;dbname=someDb', $username, $password);
  4.     $bd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  5.    
  6.     $sql = "SELECT campo1, campo2 FROM tabla";
  7.     $stm = $bd->query($sql);
  8.    
  9.     //manipular la consulta
  10.    
  11. } catch (PDOException $exception) {
  12.     echo $exception->getMessage();
  13. }

Con eso te debe de funcionar la captura de excepciones
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #7 (permalink)  
Antiguo 16/05/2017, 11:23
Avatar de bandolera  
Fecha de Ingreso: abril-2009
Mensajes: 613
Antigüedad: 15 años
Puntos: 7
Respuesta: Problemas al probar si tabla existe

Cita:
Iniciado por hhs Ver Mensaje
Muy bien creo que necesitas usar setAttribute, desconozco como implementas tu clase Conexión así que te pondré un ejemplo usando directamente PDO solo necesitas adaptar la idea a tu clase.
Código PHP:
Ver original
  1. try {
  2.    
  3.     $bd = new PDO('mysql:host=localhost;dbname=someDb', $username, $password);
  4.     $bd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  5.    
  6.     $sql = "SELECT campo1, campo2 FROM tabla";
  7.     $stm = $bd->query($sql);
  8.    
  9.     //manipular la consulta
  10.    
  11. } catch (PDOException $exception) {
  12.     echo $exception->getMessage();
  13. }

Con eso te debe de funcionar la captura de excepciones
Esto del PDO tiene sus cosas. Cierto? Gracias, es la base para mi problema.
__________________
Todos somos iguales. NO! a la violencia de género.
  #8 (permalink)  
Antiguo 16/05/2017, 14:37
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: Problemas al probar si tabla existe

Solo al principio bandolera y es normal si apenas estas aprendiendo a usar POO. Pero con la practica te vas a sentir mas segura.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #9 (permalink)  
Antiguo 18/05/2017, 15:30
Avatar de bandolera  
Fecha de Ingreso: abril-2009
Mensajes: 613
Antigüedad: 15 años
Puntos: 7
Pregunta Respuesta: Problemas al probar si tabla existe

Cita:
Iniciado por hhs Ver Mensaje
Solo al principio bandolera y es normal si apenas estas aprendiendo a usar POO. Pero con la practica te vas a sentir mas segura.
Una consulta antes de cerrar este tema: Es necesario validar si existe las tablas de trabajo cada vez que se van a utilizar? o existe alguna otra forma de validar todas mis tablas? Gracias.
__________________
Todos somos iguales. NO! a la violencia de género.
  #10 (permalink)  
Antiguo 18/05/2017, 20:04
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: Problemas al probar si tabla existe

En realidad no estas validando, lo que estas haciendo es que si llega a suceder que la tabla no existe entonces tengas la posibilidad de manejar ese error de alguna forma. Claro que lo adecuado es que reduzcas esa posibilidad creando una herramienta que verifique ciertas cosas cuando instales la aplicación.

Para mas detalles revisa estas dos ligas:
https://codeinphp.github.io/post/thr...ptions-in-php/
https://codeinphp.github.io/post/exc...d-yet-awesome/
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.

Etiquetas: probar, registro, select, sql, tabla
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 09:14.