0

ユーザーがコンボ ボックスを使用してデータベースにクエリを実行できるようにしようとしています。最初のコンボ ボックスには、データベース内のテーブルのリストが表示されます。ユーザーがテーブルを選択すると、別のクエリが実行され、2 番目のコンボ ボックスにそのテーブル内の列名が入力されます (これはクエリの選択として使用されます)。最初のコンボ ボックスは機能していますが、 2 番目に入力します。誰でもこれを手伝ってもらえますか?どうもありがとう

ここに私のhtmlコードがあります

<form id="ownQueryForm" name="ownQueryForm" method="POST" action="">

    <div id = "tableSelect_div">
        <P> Select table to Query: </P>

            <select name = "Tables" id = "Tables" onchange = 'this.form.submit()'>
                <option value = "blank"> Please choose a Table</option>
                <?php foreach (($tableContent) as $row) : ?>
                <option value = "<?php echo $row['Tables_in_DB_EXECUTION_MANAGER_TEST']; ?>"><?php echo $row['Tables_in_DB_EXECUTION_MANAGER_TEST'];?></option>
                <?php endforeach ?>

            </select>   


    </div>

    <div id = "columnSelect_div">
        <p>SELECT</p>
            <select name = "Columns" id = "Columns">
                <?php foreach (($columnContent) as $row) : ?>
                <option value = "<?php echo $row['COLUMN_NAME']; ?>"><?php echo $row['COLUMN_NAME'];?></option>
                <?php endforeach ?>
            </select>
    </div>


</form>

ここに私の2つのクエリがあります

    public static function getTables(){
    global $db;

    $st = $db->prepare("show tables");
    $st ->execute();
    $table = $st->fetchAll(PDO::FETCH_ASSOC);

    return $table;


}

public static function getColumns(){
    global $db;
    $st = $db->prepare("SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = :value ");
    $st->bindParam(':value', $_POST['Tables'], PDO::PARAM_STR);

    $st -> execute();
    $column = $st -> fetchAll(PDO::FETCH_ASSOC);

    return $column;
    //print_r($column);
}

}

getTable (モデル内) をレンダリングするために使用されるコントローラーと、同じコントローラー上の 2 つの別個の関数として getColumns を使用するコントローラーを使用しています。これはできますか?
これはコントローラーにありますが、実行されることはなく(ifステートメントを取り出さない限り)、ページが読み込まれると実行されます

if (isset ( $_POST ['Tables'] )) {


$c = new ownQueryController();
$c ->queryRequest();

}

4

1 に答える 1

1

あなたが使用することができます:

'DESCRIBE ' . $_POST[ 'Tables' ]

それよりも

"SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = :value "

これにより、名前、タイプ、制限などを含む列の配列が返されます。その後、各列をループして表示できます。

警告

POST データが安全にクエリに入れられることを確認する必要があります。@andy が示唆したように、これを使用するだけでテーブルが削除される可能性があります。

于 2013-09-24T10:10:56.937 に答える