Creation de table en PHP

cs_chapata Messages postés 214 Date d'inscription mercredi 2 février 2005 Statut Membre Dernière intervention 9 avril 2010 - 29 juin 2007 à 15:00
cs_chapata Messages postés 214 Date d'inscription mercredi 2 février 2005 Statut Membre Dernière intervention 9 avril 2010 - 1 juil. 2007 à 10:44
Hello ,

je cherche à créer un table MySQL à l'identique de ma table ODBC
mais je butte sur ma boucle ...

if

(odbc_execute(
$req
)) {
   for (

$i
=

1
;

$i
<= odbc_num_fields(

$req
);

$i
++) {


   $champ
= odbc_field_name(

$req
,

$i
);
   

$format
= odbc_field_type(

$req
,

$i
);
   

$len
= odbc_field_precision(

$req
,

$i
);


}


$sql_create1
=

'CREATE TABLE `'
.

$db
.

'`.`'
.

$odbc_table
.

'` ('
;


$sql_create2
=

'`'
.

$champ
[

$i
].

'` '
.

$format
[

$i
].

'( '
.

$len
[

$i
].

' ) NOT NULL default '
;


$sql_create3
') ENGINE MYISAM DEFAULT CHARSET = latin1'
;$q

= mysql_query($sql_create1.$sql_create2.$sql_create3);

etc ....

Mais je ne sais pas comment placer mes $sql_create ... pour que cela fonctionne
Bien, sur mes connections ODBC et MYSQL sont ouvertes ...

Si une ame charitable est présente ...


ChaPaTa

5 réponses

coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
29 juin 2007 à 16:30
Salut

pour savoir quelle est ton erreur, ajoute or die(mysql_error()); apres mysql_query() (mais avant le ;)

ensuite, donne nous l'erreur, ca sera alors plus simple de t'aider

<hr />une recherche sur exalead vous aurait peut-etre evite de poser cette question

In a dream, I saw me, drop dead...
U were there, U cried...
It was just a dream,
if I die, U won't cry, maybe, U'll be happy
0
cs_chapata Messages postés 214 Date d'inscription mercredi 2 février 2005 Statut Membre Dernière intervention 9 avril 2010 5
30 juin 2007 à 13:42
Salut,

voici le code de ma fonction :

function odbc_create_table($conn, $odbc_table) {
 $d = mysql_query('DROP TABLE IF EXISTS '.$odbc_table.'');
 
 if (!$d) {
  echo mysql_error();
  echo 'impossible de supprimer la table'.$odbc_table;
  exit;
 }
 
 $sql = 'select * from '.$odbc_table.' order by 1,2,3 ';
 $req = odbc_prepare($conn, $sql);
 if(!$req) die('Impossible de charger la table : '.$odbc_table);
 
 if(odbc_execute($req)) {
  
  $debut = true;
  
  for ($i = 1; $i <= odbc_num_fields($req); $i++) {
      $champ = odbc_field_name($req, $i);
      $format = odbc_field_type($req, $i);
      $len = odbc_field_precision($req, $i);
     
   if ($debut = true) {
    
    if ($format = "CHAR") {
      $format = "VARCHAR";
      $sql2 = "`$champ` $format( $len ) NOT NULL default ";
    }else{
     $sql2 = '`'.$champ.'` '.$format.' NOT NULL default ';
    }
    $debut = false;
   }elseif ($debut = false){
    if ($format = "CHAR") {
     $format = "VARCHAR";
     $sql2 = $sql2.", `$champ` $format ( $len ) NOT NULL default ";
    }else{
     $sql2 .= $sql_create2.', `'.$champ.'` '.$format.' NOT NULL default ';
    }
   } 
   
  }
  
  $sql1 = "CREATE TABLE `database`.`$odbc_table` (";  $sql3 ')';// ENGINE MYISAM DEFAULT CHARSET = latin1';
  echo $sql1.$sql2.$sql3;
  $do_create = mysql_query($sql1.$sql2.$sql3);
  
  if (!$do_create) {
   echo mysql_error();
   echo 'impossible de creer la table '.$odbc_table;
   exit;
  }
 }
 echo '<script language="javascript">document.location.href=\''.$_SERVER['PHP_SELF'].'\';</script>';
}

mais, je butte, j'ai des erreurs ...

je veux qu'à chaque champs de ma table ODBC, il le crée en format MySQL,
j'ai donc vérifier avec $debut, que c'est bien le premier champ de la table
sinon, il concatène avec le . la varaible $sql2

Je regarde aussi le format du champ, car MysQL ne supporte pas "CHAR" alors j'ai mis VARCHAR
et suivant, si c'est un VARCHAR ou non, il ajoute la précesion ($len)

apres mon objectif, c'est d'ajouter toute les valeurs de la table, mais, je dois d'abord parer ce problème.

ChaPaTa
0
cs_chapata Messages postés 214 Date d'inscription mercredi 2 février 2005 Statut Membre Dernière intervention 9 avril 2010 5
30 juin 2007 à 14:17
Oups,

je remet mon code sans erreur :

function odbc_create_table($conn, $odbc_table) {
 
 
   //supprime la table importeée si elle existe déjà
   $d = mysql_query('DROP TABLE IF EXISTS '.$odbc_table.'');
 
   if (!$d) {
     echo mysql_error();
     echo 'impossible de supprimer la table'.$odbc_table;
     exit;
    }
 
    //requete selection de la table odbc
    $sql = 'select * from '.$odbc_table.' order by 1,2,3 ';
    $req = odbc_prepare($conn, $sql);
    if(!$req) die('Impossible de charger la table : '.$odbc_table);
 
    if(odbc_execute($req)) {
      //debut = true
      $debut = true;
  
      // pour chaque champ de la table ODBC
      for ($i = 1; $i <= odbc_num_fields($req); $i++) { 
         $champ = odbc_field_name($req, $i);
         $format = odbc_field_type($req, $i);
         $len = odbc_field_precision($req, $i);     
   
         //si premier champ = true
         if ($debut = true) {
    
            // si le format est CHAR alors le passe en VARCHAR
            if ($format = "CHAR") {
              $format = "VARCHAR";
              $sql2 = '`'.$champ.'` '.$format.' ( '.$len.' ) NOT NULL default ';
            }else{
              $sql2 = '`'.$champ.'` '.$format.' NOT NULL default ';
             }
       
            //fin du premier champ
            $debut = false;
         
         //sinon si debut = faux ...
         }elseif ($debut = false){
            
            // meme opération pour le formatage du champ 
            if ($format = "CHAR") {
              $format = "VARCHAR";
              $sql2 = $sql2.', `'.$champ.'` '.$format.' ( '.$len.' ) NOT NULL default ';
            }else{
              $sql2 = $sql2.', `'.$champ.'` '.$format.' NOT NULL default ';
          }
      } 
  }
  
  $sql1 = "CREATE TABLE `mabase`.`$odbc_table` (";  $sql3 ')';// ENGINE MYISAM DEFAULT CHARSET = latin1';
  echo $sql1.$sql2.$sql3;
  $do_create = mysql_query($sql1.$sql2.$sql3);
  
  if (!$do_create) {
   echo mysql_error();
   echo 'impossible de creer la table '.$odbc_table;
   exit;
  }
 }
 echo '<script language="javascript">document.location.href=\''.$_SERVER['PHP_SELF'].'\';</script>';
}

ChaPaTa
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
30 juin 2007 à 14:25
Salut

et comme erreurs, ca renvoi quoi ???

(c'est quand meme le truc qui nous dit ce que ton code ne fait pas de bon...)

<hr />une recherche sur exalead vous aurait peut-etre evite de poser cette question

In a dream, I saw me, drop dead...
U were there, U cried...
It was just a dream,
if I die, U won't cry, maybe, U'll be happy
0

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

Posez votre question
cs_chapata Messages postés 214 Date d'inscription mercredi 2 février 2005 Statut Membre Dernière intervention 9 avril 2010 5
1 juil. 2007 à 10:44
Salut,

l'erreur est au niveau de la syntaxe SQL

1 - il ne me converti pas le "CHAR" en VARCHAR
2 - il ne me concatène pas $sql2= $sql2. etc... (j'ai donc uniquement le dernier champ de ma table ODBC et non tous les champs

Je fait un echo pour voir mon $do_create .....
je fais  $do_create = mysql_query($sql1.$sql2.$sql3); mais impossible de créer la table.

L'erreur doit venir de ma boucle :

// pour chaque champ de la table ODBC
      for ($i = 1; $i <= odbc_num_fields($req); $i++) { 
         $champ = odbc_field_name($req, $i);
         $format = odbc_field_type($req, $i);
         $len = odbc_field_precision($req, $i);     
   
         //si premier champ = true
         if ($debut = true) {
    
            // si le format est CHAR alors le passe en VARCHAR
            if ($format = "CHAR") {
              $format = "VARCHAR";
              $sql2 = '`'.$champ.'` '.$format.' ( '.$len.' ) NOT NULL default ';
            }else{
              $sql2 = '`'.$champ.'` '.$format.' NOT NULL default ';
             }
       
            //fin du premier champ
            $debut = false;
         
         //sinon si debut = faux ...
         }elseif ($debut = false){
            
            // meme opération pour le formatage du champ 
            if ($format = "CHAR") {
              $format = "VARCHAR";
              $sql2 = $sql2.', `'.$champ.'` '.$format.' ( '.$len.' ) NOT NULL default ';
            }else{
              $sql2 = $sql2.', `'.$champ.'` '.$format.' NOT NULL default ';
          }
      } 

mais je ne vois pas où ...

Meric Coucou
0
Rejoignez-nous