MYSQL : Problème pour retrouver la clé primaire dans les metadatas

MYSQL : Problème pour retrouver la clé primaire dans les metadatas - SQL/NoSQL - Programmation

Marsh Posté le 05-01-2011 à 18:41:00    

Bonjour !
 
Je rencontre un problème lorsque j'essaye de retrouver la clé primaire via la fonction php mysql_fetch_field.
 
Dans un cas très simple, tout marche bien, la valeur "primary_key" est bien à 1 pour mon champ id, et à 0 pour les autres.
Lorsque je classe mes résultats par id, tout marche encore comme il faut.
MAIS, à ma grande surprise, lorsque je classe mes resultats par "rand()", la valeur "primary_key" est à 0 pour tous les champs, y compris id...
 
Je vous laisse un petit extrait de code qui montre le problème.
 
Est-ce que c'est un bug ? Cela vient-il de la fonction php, ou de mysql ? (php 5.3.2, mysql 5.1.51)
Existe-t-il une manière de quand même obtenir le résultat souhaité sans devoir faire une requête spécifique ?
 
Merci beaucoup d'avance !
 
Olivier
 
 

<?php
 
mysql_connect('127.0.0.1', 'NAME', 'PASS');
mysql_select_db('DATABASE');
 
echo "<h3>Unordered</h3>";
showStructure('SELECT * FROM sample');
 
echo "<h3>Order by id</h3>";
showStructure('SELECT * FROM sample ORDER BY id');
 
echo "<h3>Order by rand()</h3>";
showStructure('SELECT * FROM sample ORDER BY rand()');
 
function showStructure($query){
 
 $result = mysql_query($query);
 
 $i = 0;
 while ($i < mysql_num_fields($result)) {
    $meta = mysql_fetch_field($result, $i);
    echo "  name:         $meta->name
            primary_key:  $meta->primary_key";
    $i++;
 }
}
?>


 
Qui donne :
 
Unordered
 
     name:         id
     primary_key:  1
     
     name:         title
     primary_key:  0
     
Order by id
 
     name:         id
     primary_key:  1
     
     name:         title
     primary_key:  0
     
Order by rand()
 
     name:         id
     primary_key:  0
     
     name:         title
     primary_key:  0
 

Reply

Marsh Posté le 05-01-2011 à 18:41:00   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed