j'aimerais savoir si'l est possible de détecter le nom du champs qui est clef primaire d'une table en PHP. (base MySQL)
Exemple :
Code : Tout sélectionner
Table CATEGORIE
numero primary auto_increment
nomMerci !
Code : Tout sélectionner
Table CATEGORIE
numero primary auto_increment
nom
function _is_column_in_table ($table, $column) {
$colflag = false;
$sql = "SHOW COLUMNS FROM $table";
$rs = mysql_query($sql);
while ($row=mysql_fetch_assoc($rs)) {
$colname = $row["Field"];
if ($colname == $column) {
$colflag = true;
}
}
return $colflag;
}
l'information sur les clés primaires et les autoincrément se trouve (me semble t'il) sur le SHOW COLUMNS ; mais regarde également le SHOWX TABLE
<?php
//Soit la table suivante :
/*
CREATE TABLE `client` (
`code` int(11) NOT NULL auto_increment,
`nom` varchar(20) default NULL,
`prenom` varchar(20) default NULL,
`email` varchar(50) default NULL,
`adresse` varchar(100) default NULL,
`ville` varchar(50) default NULL,
`code_postal` int(11) default NULL,
`telephone` varchar(20) default NULL,
`code_ville` varchar(255) default NULL,
PRIMARY KEY (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
*/
//Lecture des attributs des champs
$res = mysql_db_query("test", "select * from client", mysql_connect("localhost","root",""));
$flags = mysql_field_flags($res, 0); //récupère les attributs du champ n°0 (premier champ 'code' de la table 'client')
echo "<p>Attributs du champ 'code' : $flags";
//décomposition des attributs sous forme de tableau
$tableau_flags = explode(' ', $flags); //les attributs sont séparés par un espace dans la chaine originale
echo "<p><pre>"; print_r($tableau_flags); echo "</pre>"; //affichage du tableau
?>Describe est une commande de SQL*Plus ; elle a peut être été implémentée dans d'autres requêteurs. Mais il ne s'agit pas de SQL : c'est juste un raccourci qui va lancer une commande SQL, récupérer le résultat et l'afficher. Tu ne peux pas faireC'est vrai que describe provient d'oracle (pas spécialement de sqlplus mais bien d'oracle vu qu'à priori n'importe quel requêteur peut l'exécuter) et a également été implémenté dans MySQL
Je ne connaissais pas "SHOW COLUMNS" mais apparement il ne fonctionne ni sous oracle ni sous sql server (j'ai pas de db2 sous la main mais connaissant ibm, c'est pas gagné non plus)... je note que cela fonctionne également pour MySQL, mais je ne suis du coup pas spécialement convaincu par l'argument "c'est du sql"
oci_parse ($conn, "describe ma_table");
Tu dis que tu doutes que SHOW COLUMNS soit du SQL. Et pourtant ... Bien sûr, ce n'est pas du SQL normalisé (lequel d'ailleurs a une syntaxe tellement réduite qu'on se demande si le SQL standard existe vraiment), mais c'est le dialecte SQL parlé par MySQL. Tout comme les ordres FLASHBACK DATABASE, EXPLAIN PLAN ou encore CREATE TYPE BODY sont des ordres du dialecte SQL vu par Oracle. En plus du CREATE, DROP, SELECT, INSERT, UPDATE et DELETE, chacun a monté son propre SQL. Et encore, même les syntaxes "évoluées" de ces 6 ordres de base sont entièrement différentes d'une base à l'autre.