Page 1 sur 1

Pdo, vérifier si une table existe

Posté : 19 nov. 2010, 19:33
par Castor Gaspard
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. :cry:

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. :mrgreen:

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

Re: Pdo, vérifier si une table existe

Posté : 19 nov. 2010, 19:37
par stealth35
tu peux faire juste REPLACE INTO ou INSERT OR IGNORE non ?

Re: Pdo, vérifier si une table existe

Posté : 19 nov. 2010, 20:31
par Castor Gaspard
Bonsoir,

Merci Stealth, je connaissais pas INSERT OR IGNORE INTO.

Cependant, je n'y arrive pas.

Imaginons que, dans ma table 'test_options', j'ai deux colonnes !
- 'option_name', avec 'jour',
- 'option_value', avec 'lundi'.

Si je veux remplacer 'lundi' par 'mardi', j'utilise la syntaxe :

Code : Tout sélectionner

INSERT OR IGNORE INTO 'test_options' ('option_name', 'option_value') VALUES ('jour', 'mardi')
'mardi' ne remplace pas 'lundi' mais s'ajoute.

Pareil pour INSERT OR REPLACE INTO.

Merci pour l'aide. :mrgreen:

Cordialement,

Gaspard

Re: Pdo, vérifier si une table existe

Posté : 19 nov. 2010, 20:52
par Castor Gaspard
Re...

En revanche, ça fonctionne si je demande à insérer ou à remplacer les valeurs en spécifiant l'identité de la clef.

Code : Tout sélectionner

INSERT OR REPLACE INTO 'test_options' ('option_id', 'option_name', 'option_value') VALUES ('1', 'jour', 'mardi')
Normal (mais pas très souple...), selon vous ? :mrgreen:

Cordiale gratitude,

Gaspard

Re: Pdo, vérifier si une table existe

Posté : 19 nov. 2010, 20:53
par stealth35
c'est juste REPLACE INTO, mais tout ca marche aussi avec les index

Re: Pdo, vérifier si une table existe

Posté : 19 nov. 2010, 21:02
par Castor Gaspard
Bonsoir,

Merci, Stealth, grâce à toi, j'ai encore avancé. :D

Cordialement,

Gasaprd