Respostas:
Não conheço a sintaxe do DOP, mas isso parece bem direto:
$result = mysql_query("SHOW TABLES LIKE 'myTable'");
$tableExists = mysql_num_rows($result) > 0;
mysql_*
funções, elas são oficialmente descontinuadas , não são mais mantidas e serão removidas no futuro. Você deve atualizar seu código com o PDO ou MySQLi para garantir a funcionalidade do seu projeto no futuro.
Se você estiver usando o MySQL 5.0 e posterior, você pode tentar:
SELECT COUNT(*)
FROM information_schema.tables
WHERE table_schema = '[database name]'
AND table_name = '[table name]';
Qualquer resultado indica que a tabela existe.
De: http://www.electrictoolbox.com/check-if-mysql-table-exists/
Usando o mysqli eu criei a seguinte função. Supondo que você tenha uma instância do mysqli chamada $ 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 que ajude.
Atenção: como sugerido por @jcaron, esta função pode ser vulnerável a attets de sqlinjection, portanto, verifique se o seu $table
var está limpo ou ainda melhor use consultas parametrizadas.
Isto é publicado simplesmente se alguém vier à procura desta pergunta. Mesmo que tenha sido respondido um pouco. Algumas das respostas a tornam mais complexa do que precisava.
Para o mysql * eu usei:
if (mysqli_num_rows(
mysqli_query(
$con,"SHOW TABLES LIKE '" . $table . "'")
) > 0
or die ("No table set")
){
Na DOP eu usei:
if ($con->query(
"SHOW TABLES LIKE '" . $table . "'"
)->rowCount() > 0
or die("No table set")
){
Com isso, apenas empurro a condição else para ou. E para as minhas necessidades, só preciso morrer. Embora você possa definir ou para outras coisas. Alguns podem preferir o if / else if / else. Que é então remover ou fornecer e então se / else if / else.
Aqui está a minha solução que eu prefiro ao usar procedimentos armazenados. Função personalizada do mysql para verificar se a tabela existe no banco de dados atual.
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 um "Mostrar tabelas" pode ser lento em bancos de dados maiores, recomendo usar "DESCRIBE" e verifique se você é verdadeiro / 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";
}
}
Estrutura 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;
}
Se o motivo para querer fazer isso é a criação de tabela condicional, 'CREATE TABLE IF NOT EXISTS' parece ideal para o trabalho. Até descobrir isso, usei o método 'DESCRIBE' acima. Mais informações aqui: MySQL "CRIAR TABELA SE NÃO EXISTIR" -> Erro 1050