Réponses:
Je ne connais pas la syntaxe PDO pour cela, mais cela semble assez simple:
$result = mysql_query("SHOW TABLES LIKE 'myTable'");
$tableExists = mysql_num_rows($result) > 0;
mysql_*
fonctions, elles sont officiellement obsolètes , ne sont plus maintenues et seront supprimées à l'avenir. Vous devez mettre à jour votre code avec PDO ou MySQLi pour garantir la fonctionnalité de votre projet à l'avenir.
Si vous utilisez MySQL 5.0 et versions ultérieures, 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 la table existe.
De: http://www.electrictoolbox.com/check-if-mysql-table-exists/
En utilisant mysqli, j'ai créé la fonction suivante. En supposant que vous ayez 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 aide.
Attention: comme suggéré par @jcaron, cette fonction pourrait être vulnérable aux attacs sqlinjection, alors assurez-vous que votre $table
var est propre ou mieux utilisez des requêtes paramétrées.
Ceci est affiché simplement si quelqu'un vient chercher cette question. Même si on lui a répondu un peu. Certaines des réponses le rendent plus complexe qu'il ne devait l'être.
Pour mysql * j'ai utilisé:
if (mysqli_num_rows(
mysqli_query(
$con,"SHOW TABLES LIKE '" . $table . "'")
) > 0
or die ("No table set")
){
Dans PDO j'ai utilisé:
if ($con->query(
"SHOW TABLES LIKE '" . $table . "'"
)->rowCount() > 0
or die("No table set")
){
Avec cela, je pousse simplement la condition else dans ou. Et pour mes besoins, j'ai simplement besoin de mourir. Bien que vous puissiez définir ou à d'autres choses. Certains pourraient préférer le if / else if / else. Ce qui consiste alors à supprimer ou et à fournir ensuite if / else if / else.
Voici ma solution que je préfère lors de l'utilisation de procédures stockées. Fonction mysql personnalisée pour vérifier que la table existe dans la base de données actuelle.
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
Comme un "Afficher les tables" peut être lent sur des bases de données plus volumineuses, je recommande d'utiliser "DESCRIBE" et de vérifier si vous obtenez true / false en conséquence
$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";
}
}
Cadre 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 raison de vouloir faire cela est la création de table conditionnelle, alors 'CREATE TABLE IF NOT EXISTS' semble idéal pour le travail. Jusqu'à ce que je découvre cela, j'ai utilisé la méthode «DESCRIBE» ci-dessus. Plus d'informations ici: MySQL "CREATE TABLE IF NOT EXISTS" -> Erreur 1050