Bonjour, je suis confronté à un problème insoluble malgré toutes mes recherches concernant l'extension PDO pour php que j'utilise pour la manipulation des tables de ma base MySql...

Dans une page php, je crée un objet PDO avec tous les paramêtres corrects, la connexion est ouverte avec tous les droits (pour essais).

Je voudrai créer 2 tables (plus en fait, mais j'ai réduit à 2 pour isoler la source du problème):

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
DROP TABLE IF EXISTS `table_01`;
CREATE TABLE `table_01` (
  `t1_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `t1_champ1` VARCHAR(32)  NOT NULL,
  PRIMARY KEY (`t1_id`)
)
ENGINE = InnoDB
CHARACTER SET latin1 COLLATE latin1_swedish_ci;
 
et
 
DROP TABLE IF EXISTS `table_02`;
CREATE TABLE `table_02` (
  `t2_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `t2_champ1` VARCHAR(32) NOT NULL,
  `t1_id` INT(11) UNSIGNED NOT NULL,
  PRIMARY KEY (`t2_id`)
)
ENGINE = InnoDB
CHARACTER SET latin1 COLLATE latin1_swedish_ci;
Jusque là tout va bien, ça passe dans une seule requête de type exec($query);
Les deux tables sont crées, ça roule...

Mais si j'ajoute une contrainte pour créer une clé étrangère de la manière suivante:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
ALTER TABLE table_02 ADD CONSTRAINT `FKtable_01` FOREIGN KEY `FKtable_01` ( `t1_id` )  REFERENCES `table_01` ( `t1_id` );
ça bloque, impossible de créer la clé étrangère, après vérification (essai d'exportation de la base) aucune clé étrangère!

J'ai essayé deux requêtes séparées, deux objects PDO distincts, un temps d'attente dans le script entre les 2 requêtes et impossible d'ajouter cette clé étrangère.

De même en essayant directement de mettre la clé étrangère dans la table_02, ça ne marche pas ... C'est d'ailleurs ce que je voulais faire à la base car je préfère établire toutes les clé à la création de la table.


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
DROP TABLE IF EXISTS `table_02`;
CREATE TABLE `table_02` (
  `t2_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `t2_champ1` VARCHAR(32) NOT NULL,
  `t1_id` INT(11) UNSIGNED NOT NULL,
  PRIMARY KEY (`t2_id`),
  CONSTRAINT `FKtable_01` FOREIGN KEY `FKtable_01` (`t1_id`)
    REFERENCES `table_01` (`t1_id`)
)
ENGINE = InnoDB
CHARACTER SET latin1 COLLATE latin1_swedish_ci;

Dernière chose: si les 2 tables existent, et si je rappelle le script avec la requête ALTER TABLE seulement, ça fonctionnes: mes clé étrangères sont bien créées...
Naturellement, si je fait ces requêtes d'un coup dans phpMyAdmin, ça tourne aussi.

En gros, il faut que j'appelle 2 scripts pour que ça marche, ce qui ne m'arrange pas du tout, car j'aimerai tout faire en une seule fois, pour le confort de l'utilisateur notamment.

Drole de binz, si quelqu'un a une idée...

Merci d'avance