Pdo, vérifier si une table existe

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Pdo, vérifier si une table existe

Re: Pdo, vérifier si une table existe

par Castor Gaspard » 19 nov. 2010, 21:02

Bonsoir,

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

Cordialement,

Gasaprd

Re: Pdo, vérifier si une table existe

par stealth35 » 19 nov. 2010, 20:53

c'est juste REPLACE INTO, mais tout ca marche aussi avec les index

Re: Pdo, vérifier si une table existe

par Castor Gaspard » 19 nov. 2010, 20:52

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

par Castor Gaspard » 19 nov. 2010, 20:31

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

par stealth35 » 19 nov. 2010, 19:37

tu peux faire juste REPLACE INTO ou INSERT OR IGNORE non ?

Pdo, vérifier si une table existe

par Castor Gaspard » 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. :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