Alter table avec une variable dynamique

Signaler
Messages postés
35
Date d'inscription
vendredi 6 février 2009
Statut
Membre
Dernière intervention
17 mars 2011
-
Messages postés
35
Date d'inscription
vendredi 6 février 2009
Statut
Membre
Dernière intervention
17 mars 2011
-
Bonjour,
je veux ajouter des colonnes a ma table ,or le nom de la colone ajoutée va etre une variable;par exemple:
ALTER TABLE ma-table ADD COLUMN $var VARCHAR(30);
et $var contient une valeur dynamique
je l'ai essayé, mais ca ne marche pas,
SVP, comment faire?
merci

22 réponses

Messages postés
2380
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
29 décembre 2012
16
Tu es sur que ton Usr a les droits ? Quel est le message d'erreur ?
S.
Messages postés
35
Date d'inscription
vendredi 6 février 2009
Statut
Membre
Dernière intervention
17 mars 2011

merci pour votre réponse
l'erreur est:
Parse error: syntax error, unexpected T_VARIABLE
Messages postés
345
Date d'inscription
mardi 1 juin 2004
Statut
Membre
Dernière intervention
17 octobre 2014
3
Bonjour,

montre ton code, ce sera plus simple, en indiquant la ligne provoquant l'erreur (a priori c'est l'alter table)


thip
Messages postés
35
Date d'inscription
vendredi 6 février 2009
Statut
Membre
Dernière intervention
17 mars 2011

$cri="critere";
$query_Recordset1 = "ALTER TABLE ma-table ADD COLUMN @cri VARCHAR(30)";
$Recordset1 = mysql_query($query_Recordset1, $connex) or die(mysql_error());
Messages postés
2380
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
29 décembre 2012
16
$query_Recordset1 = "ALTER TABLE ma-table ADD COLUMN ".$cri." VARCHAR(30)";

Et avec ça ??
Par contre je t'avoue que si c'est une action marginale je ne vois pas l'intérêt de faire un script en PHP. Attention à ne pas en faire trop..
Pour moi, ALTER TABLE = Exceptionnel !!
S.
Messages postés
35
Date d'inscription
vendredi 6 février 2009
Statut
Membre
Dernière intervention
17 mars 2011

ca marche pas avec ".$cri."!!je l'ai deja essayé
ce code est seulement un exemple pour vous expliquer,mon code est:
preg_match_all("|(.*)</LI>|U",
$result1,
$matches1,
PREG_PATTERN_ORDER);

$tab1=array();
mysql_select_db($database_connex, $connex);
for($j=0;$j<50;$j++)
{$tab1[$j]=$matches1[0][$j]
$query_Recordset1 = "ALTER TABLE fichetel ADD COLUMN ".$tab1[$j]." VARCHAR(30)";
$Recordset1 = mysql_query($query_Recordset1, $connex) or die(mysql_error());
Messages postés
2380
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
29 décembre 2012
16
Et si tu fais un
echo $tab1[$j];

Il te donne bien le résultat que tu désires ?? Car ton erreur est une erreur PHP et non MySQL.
S.
Messages postés
345
Date d'inscription
mardi 1 juin 2004
Statut
Membre
Dernière intervention
17 octobre 2014
3
le ";" à la fin de la ligne $tab1[$j]=$matches1[0][$j]


thip
Messages postés
35
Date d'inscription
vendredi 6 février 2009
Statut
Membre
Dernière intervention
17 mars 2011

bonsoir,
je vois pas ou mettre le "echo $tab1[$j]".
pour le ";", j ai oublie de le mettre qd j'ai envoye le msg ds ce forum, mais merci
Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
Salut,

Je pense qu'il serait bien que tu redonnes l'erreur complète qui est générée, que tu surlignes la ligne en question, en prenant soin de donner le code nécessaire à la compréhension (une dizaine de lignes de part et d'autre de l'erreur), que tu indentes et utilises la balise code , et que tu contrôles ton copié/collé afin de ne pas partit sur de mauvaises pistes comme l'a fait Tpointsot.
En faisant ça nous pourrons surement t'aider.

Cordialement,

Kohntark -
Messages postés
35
Date d'inscription
vendredi 6 février 2009
Statut
Membre
Dernière intervention
17 mars 2011

bonjour;
voici mon code:
$result1=  file_get_contents('parse1.html');
preg_match_all("| (.*) |U", 
                 $result1, 
                 $matches2, 
                 PREG_PATTERN_ORDER);
$tab1 =array();
mysql_select_db($database_connex, $connex);

for($j=0;$j<50;$j++)
{
$tab1[$j]=$matches2[0][$j];

$query_Recordset1 = "ALTER TABLE fichetel ADD COLUMN ".$tab1[$j]." VARCHAR(30)";
$Recordset1 = mysql_query($query_Recordset1, $connex) or die(mysql_error());
}
Messages postés
35
Date d'inscription
vendredi 6 février 2009
Statut
Membre
Dernière intervention
17 mars 2011

bonjour;
quand j ai fais:
$query_Recordset1 = "ALTER TABLE fichetel ADD COLUMN ".$tab1[$j]." VARCHAR(30)";

j'aurais l'erreur:

ALTER TABLE fichetel ADD COLUMN Largeur VARCHAR(30)You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Largeur VARCHAR(30)' at line 1

et ici $tab1[$j]=largeur
il me fait cette erreur tt au long de la boucle de ALTER
Messages postés
2380
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
29 décembre 2012
16
Et depuis une console mySQL tu peux tester:
ALTER TABLE `fichetel` ADD `largeur` VARCHAR( 30 )

Car pour moi le COLUMN est en trop non ??
S.
Messages postés
345
Date d'inscription
mardi 1 juin 2004
Statut
Membre
Dernière intervention
17 octobre 2014
3
Une erreur de syntaxe, c'est une erreur d'orthographe d'un mot clé, des mots consécutifs inappropriés, des caratères spéciaux...
La tienne ne saute pas aux yeux !

Si tu ne peux pas faire d'echo, force la requête pour vérifier que le reste fonctionne :
for($j=0;$j<1; $j++) //50;$j++)
{
$tab1[$j]="Largeur"; //$matches2[0][$j];

Si ça ne passe toujours pas remplace tab1[$j] par x ou autre, sinon c'est la varriable matches2 qui ne va pas

thip
Messages postés
345
Date d'inscription
mardi 1 juin 2004
Statut
Membre
Dernière intervention
17 octobre 2014
3
Le COLUMN c'est pour faire beau, mais n'est pas de trop, on a le droit de le mettre.
Pour ma part, je préfère le mettre pour distinguer de "add index" ou autre add. Uniquement pour la lecture donc.


thip
Messages postés
345
Date d'inscription
mardi 1 juin 2004
Statut
Membre
Dernière intervention
17 octobre 2014
3
Une idée en passant : utilise $matches2[1][$j]; au lieu de $matches2[0][$j]
l'index 0 contient des balises qu'on ne voit pas à l'écran.

thip
Messages postés
2380
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
29 décembre 2012
16
L'idée du Column m'est venue car je me suis dit: 'de là à ce qu'il y ait une configuration spéciale sur MySQL, on ne sait jamais'..
Et hop.. un coup d'épée dans l'eau..
S.
Messages postés
35
Date d'inscription
vendredi 6 février 2009
Statut
Membre
Dernière intervention
17 mars 2011

merci a tous
j'ai trouvé le pb:
c etais que la variable "$tab1[$j] etait en gras entre et ,malgres que je les ai supprimé avec "preg_match_all"..
alors j ai fais
$t2[$j]=$matches2[0][$j];
$t1[$j]=substr($t2[$j],8);//pour enlever le premier 
$tab[$j]=substr($t1[$j],0,-9);//POUR ENLEVER LE 2EME 



mais mtn,quand je fais ALTER , et la colone existe déja, il me fait erreur"Diplicate column"..c'est clair
mais est ce qu'il y a une solution genre:
ALTER table ma_table ADD column if not exist nom_colone varchar(30);

merci pour votre aide et vos réponses
Messages postés
345
Date d'inscription
mardi 1 juin 2004
Statut
Membre
Dernière intervention
17 octobre 2014
3
Tu as essayé en utilisant l'index 1 ?
je disais
Une idée en passant : utilise $matches2[1][$j]; au lieu de $matches2[0][$j]
l'index 0 contient des balises qu'on ne voit pas à l'écran.

les balises en question sont bien entendu le strong.

$matches2[0][$j] contient xyz
$matches2[1][$j] contient xyz


thip
Messages postés
35
Date d'inscription
vendredi 6 février 2009
Statut
Membre
Dernière intervention
17 mars 2011

oui, j ai essayé $matches2[1][$j],mais ca donne les meme valeurs,or l'affichage de ces valeurs change,c'est tous