Pdo, vérifier si une table existe
Posté : 19 nov. 2010, 19:33
Bonjour,
Je me pose une question simple, en apparence, mais dont la solution ne me semble pas évidente.
En fait, je veux interagir avec une base Sqlite grâce à Pdo.
Je pensais que, pour peupler puis modifier mes tables, un simple INSERT OR REPLACE INTO remplirait sa fonction. Or, il semble que Sqlite ne prenne pas en charge cette fonction. Au lieu de remplacer, il ajoute de nouvelles valeurs.
Donc, je me suis dit que, pour contourner le problème, j'allais vérifier si la table en question existe. Si elle n'existe pas, je la créée et je la remplis avec INSERT INTO. Sinon, je la mets à jour avec UPDATE. (Je n'en reviens pas d'avoir trouvé un algorithme aussi intelligent ! ^^).
Seulement, avec Pdo, je n'ai pas trouvé la solution pour vérifier l'existence de cette table. J'avais certes envisageais d'interagir directement avec ma table mais la version de Php,de mon hébergeur, inférieure à la 5.3, ne me permet pas d'utiliser les fonctions de Sqlite 3.
Alors, j'ai mis au point le code suivant...
Il n'est pas fameux, mais il fonctionne.
Aussi, si vous avez une meilleure idée, plus élégante, plus portable, je serai tout à fait preneur.
Merci pour votre nouvelle aide.
Cordialement,
Gaspard
Je me pose une question simple, en apparence, mais dont la solution ne me semble pas évidente.
En fait, je veux interagir avec une base Sqlite grâce à Pdo.
Je pensais que, pour peupler puis modifier mes tables, un simple INSERT OR REPLACE INTO remplirait sa fonction. Or, il semble que Sqlite ne prenne pas en charge cette fonction. Au lieu de remplacer, il ajoute de nouvelles valeurs.
Donc, je me suis dit que, pour contourner le problème, j'allais vérifier si la table en question existe. Si elle n'existe pas, je la créée et je la remplis avec INSERT INTO. Sinon, je la mets à jour avec UPDATE. (Je n'en reviens pas d'avoir trouvé un algorithme aussi intelligent ! ^^).
Seulement, avec Pdo, je n'ai pas trouvé la solution pour vérifier l'existence de cette table. J'avais certes envisageais d'interagir directement avec ma table mais la version de Php,de mon hébergeur, inférieure à la 5.3, ne me permet pas d'utiliser les fonctions de Sqlite 3.
Alors, j'ai mis au point le code suivant...
{
$dbh = new PDO('sqlite:../base/base.sqlite', '', '');
$dbh->beginTransaction();
$table = 'matable';
$sth = $dbh->prepare('SELECT name FROM sqlite_master WHERE name = ?');
$sth->execute(array($table));
$count = $sth->fetch();
$dbh->commit();
$sth->closeCursor();
}
catch(PDOException $e)
{
echo $e->getMessage(). "\n";
echo $e->getCode();
}
if ($count >= 1)
{
///
}
else
{
///
}
Il n'est pas fameux, mais il fonctionne.
Aussi, si vous avez une meilleure idée, plus élégante, plus portable, je serai tout à fait preneur.
Merci pour votre nouvelle aide.
Cordialement,
Gaspard