Problème de boucle Sqlite (php5 ZF)

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 : Problème de boucle Sqlite (php5 ZF)

par Maitrepylos » 27 nov. 2007, 09:14

Je ne sais où étais l'erreur, mais avec votre code cela fonctionne nickel, d'autant que j'utilise déjà sqlite dans un autre controller et que cela fonctionnais nickel.

Encore merci à vous deux. :P

par Berzemus » 26 nov. 2007, 17:24

Pour des inserts et des updates, des requêtes pour lesquelles aucune réponse n'est attendue, c'est mieux d'utiliser sqlite_exec.

Le mieux, si tu en as quelques-uns, c'est de la faire de façon transactionelle:

sqlite_exec($handle,"BEGIN;");
sqlite_exec($handle,"INSERT...");
etc...

sqlite_exec($handle,"END;");

Ainsi, il n'effectuera les opérations qu'a la fin de la transaction, ce qui permet de gagner beaucoup de temps (pour plusieurs centaines de requêtes).

par Cyrano » 26 nov. 2007, 17:12

J'ignore ce qui cloche, je viens de faire un test en local. Ne disposant pas de l'objet, j'ai recréé un tableau pour les données et à peine repris le code histoire de le lire plus facilement, ça donne ceci :
<?php
$table = 'CREATE TABLE foo ('.
         '    nombase varchar(255),'.
         '    developpement varchar(255),'.
         '    integration varchar(255),'.
         '    acceptance varchar(255), '.
         '    production varchar(255),'.
         '    reference varchar(255), '.
         '    rdc varchar(255),'.
         '    formation varchar(255)'.
         ')';

$sqlite = sqlite_open(":memory:", 0777, $sqliteerror);
sqlite_query($sqlite, $table);

$nom_base = array();
$nom_base[0] = array('T_NAME' => 'toto');
$nom_base[1] = array('T_NAME' => 'coco');
$nom_base[2] = array('T_NAME' => 'babar');
$nom_base[3] = array('T_NAME' => 'test');
$count = count($nom_base);

for ($i = 0; $i < $count; $i++)
{
    $sql = "INSERT INTO foo VALUES ('". $nom_base[$i]['T_NAME'] ."','','','','','','','')";
    sqlite_query($sql, $sqlite);
}
/* Test de vérification du contenu enregistré... */
$sql2 = "SELECT * FROM foo";
$rs = sqlite_query($sqlite, $sql2);
$resultat = sqlite_fetch_all($rs, SQLITE_ASSOC);
foreach ($resultat as $ligne)
{
    echo("<pre>\n");
    var_dump($ligne);
    echo("</pre>\n");
}
?>
Le résultat est satisfaisant et j'obtiens bien les quatre lignes insérées. Vérifie bien la structure de ton tableau en entrée, le bobo est peut-être là :-k

Problème de boucle Sqlite (php5 ZF)

par Maitrepylos » 26 nov. 2007, 16:07

Bonjour, je crée un base sqlite en mémoire, mais je n'arrive qu'a inséré une seule entrée dans cette base.

Voici le code

		$table = 'CREATE TABLE foo (nombase varchar(255),developpement varchar(255),integration varchar(255),';
		$table.= 'acceptance varchar(255), production varchar(255),reference varchar(255), rdc varchar(255),formation varchar(255))';

		$sqlite = sqlite_open(":memory:", 0777, $sqliteerror);
		sqlite_query($sqlite,$table);



		$count = count($this->nom_base);

		for ($i = 0; $i < $count; $i++)
		{
			$nom = $this->nom_base[$i]['T_NAME'];
			sqlite_query($sqlite,"INSERT INTO foo VALUES ('$nom','','','','','','','')");

		}


J'ai fais un tas de vérification et je confirme que dans this->nom_base, j'ai bien un tableau.

de même si je multiplie les lignes suivantes
sqlite_query($sqlite,"INSERT INTO foo VALUES ('toto','','','','','','','')");
sqlite_query($sqlite,"INSERT INTO foo VALUES ('coco','','','','','','','')");
sqlite_query($sqlite,"INSERT INTO foo VALUES ('toutou','','','','','','','')");
sqlite_query($sqlite,"INSERT INTO foo VALUES ('Moman','','','','','','','')");
Je n'arrive qu'a insérer la première ligne, les autres ne sont pas prise en compte, et je n'ai aucun message d'erreur.

Merci de votre aide.