Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problème avec DBI et DBD::SQLite

3 réponses
Avatar
NOSPAM_p_genieys
Bonjour,

je suis étonné du comportement de la fonction execute du module DBI

j'ai une requête SQL sur plusieurs lignes

$sql = "CREATE TABLES machin
INSERT INTO table machin values ...;
INSERT INTO table machin values ...;
INSERT INTO table machin values ...;";

lorsque j'execute cette requête avec DBI

$sth = $dbh->prepare($query) or die "...";
$sth->execute or die "...";

une seule ligne est exécutée !!
est ce normal ?
est ce un problème de la fonction execute ?
est ce un pb de SQLite ?
y a t il une solution ?


Merci de votre aide.
Pierre.

-----
posté via http://www.usenetgratuit.com/ plus de 40 000 newsgroups sur le
web. Pour signaler un abus: abuse@usenetgratuit.com

3 réponses

Avatar
Paul Gaborit
À (at) 21 Oct 2004 20:52:25 GMT,
(Pierre Génieys) écrivait (wrote):
je suis étonné du comportement de la fonction execute du module DBI

j'ai une requête SQL sur plusieurs lignes

$sql = "CREATE TABLES machin
INSERT INTO table machin values ...;
INSERT INTO table machin values ...;
INSERT INTO table machin values ...;";


Ce n'est pas *une* requête SQL sur plusieurs lignes. C'est *plusieurs*
requêtes SQL (une par ligne) !

lorsque j'execute cette requête avec DBI

$sth = $dbh->prepare($query) or die "...";
$sth->execute or die "...";

une seule ligne est exécutée !!
est ce normal ?


oui.

y a t il une solution ?


Exécutez vos requêtes SQL une par une.

--
Paul Gaborit - <http://www.enstimac.fr/~gaborit/>
Perl en français - <http://www.enstimac.fr/Perl/>

Avatar
NOSPAM_p_genieys
Paul Gaborit wrote:


Ce n'est pas *une* requête SQL sur plusieurs lignes. C'est *plusieurs*
requêtes SQL (une par ligne) !


Je suis d'accord il s'agit de plusieurs requêtes SQL


Exécutez vos requêtes SQL une par une.


L'idée est d'exécuter plusieurs requêtes dans une transaction pour des
raisons
de performances
Imaginons qu'on un fichier de requêtes SQL:

BEGIN TRANSACTION;
une centaines de requêtes SQL (INSERT);
COMMIT TRANSACTION;


Le comportement de la fonction execute n'est pas assez clair pour moi

Par exmple :si on essaye d'excuter le fichier SQL ligne par ligne comme
suit

...
while ($sql = <SQL> ) {
$sth->execute($sql);
}

Est ce que chaque requête est exécutée au moment où on appelle la fonction
execute ou toutes les lignes seront exécutées (ensemble) lors du dernier
appel à la fonction execute c.à.d avec $sql = "COMMIT TRANSACTION"
( dernière ligne)
le flag AutoCommit du module DBI étant = 0
Merci de votre aide.
Pierre.


-----
posté via http://www.usenetgratuit.com/ plus de 40 000 newsgroups sur le
web. Pour signaler un abus:

Avatar
Laurent Wacrenier
Pierre Génieys écrit:

Le comportement de la fonction execute n'est pas assez clair pour moi


execute envoie la commande au serveur et ne commitera pas si
autocommit n'est pas vrai.