integrité refentielle

Petit nouveau ! | 4 Messages

23 avr. 2008, 00:55

Bonjour,

bonjour j'ai réalisé ma bd sur mysql pour un mon site et pour ça j'utilise easyphp 1.8 avec mysql 5 donc j'ai téléchargé la version sans installeur et que j'ai décompressé dans le répertoire easyphp et renommé l'ancienne et ajouté ..... bref je travaille avec mysql 5 et je tape les codes suivants la bd est créée sans pb pour l'intregrité référentielle mais lors d'une suppression ou de modification rien ne se passe dans la bd

Code : Tout sélectionner

$sql = 'CREATE TABLE `abonne` (' . ' `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, ' . ' `login` VARCHAR(40) NOT NULL, ' . ' `mdp` VARCHAR(40) NOT NULL, ' . ' `tel1` VARCHAR(20) NOT NULL, ' . ' `tel2` VARCHAR(20), ' . ' `nom` VARCHAR(40) NOT NULL, ' . ' `ville` VARCHAR(40) NOT NULL, ' . ' `local` TEXT, ' . ' `mail` VARCHAR(40), ' . ' `site` VARCHAR(40), ' . ' `logo` INT, ' . ' `photo1` INT, ' . ' `photo2` INT, ' . ' `photo3` INT, ' . ' `type_abo` ENUM("1","2","3") NOT NULL,' . ' `date_cons` DATE NOT NULL,' . ' `etat` ENUM("0","1") NOT NULL,' . ' `qds` VARCHAR(75) NOT NULL, ' . ' `rep` VARCHAR(40) NOT NULL, ' . ' PRIMARY KEY (`id`),' . ' UNIQUE (`login`)' . ' )'; $exreq1=mysql_query($sql,$connection) or die (mysql_error()); $sql = 'CREATE TABLE `photo_abon` (' . ' `id` INT UNSIGNED AUTO_INCREMENT, ' . ' `id_offre` INT UNSIGNED NOT NULL, ' . ' `id_abon` INT UNSIGNED NOT NULL, ' . ' `lien` TEXT NOT NULL,' . ' `lien_vgt` TEXT NOT NULL,' . ' `poids` INT UNSIGNED NOT NULL,' . ' `larg` INT UNSIGNED NOT NULL,' . ' `haut` INT UNSIGNED NOT NULL,' . ' `format` TEXT NOT NULL,' . ' PRIMARY KEY (`id`),' . ' FOREIGN KEY (id_abon) REFERENCES abonne(id) ON DELETE CASCADE ON UPDATE CASCADE' . ' )'; $exreq1=mysql_query($sql,$connection) or die (mysql_error());
[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Administrateur PHPfrance
Administrateur PHPfrance | 3131 Messages

23 avr. 2008, 01:00

Le moteur MyIsam ne supporte ni les contraintes ni les "ondelete".
Il faut utiliser InnoDB pour ça.

Petit nouveau ! | 4 Messages

23 avr. 2008, 01:16

oui mais lorsque g mets a la fin engine=Innodb la base n est plus crée et j ai une erreur qui s affiche

ViPHP
ViPHP | 5924 Messages

23 avr. 2008, 01:19

Si tu ne nous donnes pas cette erreur, nous ne pourrons malheureusement pas la deviner :)

Mammouth du PHP | 19672 Messages

23 avr. 2008, 05:58

Vérifie quels sont les moteurs disponibles dans ta version de MySQL. Ouvre mysql en ligne de commande et exécutes la requête SHOW ENGINES; ça devrait donner une réponse dans ce style :

Code : Tout sélectionner

mysql> SHOW ENGINES; +------------+---------+----------------------------------------------------------------+ | Engine | Support | Comment | +------------+---------+----------------------------------------------------------------+ | MyISAM | DEFAULT | Default engine as of MySQL 3.23 with great performance | | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | | InnoDB | YES | Supports transactions, row-level locking, and foreign keys | | BerkeleyDB | NO | Supports transactions and page-level locking | | BLACKHOLE | NO | /dev/null storage engine (anything you write to it disappears) | | EXAMPLE | NO | Example storage engine | | ARCHIVE | YES | Archive storage engine | | CSV | NO | CSV storage engine | | ndbcluster | NO | Clustered, fault-tolerant, memory-based tables | | FEDERATED | NO | Federated MySQL storage engine | | MRG_MYISAM | YES | Collection of identical MyISAM tables | | ISAM | NO | Obsolete storage engine | +------------+---------+----------------------------------------------------------------+ 12 rows in set (0.00 sec) mysql>
Si en face de InnoDB tu ne vois ni YES ni DEFAULT mais NO, tu ne pourras pas utiliser l'intégrité référentielle qu'il faudra alors gérer par programmation dans ton code.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Petit nouveau ! | 4 Messages

23 avr. 2008, 20:36

comment g fais ca dans easyphp

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

24 avr. 2008, 00:36

comment g fais ca dans easyphp
Tu vas dans un moteur de recherche, tu entres "exécuter requête sql phpmyadmin", tu cliques sur entrée et tu auras plusieurs milliers de résultats. Y'a un moyen, faut se bouger et chercher un peu, surtout popur de bêtes trucs comme ça. Tu gagneras du temps tu verras.