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

Perl et MySQL

7 réponses
Avatar
Delf
Bonjour, je suis confronté à un petit problème (Perl ? SQL ?):
J'ai créé une fonction qui ajoute un enregistrement à une table.
J'ai mis la clé primaire de cette table en AUTO_INCREMENT.
J'ajoute un enregistrement, ca marche. Un autre, impecc. (disons que j'ai
maintenant 10 enregistrements - Un enregistrement a un ID en PK)
Puis j'efface par exemple l'enregistrement 1, 2, 5...
Je relance la fonction. L'ID de l'enregistrement sera 11... ce qui va
laisser des 'trous' dans les ID :\
J'aurais souhaité qu'il mette 1 (puis 2, 5, etc)
Donc j'aimerais savoir comment faire pour ne plus en avoir ?
Merci.

--
Delf

7 réponses

Avatar
Patrice Karatchentzeff
"Delf" writes:

Bonjour, je suis confronté à un petit problème (Perl ? SQL ?):
J'ai créé une fonction qui ajoute un enregistrement à une table.
J'ai mis la clé primaire de cette table en AUTO_INCREMENT.
J'ajoute un enregistrement, ca marche. Un autre, impecc. (disons que j'ai
maintenant 10 enregistrements - Un enregistrement a un ID en PK)
Puis j'efface par exemple l'enregistrement 1, 2, 5...
Je relance la fonction. L'ID de l'enregistrement sera 11... ce qui va
laisser des 'trous' dans les ID :
J'aurais souhaité qu'il mette 1 (puis 2, 5, etc)
Donc j'aimerais savoir comment faire pour ne plus en avoir ?


Il n'y a pas de « trous »... C'est la base de données qui gère
cela. C'est justement l'intérêt d'utiliser une base de données ;-)

PK

--
      |      _,,,---,,_       Patrice KARATCHENTZEFF
ZZZzz /,`.-'`'    -.  ;-;;,_   mailto:
     |,4-  ) )-,_. , (  `'-'  http://p.karatchentzeff.free.fr
    '---''(_/--'  `-'_)       

Avatar
Patrice Karatchentzeff
"Delf" writes:

"Delf" a écrit dans le message news:

if ($SQLRequest->fetchrow_array != 0)
Ca marche, sauf avec des tables qui contiennent des adresses email (que
j'insere avec le simple quote).


Le message d'erreur quand meme :)
Argument "" isn't numeric in numeric ne (!=) at ./db.pl line 152.
Si qq'un pouvait m'aider.


utilise ne à la place de != dans ce cas.

man perlop

PK

--
      |      _,,,---,,_       Patrice KARATCHENTZEFF
ZZZzz /,`.-'`'    -.  ;-;;,_   mailto:
     |,4-  ) )-,_. , (  `'-'  http://p.karatchentzeff.free.fr
    '---''(_/--'  `-'_)       


Avatar
Delf
"Patrice Karatchentzeff" a écrit dans le message news:

Il n'y a pas de « trous »... C'est la base de données qui gère
cela. C'est justement l'intérêt d'utiliser une base de données ;-)


Je parlais de 'trus' juste dans la suite des chiffres. Mais en fait je m'en
sers plus :)
Par contre, j'ai une question:
J'effectue une requete SELECT. J'aimerais savoir s'il y a au moins un
resultat ou non.
Actuellemnt je fais comme ceci:
if ($SQLRequest->fetchrow_array != 0)
Ca marche, sauf avec des tables qui contiennent des adresses email (que
j'insere avec le simple quote).

--
Delf

Avatar
Delf
"Delf" a écrit dans le message news:

if ($SQLRequest->fetchrow_array != 0)
Ca marche, sauf avec des tables qui contiennent des adresses email (que
j'insere avec le simple quote).


Le message d'erreur quand meme :)
Argument "" isn't numeric in numeric ne (!=) at ./db.pl line 152.
Si qq'un pouvait m'aider.

--
Delf

Avatar
Freddo
Salut,

Delf à écrit:
Bonjour, je suis confronté à un petit problème (Perl ? SQL ?):


SQL

J'ai créé une fonction qui ajoute un enregistrement à une table.
J'ai mis la clé primaire de cette table en AUTO_INCREMENT.
J'ajoute un enregistrement, ca marche. Un autre, impecc. (disons que j'ai
maintenant 10 enregistrements - Un enregistrement a un ID en PK)
Puis j'efface par exemple l'enregistrement 1, 2, 5...
Je relance la fonction. L'ID de l'enregistrement sera 11... ce qui va
laisser des 'trous' dans les ID :


C'est normal. Et ça aide, imagine deux table, une User qui contient (je schématise):
ID AUTO_INCREMENT
Name STRING
qui contient
1 Delf
2 Freddo

et une table UserInfo avec:
UserID NUMBER
Country STRING
qui contient:
1 France
2 Gelbique

Bien sûr UserInfo.UserID et User.ID sont liés. Dans ton example, que se passerait-il si tu effaces Patrice mais pas son addresse (Bruxelles) (par erreur, panne, etc...)?

Le prochain user que tu vas créer aura comme User.ID la valeur 2. Plus tard Quand tu sélectionneras les addresses, tu auras deux rangs de retour et ce n'est peut-être pas ce qu'on veut dans ce cas-ci. Tandis que si tu laisses MySQL s'en charger, pas de problèmes.

J'aurais souhaité qu'il mette 1 (puis 2, 5, etc)


Oui tu peux toi-même mettre la valeur dans ton INSERT, par contre je ne sais pas si MySQL a une fonction pour trouver le premier "trou".

Donc j'aimerais savoir comment faire pour ne plus en avoir ?


Il y a peut-être une option pour faire ça dans MySQL, mais je ne sais pas non plus, jette un oeil dans les docs après AUTO_INCREMENT/KEY/INDEX/????.

A plus,
Freddo

Avatar
Delf
"Patrice Karatchentzeff" a écrit dans le message news:

utilise ne à la place de != dans ce cas.


Requete initiale pour savoir si un user peut acceder à la suite du prg:
$DBRequest->prepare("SELECT * FROM USERS WHERE LoginUser = '$Login' AND
PassUser = '$Pass'");

Comme je veux savoir s'il est present dans la base, j'ai changer cette
requete par:

$DBRequest->prepare("SELECT COUNT(*) FROM USERS WHERE LoginUser = '$Login'
AND PassUser = '$Pass'");

J'aimerais savoir si c'est propre ou non. En tout cas ca fonctionne.
Merci. (en principe j'ai fini mes questions de la journée :o)

Je vais voir avec le "ne" ca que ca aurait fait.

--
Delf

Avatar
Maxime Wojtczak
Salut!

Delf wrote:
"Patrice Karatchentzeff" a écrit dans le message news:


utilise ne à la place de != dans ce cas.



Requete initiale pour savoir si un user peut acceder à la suite du prg:
$DBRequest->prepare("SELECT * FROM USERS WHERE LoginUser = '$Login' AND
PassUser = '$Pass'");

Comme je veux savoir s'il est present dans la base, j'ai changer cette
requete par:

$DBRequest->prepare("SELECT COUNT(*) FROM USERS WHERE LoginUser = '$Login'
AND PassUser = '$Pass'");


$sth = $DBRequest->prepare('SELECT COUNT(*) FROM users WHERE loginuser=?
AND passuser=?;');
$sth->execute($Login,$Pass) or die $dbh->errstr;


est beaucoup plus propre que la méthode que tu utilises et, chose bien
pratique, si la variable $Login contient une quote, avec la méthode que
je viens de donner, elle est automatiquement *backslashée* si je puis
m'exprimer ainsi, contrairement à ta méthode où il risque d'y avoir une
erreur SQL


J'aimerais savoir si c'est propre ou non. En tout cas ca fonctionne.
Merci. (en principe j'ai fini mes questions de la journée :o)


Pas de quoi


Je vais voir avec le "ne" ca que ca aurait fait.

--
Delf


Max