Quel est le meilleur moyen de vérifier si une table existe dans MySQL (de préférence via PDO en PHP) sans lever d'exception. Je n'ai pas envie d'analyser les résultats de "SHOW TABLES LIKE", etc. Il doit y avoir une sorte de requête booléenne?
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;
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 avez une instance de 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: tel que suggéré par @jcaron, cette fonction pourrait être vulnérable aux attaques par sqlinjection. Assurez-vous donc que votre $table
var est propre ou encore mieux utilisez des requêtes paramétrées.
Ceci est affiché simplement si quelqu'un vient à la recherche de cette question. Même si sa été un peu répondu. Certaines réponses le rendent 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")
){
En AOP 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, je n'ai besoin que de mourir. Bien que vous puissiez définir ou à d'autres choses. Certains pourraient préférer le if/else if/else. Ce qui est alors à supprimer ou et puis fournir si/else si/else.
Voici la solution que je préfère lorsque j'utilise des 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
Dans la mesure où "Afficher les tables" peut être lent sur des bases de données plus importantes, je vous recommande d'utiliser "DESCRIBE" et de vérifier si vous obtenez true/false à la suite.
$tableExists = mysqli_query("DESCRIBE `myTable`");