Creation de table en PHP

Signaler
Messages postés
214
Date d'inscription
mercredi 2 février 2005
Statut
Membre
Dernière intervention
9 avril 2010
-
Messages postés
214
Date d'inscription
mercredi 2 février 2005
Statut
Membre
Dernière intervention
9 avril 2010
-
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

Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
39
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
Messages postés
214
Date d'inscription
mercredi 2 février 2005
Statut
Membre
Dernière intervention
9 avril 2010
4
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
Messages postés
214
Date d'inscription
mercredi 2 février 2005
Statut
Membre
Dernière intervention
9 avril 2010
4
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
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
39
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
Messages postés
214
Date d'inscription
mercredi 2 février 2005
Statut
Membre
Dernière intervention
9 avril 2010
4
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