6
votes

Comment obtenir des valeurs disponibles pour le champ défini?

Y a-t-il un moyen d'obtenir des valeurs disponibles pour le champ défini dans le tableau?

merci.


0 commentaires

5 Réponses :


6
votes

Vous pouvez récupérer les valeurs possibles d'un champ défini à l'aide de Décrire MyTaBreName mySetColumn code> ou Afficher les colonnes de MyTablEname comme mySetColumn code>:

  mysql> DESCRIBE myTableName mySetColumn;
  +-------+-------------------------------------------+------+-----+---------+-------+
  | Field | Type                                      | Null | Key | Default | Extra |
  +-------+-------------------------------------------+------+-----+---------+-------+
  | myset | set('Travel','Sports','Dancing','Dining') | YES  |     | NULL    |       |
  +-------+-------------------------------------------+------+-----+---------+-------+


0 commentaires

3
votes
set('Travel','Sports','Dancing','Dining')

1 commentaires

Je pense que c'est la meilleure réponse ici car c'est le seul qui fonctionnera dans le cadre d'une requête plus grande et ne nécessite pas de script externe.



3
votes

Implémentation complète du lien de @ Andy à la documentation:

/**
 * @return array
 * @param table DB table
 * @param column Column name
 * @desc Return an array of the possible values for a SET
 */
function get_set($table,$column)
{
    $sql = "SHOW COLUMNS FROM $table LIKE '$column'";
    if (!($ret = mysql_query($sql)))
        die("Error: Could not show columns");

    $line = mysql_fetch_assoc($ret);
    $set  = $line['Type'];
    // Remove "set(" at start and ");" at end.
    $set  = substr($set,5,strlen($set)-7);
    // Split into an array.
    return preg_split("/','/",$set); 
}


0 commentaires

0
votes

Voici comment obtenir les valeurs possibles de définir à l'aide d'une extension PDO.

function get_set($table, $column)
{

    global $db; //PDO DB Handler

    $sql = "SHOW COLUMNS FROM $table LIKE :column";
    $stmt = $db -> prepare($sql);

    $stmt -> bindParam(":column", $column, PDO::PARAM_STR, 50);

    try {
        $result = $stmt -> execute();
        $row = $stmt -> fetch(PDO::FETCH_ASSOC);
        $set = $row['Type'];
        $set  = substr($set,5,strlen($set)-7);
        // Split into an array.
        return preg_split("/','/",$set);
    } catch (PDOException $e) {
        echo $e -> getMessage();
        return false;
    }

}


2 commentaires

Pourquoi seulement lier $ colonne et non $ table ? Ne peut-il pas aussi contenir des injections?


@Erk, bien sûr, cela peut. Si le nom de la table est pris comme entrée d'utilisateur, veuillez le faire. Sinon ce n'est pas le type d'informations qui nécessitent une entrée utilisateur.



1
votes

Les méthodes ci-dessus ne travaillaient pas exactement pour moi, mais je me suis retrouvé avec cela et cela fonctionne bien. Poster au cas où cela aide toute autre chose dans la même situation. Vous devrez simplement couper la chaîne en fonction de vos résultats, car elle inclura votre nom de colonne à côté du mot 'SET'.

    <?php>
    include ('database.php');
    $query = "SHOW COLUMNS FROM Products LIKE 'Genre'";

    $stmt = $con->prepare( $query );

    $result = $stmt -> execute();
    if ($result) {
    $row = $stmt -> fetch(PDO::FETCH_ASSOC);
        $genres = implode($row);

        $genres  = substr($genres,10,strlen($genres)-14);
        //echo $genres;
        $genres = preg_split("/','/",$genres);

    //this is to populate my select box options with set values
        echo "<select name = 'genre'>";
        echo "<option>Select...</option>";
        foreach ($genres as $key=>$value) {
            echo "<option name = '$value' value = '$value'>$value</option>";
        };
        echo "</select>";
    }


    ?>


0 commentaires