Respuestas:
No conozco la sintaxis de PDO para esto, pero esto parece bastante sencillo:
$result = mysql_query("SHOW TABLES LIKE 'myTable'");
$tableExists = mysql_num_rows($result) > 0;
mysql_*
funciones, están oficialmente en desuso , ya no se mantienen y se eliminarán en el futuro. Debe actualizar su código con PDO o MySQLi para garantizar la funcionalidad de su proyecto en el futuro.
Si está utilizando MySQL 5.0 y versiones posteriores, puede 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/
Usando mysqli he creado la siguiente función. Asumiendo que tiene una instancia de 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: como lo sugiere @jcaron, esta función podría ser vulnerable a los ataques de sqlinjection, así que asegúrese de que su $table
var esté limpia o incluso mejor use consultas parametrizadas.
Esto se publica simplemente si alguien viene a buscar esta pregunta. A pesar de que ha sido respondido 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 solo empujo la condición else a o. Y para mis necesidades solo necesito morir. Aunque puede configurar o para otras cosas. Algunos pueden preferir el if / else if / else. Cuál es entonces eliminar o y luego suministrar if / else if / else.
Aquí está la solución que prefiero cuando uso procedimientos almacenados. La función mysql personalizada para verificar la tabla existe 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
Como "Mostrar tablas" puede ser lento en bases de datos más grandes, le recomiendo usar "DESCRIBIR" y verificar si obtiene verdadero / falso como resultado
$tableExists = mysqli_query("DESCRIBE `myTable`");
$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";
}
}
Marco Zend
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;
}
Si la razón para querer hacer esto es la creación de una tabla condicional, entonces 'CREAR TABLA SI NO EXISTE' parece ideal para el trabajo. Hasta que descubrí esto, utilicé el método 'DESCRIBIR' anterior. Más información aquí: MySQL "CREAR TABLA SI NO EXISTE" -> Error 1050