validar usuario una tiempo tabla saber registro mismo insertar guardar existe este ejecutar comprobar antes actualizar php mysql pdo database

php - usuario - si no existe insert mysql



MySQL comprueba si existe una tabla sin arrojar una excepción (10)

Cuál es la mejor manera de verificar si existe una tabla en MySQL (preferiblemente a través de PDO en PHP) sin lanzar una excepción. No tengo ganas de analizar los resultados de "MOSTRAR MESAS", etcétera. Debe haber algún tipo de consulta booleana?


¿Por qué lo haces tan difícil de entender?

function table_exist($table){ $pTableExist = mysql_query("show tables like ''".$table."''"); if ($rTableExist = mysql_fetch_array($pTableExist)) { return "Yes"; }else{ return "No"; } }


Dado que un "Show tables" puede ser lento en bases de datos más grandes, recomiendo usar "DESCRIBE" y verificar si se obtiene verdadero / falso como resultado

$tableExists = mysqli_query("DESCRIBE `myTable`");


Esta es la solución que prefiero cuando uso procedimientos almacenados. Función mysql personalizada para comprobar que la tabla exista en la base de datos actual.

delimiter $$ CREATE FUNCTION TABLE_EXISTS(_table_name VARCHAR(45)) RETURNS BOOLEAN DETERMINISTIC READS SQL DATA BEGIN DECLARE _exists TINYINT(1) DEFAULT 0; SELECT COUNT(*) INTO _exists FROM information_schema.tables WHERE table_schema = DATABASE() AND table_name = _table_name; RETURN _exists; END$$ SELECT TABLE_EXISTS(''you_table_name'') as _exists


Esto se publica simplemente si alguien viene a buscar esta pregunta. A pesar de que ha sido respondida un poco. Algunas de las respuestas lo hacen más complejo de lo necesario.

Para mysql * utilicé:

if (mysqli_num_rows( mysqli_query( $con,"SHOW TABLES LIKE ''" . $table . "''") ) > 0 or die ("No table set") ){

En PDO utilicé:

if ($con->query( "SHOW TABLES LIKE ''" . $table . "''" )->rowCount() > 0 or die("No table set") ){

Con esto, simplemente presiono la condición else en o. Y para mis necesidades solo necesito morir. Aunque puede establecer o para otras cosas. Algunos prefieren el if / else if / else. Que es entonces eliminar y luego suministrar if / else if / else.


No conozco la sintaxis PDO, pero parece bastante sencillo:

$result = mysql_query("SHOW TABLES LIKE ''myTable''"); $tableExists = mysql_num_rows($result) > 0;


Si está utilizando MySQL 5.0 y versiones posteriores, podría intentar:

SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = ''[database name]'' AND table_name = ''[table name]'';

Cualquier resultado indica que la tabla existe.

De: http://www.electrictoolbox.com/check-if-mysql-table-exists/


Si la razón para querer hacer esto es crear una tabla condicional, entonces ''CREAR TABLA SI NO EXISTE'' parece ideal para el trabajo. Hasta que descubrí esto, utilicé el método ''DESCRIBE'' anterior. Más información aquí: MySQL "CREAR TABLA SI NO EXISTE" -> Error 1050


Usando mysqli he creado la siguiente función. Asumiendo que tienes una instancia mysqli llamada $ con.

function table_exist($table){ global $con; $table = $con->real_escape_string($table); $sql = "show tables like ''".$table."''"; $res = $con->query($sql); return ($res->num_rows > 0); }

Espero eso ayude.

Advertencia: según lo sugerido por @jcaron, esta función podría ser vulnerable a sqlinjection attacs, por lo tanto, asegúrese de que su $table var esté limpia o incluso mejor utilice consultas con parámetros.


Zend framework

public function verifyTablesExists($tablesName) { $db = $this->getDefaultAdapter(); $config_db = $db->getConfig(); $sql = "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = ''{$config_db[''dbname'']}'' AND table_name = ''{$tablesName}''"; $result = $db->fetchRow($sql); return $result; }


$q = "SHOW TABLES"; $res = mysql_query($q, $con); if ($res) while ( $row = mysql_fetch_array($res, MYSQL_ASSOC) ) { foreach( $row as $key => $value ) { if ( $value = BTABLE ) // BTABLE IS A DEFINED NAME OF TABLE echo "exist"; else echo "not exist"; } }