MySQL vérifier si une table existe sans lancer une exception

Quelle est la meilleure façon de vérifier si une table existe dans MySQL (de préférence via PDO en PHP) sans lancer une exception. Je n'ai pas envie d'analyser les résultats de "montrer des tableaux comme" et cetera. Il doit y avoir une sorte de requête booléenne?

121
demandé sur clops 2009-10-06 18:00:35

10 réponses

Je ne connais pas la syntaxe AOP pour cela, mais cela semble assez simple:

$result = mysql_query("SHOW TABLES LIKE 'myTable'");
$tableExists = mysql_num_rows($result) > 0;
197
répondu nickf 2009-10-06 14:04:13

si vous utilisez MySQL 5.0 et plus tard, vous pouvez essayer:

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

tous les résultats indiquent que le tableau existe.

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

39
répondu Michael Todd 2009-10-06 14:03:49

en utilisant mysqli j'ai créé la fonction suivante. En supposant que vous avez une instance mysqli appelée $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);
}

J'espère que ça aidera.

avertissement: comme suggéré par @jcaron cette fonction pourrait être vulnérable aux attaches sqlinjection, donc assurez-vous que votre $table var est propre ou utilisez encore mieux les requêtes paramétrisées.

8
répondu Falk 2017-01-31 12:15:23

Voici la solution que je préfère en utilisant des procédures stockées. Fonction mysql personnalisée pour vérifier que la table existe dans la base de données courante.

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
4
répondu erandac 2013-10-10 06:15:23

ceci est affiché simplement si quelqu'un vient chercher cette question. Même si sa déjà été répondu un peu. Certaines réponses de la rendre plus complexe que nécessaire.

pour mysql * j'ai utilisé:

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

dans L'AOP I utilisé:

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

avec ça, je pousse l'autre condition en salle d'op. Et pour mes besoins je n'simplement besoin de mourir. Bien que vous pouvez définir ou à d'autres choses. Certains préféreront peut-être le SI/ AUTREMENT SI/AUTREMENT. Qui est ensuite de supprimer ou puis de fournir si/sinon si / sinon.

4
répondu Esoterica 2013-11-19 17:04:04

comme un "Afficher les tables" pourrait être lent sur les grandes bases de données, je recommande d'utiliser "décrire" et de vérifier si vous obtenez vrai / faux en conséquence

$tableExists = mysqli_query("DESCRIBE `myTable`");
2
répondu Martin Lisicki 2016-01-29 07:22:08
$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";
    }
}
0
répondu Namkeen Butter 2013-09-18 14:33:19

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;

    }
-1
répondu gilcierweb 2016-04-18 16:56:05

si la raison de vouloir faire ceci est la création conditionnelle de table, alors 'créer TABLE si non existe' semble idéal pour le travail. Jusqu'à ce que je découvre ceci, j'ai utilisé la méthode "décrire" ci-dessus. Plus d'informations ici: MySQL "créer une TABLE si elle N'existe pas" -> erreur 1050

-1
répondu Robin 2017-05-23 12:03:01

Pourquoi est-ce si difficile à comprendre?

function table_exist($table){ 
    $pTableExist = mysql_query("show tables like '".$table."'");
    if ($rTableExist = mysql_fetch_array($pTableExist)) {
        return "Yes";
    }else{
        return "No";
    }
} 
-8
répondu Hamed 2012-10-24 05:20:53