$req="select * from acces"; if (!$r = $db->query($req)) { error($req, __FILE__, __LINE__, $db->error());} if (!$acces=$db->fetch_assoc($r)) { // Pas trouvé dans la table des noms ! $db->free_result($r); exit; }Ce n'est pas comme ça que l'on doit fonctionner avec la class à laquelle tu te réfères.
$req="SELECT * FROM acces"; //On envoie la requête et si erreur, elle sera gérée par le 'or' $result = $db->query($req) or error('Extraction table access impossible', __FILE__, __LINE__, $db->error()); //Ensuite on va voir si il y a un résultat $nb_res = $db->num_rows($result); //Si il y a des résultats, on traite if($nb_res > 0) { ... } else echo "Aucun résultat\n";Pour l'insertion de données :
$req="INSERT INTO actions (Acteur, Quand, Fonction) VALUES (" . $acteur["Numero"] . ", '" . $acces["Jour"] . "', '" . $acces["Fonction"] . "')"; $db->query($req) or error('INSERT dans actions impossible', __FILE__, __LINE__, $db->error()); if($db->affected_rows() == 0) echo "Pas de lignes insérées dans actions\n"; else echo $db->affected_rows()." lignes insérées dans actions\n";
Citation
l'AMI Yves
En fait, si je viens ici, c'est que je n'arrive pas à la faire marcher !
J'ai ma Table1, avec l'index auto_increment et trois champs. J'ai besoin de cet index dans ma Table2.
1) Je fais un SELECT sur table1 avec les valeurs des 3 champs.
2) Si je ne trouve rien, je fais un INSERT sur Table1 avec ces trois champs.
3) Je refais mon SELECT
4) Je récupère mon index et je continue.
Et mon programme se déroule !
Quand j'arrive au bout, ma Table2 est bien remplie, avec des valeurs diverses à la place de l'index.
MAIS quand je regarde ma Table1 avec PHPMySQL, elle est VIDE !!!!!!
-- =========================== -- Création de la base `Essai` -- =========================== DROP DATABASE IF EXISTS `essai`; CREATE DATABASE IF NOT EXISTS `essai` DEFAULT CHARACTER SET `utf8` DEFAULT COLLATE `utf8_general_ci`; USE `essai`; -- ============================== -- Création de la table `article` -- ============================== CREATE TABLE `article` ( id int NOT NULL AUTO_INCREMENT, article CHAR(10) NOT NULL, CONSTRAINT PRIMARY KEY(`article`,`id`) ) ENGINE=MyISAM ROW_FORMAT=COMPRESSED DEFAULT CHARSET=`utf8` COLLATE=`utf8_unicode_ci`; -- ================================ -- Insertion dans table : `article` -- ================================ INSERT INTO `article` (article) VALUES ('bleu'), ('rouge'), ('vert'), ('bleu'), ('bleu'), ('rouge'); COMMIT; -- =============================== -- Contenu de la table : `article` -- =============================== select article, id from `article` order by id; -- =================================== -- Suppression de la table : `article` -- =================================== DROP TABLE IF EXISTS `article`; -- ================================ -- Suppression de la base : `essai` -- ================================ DROP DATABASE IF EXISTS `essai`; COMMIT;Je sais que ce n'est pas exactement ce que tu recherches, mais c'est déjà une première compréhension de ce que tu cherches à faire.
-- =========================== -- Création de la base `Essai` -- =========================== DROP DATABASE IF EXISTS `essai`; CREATE DATABASE IF NOT EXISTS `essai` DEFAULT CHARACTER SET `utf8` DEFAULT COLLATE `utf8_general_ci`; USE `essai`; -- ============================ -- Création de la table `pere1` -- ============================ CREATE TABLE `pere1` ( papa1 CHAR(10) DEFAULT ' ' NOT NULL, info1 CHAR(10) DEFAULT ' ' NOT NULL, CONSTRAINT PRIMARY KEY(`papa1`) ) ENGINE=InnoDB ROW_FORMAT=COMPRESSED DEFAULT CHARSET=`utf8` COLLATE=`utf8_unicode_ci`; -- ============================== -- Insertion dans table : `pere1` -- ============================== INSERT INTO `pere1` (papa1, info1) VALUES ('bleu', 'blue'), ('rouge', 'red'), ('vert', 'green'), ('jaune', 'yellow'), ('marron', 'maroon'), ('gris', 'grey'); COMMIT; -- ============================ -- Vidage de la table : `pere1` -- ============================ select * from `pere1`; -- ============================ -- Création de la table `pere2` -- ============================ CREATE TABLE `pere2` ( papa2 CHAR(10) DEFAULT ' ' NOT NULL, info2 CHAR(10) DEFAULT ' ' NOT NULL, CONSTRAINT PRIMARY KEY(`papa2`) ) ENGINE=InnoDB ROW_FORMAT=COMPRESSED DEFAULT CHARSET=`utf8` COLLATE=`utf8_unicode_ci`; -- ============================== -- Insertion dans table : `pere2` -- ============================== INSERT INTO `pere2` (papa2,info2) VALUES ('un', 'one'), ('deux', 'two'), ('trois', 'three'), ('quatre', 'four'), ('cinq', 'five'), ('six', 'six'); COMMIT; -- ============================ -- Vidage de la table : `pere2` -- ============================ select * from `pere2`; -- =========================== -- Création de la table `fils` -- =========================== CREATE TABLE `fils` ( papa1 CHAR(10) NOT NULL, papa2 CHAR(10) NOT NULL, id int NOT NULL, CONSTRAINT PRIMARY KEY(`papa1`,`papa2`,`id`), CONSTRAINT FOREIGN KEY (papa1) REFERENCES pere1(papa1) ON UPDATE CASCADE ON DELETE CASCADE, CONSTRAINT FOREIGN KEY (papa2) REFERENCES pere2(papa2) ON UPDATE CASCADE ON DELETE CASCADE ) ENGINE=InnoDB ROW_FORMAT=COMPRESSED DEFAULT CHARSET=`utf8` COLLATE=`utf8_unicode_ci`; -- ============================ -- Ajout Index sur table `fils` -- ============================ CREATE INDEX Clef1 ON fils (`papa1`); CREATE INDEX Clef2 ON fils (`papa2`); -- ============================ -- Création Trigger `increment` -- ============================ DROP TRIGGER IF EXISTS `increment`; DELIMITER $$ CREATE TRIGGER `increment` BEFORE INSERT ON `fils` FOR EACH ROW BEGIN SET NEW.id=ifnull((select max(id)+1 from fils where papa1=new.papa1 and papa2=new.papa2),1); END$$ DELIMITER ; -- ============================= -- Insertion dans table : `fils` -- ============================= INSERT INTO `fils` (papa1, papa2) VALUES ('bleu', 'un'), ('rouge', 'deux'), ('vert', 'trois'), ('bleu', 'deux'), ('bleu', 'un'), ('bleu', 'deux'); COMMIT; -- ============================ -- Contenu de la table : `fils` -- ============================ select papa1, papa2, id from `fils` order by papa1, papa2; -- ============================= -- Structure de la vue `details` -- ============================= DROP VIEW IF EXISTS `details`; CREATE VIEW `details` AS SELECT p1.papa1, p1.info1, p2.papa2, p2.info2, fl.id FROM fils as fl LEFT JOIN pere1 as p1 ON fl.papa1 = p1.papa1 LEFT JOIN pere2 as p2 ON fl.papa2 = p2.papa2; -- ============================= -- Contenu de la vue : `details` -- ============================= select * from `details`; -- =================================== -- Suppression de la table : `details` -- =================================== DROP VIEW IF EXISTS `details`; -- ================================ -- Suppression de la table : `fils` -- ================================ DROP TABLE IF EXISTS `fils`; -- ================================= -- Suppression de la table : `pere2` -- ================================= DROP TABLE IF EXISTS `pere2`; -- ================================= -- Suppression de la table : `pere1` -- ================================= DROP TABLE IF EXISTS `pere1`; -- ================================ -- Suppression de la base : `essai` -- ================================ DROP DATABASE IF EXISTS `essai`; COMMIT;
$last_increment = $db->insert_id();Et, $last_increment contiendra valeur du champ AUTO_INCREMENT modifiée par la dernière requête. Retourne zéro s'il n'y a pas eu de requête sur la connexion ou si la dernière requête n'a pas modifié la valeur de l'AUTO_INCREMENT.
Citation
Otomatic
mais comment récupérer la valeur du champ AUTO_INCREMENT (si il existe) après avoir effectué une requête INSERT ou UPDATE.
CREATE TABLE IF NOT EXISTS `avia_vilg_apprentis` ( `a_id` smallint(10) NOT NULL, `a_promo_id` smallint(11) NOT NULL, ...... `a_cursus` smallint(10) DEFAULT NULL ) ENGINE=MyISAM AUTO_INCREMENT=3662 DEFAULT CHARSET=utf8;
CREATE TABLE `avia_vilg_apprentis` ( `a_id` smallint(10) NOT NULL AUTO_INCREMENT, `a_promo_id` smallint(11) NOT NULL, `a_cursus` smallint(10) DEFAULT NULL, CONSTRAINT PRIMARY KEY (`a_id`) ) ENGINE=MyISAM AUTO_INCREMENT=3662 DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `test_apprentis`; CREATE TABLE IF NOT EXISTS `test_apprentis` ( `a_id` smallint(10) NOT NULL, `a_promo_id` smallint(11) NOT NULL, `a_cursus` smallint(10) DEFAULT NULL ) ENGINE=MyISAM AUTO_INCREMENT=3665 DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `test_apprentis`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `test_apprentis` ( `a_id` smallint(10) NOT NULL AUTO_INCREMENT, `a_promo_id` smallint(11) NOT NULL, `a_cursus` smallint(10) DEFAULT NULL, PRIMARY KEY (`a_id`) ) ENGINE=MyISAM AUTO_INCREMENT=3665 DEFAULT CHARSET=utf8;
-- =========================== -- Création de la base `Essai` -- =========================== DROP DATABASE IF EXISTS `essai`; CREATE DATABASE IF NOT EXISTS `essai` DEFAULT CHARACTER SET `utf8` DEFAULT COLLATE `utf8_general_ci`; USE `essai`; -- ============================== -- Création de la table `exemple` -- ============================== CREATE TABLE `exemple` ( clef1 int DEFAULT 0 NOT NULL, clef2 int DEFAULT 0 NOT NULL, info CHAR(10) DEFAULT ' ' NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ============================ -- Création de l'index `index1` -- ============================ CREATE INDEX `index1` USING btree ON `exemple` (clef1 asc, clef2 asc); -- ================================= -- Insertion dans la table `exemple` -- ================================= insert into `exemple` (clef1,clef2,info) value (1, 1, 'un'), (1, 1, 'deux'), (1, 1, 'trois'), (1, 2, 'quatre'), (1, 2, 'cinq'), (2, 1, 'six'); -- ============================ -- Vidage de la table `exemple` -- ============================ select * from exemple;Tu constates qu'il existe plusieurs doublons sur le couple clef1 et clef2 et cela ne pose aucun problème.
Citation
Otomatic
Y'a comme un défaut, je vais creuser les paramètres et options de PhpMyAdmin