Alter table avec une variable dynamique

niss87 Messages postés 35 Date d'inscription vendredi 6 février 2009 Statut Membre Dernière intervention 17 mars 2011 - 4 janv. 2010 à 13:57
niss87 Messages postés 35 Date d'inscription vendredi 6 février 2009 Statut Membre Dernière intervention 17 mars 2011 - 5 janv. 2010 à 13:31
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

syndrael Messages postés 2378 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 29 décembre 2012 20
4 janv. 2010 à 14:26
Tu es sur que ton Usr a les droits ? Quel est le message d'erreur ?
S.
0
niss87 Messages postés 35 Date d'inscription vendredi 6 février 2009 Statut Membre Dernière intervention 17 mars 2011
4 janv. 2010 à 15:00
merci pour votre réponse
l'erreur est:
Parse error: syntax error, unexpected T_VARIABLE
0
tpoinsot Messages postés 345 Date d'inscription mardi 1 juin 2004 Statut Membre Dernière intervention 17 octobre 2014 4
4 janv. 2010 à 15:56
Bonjour,

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


thip
0
niss87 Messages postés 35 Date d'inscription vendredi 6 février 2009 Statut Membre Dernière intervention 17 mars 2011
4 janv. 2010 à 16:00
$cri="critere";
$query_Recordset1 = "ALTER TABLE ma-table ADD COLUMN @cri VARCHAR(30)";
$Recordset1 = mysql_query($query_Recordset1, $connex) or die(mysql_error());
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
syndrael Messages postés 2378 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 29 décembre 2012 20
4 janv. 2010 à 16:08
$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.
0
niss87 Messages postés 35 Date d'inscription vendredi 6 février 2009 Statut Membre Dernière intervention 17 mars 2011
4 janv. 2010 à 16:14
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());
0
syndrael Messages postés 2378 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 29 décembre 2012 20
4 janv. 2010 à 16:20
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.
0
tpoinsot Messages postés 345 Date d'inscription mardi 1 juin 2004 Statut Membre Dernière intervention 17 octobre 2014 4
4 janv. 2010 à 16:26
le ";" à la fin de la ligne $tab1[$j]=$matches1[0][$j]


thip
0
niss87 Messages postés 35 Date d'inscription vendredi 6 février 2009 Statut Membre Dernière intervention 17 mars 2011
4 janv. 2010 à 20:11
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
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
4 janv. 2010 à 20:43
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 -
0
niss87 Messages postés 35 Date d'inscription vendredi 6 février 2009 Statut Membre Dernière intervention 17 mars 2011
5 janv. 2010 à 09:11
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());
}
0
niss87 Messages postés 35 Date d'inscription vendredi 6 février 2009 Statut Membre Dernière intervention 17 mars 2011
5 janv. 2010 à 09:20
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
0
syndrael Messages postés 2378 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 29 décembre 2012 20
5 janv. 2010 à 10:23
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.
0
tpoinsot Messages postés 345 Date d'inscription mardi 1 juin 2004 Statut Membre Dernière intervention 17 octobre 2014 4
5 janv. 2010 à 10:26
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
0
tpoinsot Messages postés 345 Date d'inscription mardi 1 juin 2004 Statut Membre Dernière intervention 17 octobre 2014 4
5 janv. 2010 à 10:28
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
0
tpoinsot Messages postés 345 Date d'inscription mardi 1 juin 2004 Statut Membre Dernière intervention 17 octobre 2014 4
5 janv. 2010 à 10:50
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
0
syndrael Messages postés 2378 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 29 décembre 2012 20
5 janv. 2010 à 11:01
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.
0
niss87 Messages postés 35 Date d'inscription vendredi 6 février 2009 Statut Membre Dernière intervention 17 mars 2011
5 janv. 2010 à 11:19
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
0
tpoinsot Messages postés 345 Date d'inscription mardi 1 juin 2004 Statut Membre Dernière intervention 17 octobre 2014 4
5 janv. 2010 à 12:10
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
0
niss87 Messages postés 35 Date d'inscription vendredi 6 février 2009 Statut Membre Dernière intervention 17 mars 2011
5 janv. 2010 à 12:36
oui, j ai essayé $matches2[1][$j],mais ca donne les meme valeurs,or l'affichage de ces valeurs change,c'est tous
0
Rejoignez-nous