从mysql查询动态创建表

时间:2012-07-18 23:21:44

标签: php mysql dynamic

我正在尝试创建一个输入MYSQL查询的页面:SELECT column1,column2 FROM table;,并动态创建一个包含列标题的HTML表。

编辑:删除了我的大部分问题,只是离开了问题部分。我已经创建了一个脚本来执行此操作并将其作为答案包含在内。我希望其他人像我一样使用它(当我懒得登录phpmyadmin ...哈哈哈)。

3 个答案:

答案 0 :(得分:2)

我会尝试mysql_fetch_assoc,它会返回一个关联数组(map)。然后,您可以使用array_keys来获取列名。

答案 1 :(得分:1)

这听起来可能与测试有关,你有时只需要吐出结果在屏幕上看到它们,所以我要把它放在这里......

php类dbug是一个很棒的工具,用于快速从php数组甚至MySQL结果中获取格式良好的表:

http://dbug.ospinto.com/

答案 2 :(得分:0)

好。这是我如何完成这个,建立在webjprgm的提示上使用mysql_fetch_assoc:

php code to dynamically create a table with column titles, from PHP to mysql to html! :)

<head>
    <title>mysql Table maker</title>
</head>
<body>
    <center>
<?php

    /* posted data sent to this page (from this page)*/

    $pdatabase      = htmlentities($_POST['database'],  ENT_QUOTES);    // database
    $phost          = htmlentities($_POST['host'],      ENT_QUOTES);    // host
    $puser          = htmlentities($_POST['user'],      ENT_QUOTES);    // user
    $ppassword      = htmlentities($_POST['password'],  ENT_QUOTES);    // password

    $pcolumns       = htmlentities($_POST['columns'],   ENT_QUOTES);    // comma seperated columns
    $columns        = explode(",",$pcolumns);                           // array of column names

    $ptable         = htmlentities($_POST['table'],     ENT_QUOTES);    // table
    $pwhere         = str_replace(array(";",'"'),array('',''),$_POST['where']);    // WHERE clause
    if (!empty($pwhere)) {$pwhere = "WHERE $pwhere";}                   // if not empty, prepend with "WHERE"

    $porder         = htmlentities($_POST['order'],     ENT_QUOTES);    // ORDER BY clause
    $psort          = htmlentities($_POST['sort'],      ENT_QUOTES);    // SORTING (asc or desc)
    if (!empty($porder)) {$porder = "ORDER BY $porder $psort";}         // if order is not empty, prepend with "ORDER BY"

    $pgroup         = htmlentities($_POST['group'],     ENT_QUOTES);    // GROUP BY clause
    if (!empty($pgroup)) {$pgroup = "GROUP BY $pgroup";}                // if not empty, prepend with "GROUP BY"

    $plimit         = htmlentities($_POST['limit'],     ENT_QUOTES);    // LIMIT clause
    if (!empty($plimit)) {$plimit = "LIMIT $plimit";}

    /* The finished product....or query...so to speak...if you will */
    $query          = "SELECT $pcolumns FROM $ptable $pwhere $pgroup $porder $plimit";

    /* Safety precautions */
    $query          = str_replace(array("delete","drop","update","alter"),array('','','',''),$query);


    // print_r($columns);

?>
<form action="mysql-table.php" method="POST">
    <span style="position:fixed;top:0;left:0;width:100%;height:30px;background:#35AFE3">
    host:       <input name="host"      type="text"     value="<?php echo $phost;?>"/>
    user:       <input name="user"      type="text"     value="<?php echo $puser;?>"/>
    password:   <input name="password"  type="password" value="<?php echo $ppassword;?>"/>
    database:   <input name="database"  type="text"     value="<?php echo $pdatabase;?>"/>
    </span>

    <hr/>

    <span style="position:fixed;top:30px;left:0;width:100%;height:205px;background:#35FC39;">
    SELECT 
        <input name="columns"   type="text"     value="<?php echo $pcolumns;?>"/><br/>
    FROM 
        <input name="table"     type="text"     value="<?php echo $ptable; ?>"/><br/>
    WHERE 
        <input name="where"     type="text"     value="<?php echo trim(str_replace("WHERE","",$pwhere)); ?>"/><br/>
    ORDER BY 
        <input name="order"      type="text"     value="<?php echo trim(str_replace("ORDER BY","",$porder)); ?>"/><br/>    
    SORT 
        <select name="sort">
            <option value=""></option>
            <option value="ASC">ASC</option>
            <option value="DESC">DESC</option>
        </select><br/>    
    GROUP BY 
        <input name="group"     type="text"     value="<?php echo trim(str_replace("GROUP BY","",$pgroup)); ?>"/><br/>
    LIMIT 
        <input name="limit"     type="text"     value="100"/><br/>
    GO: 
        <input                  type="submit"   value="submit" />

    </span>
</form>



<span style="position:absolute;top:235px;left:0;width:100%;height:auto;background:#28c7d6;z-index:-1;">



<?php
if (!empty($_POST['columns']) && !empty($_POST['table'])) {

    echo "<h3><b>Query:</b> <i>$query</i></h3><hr/>";

    $mysqli = new mysqli($phost,$puser,$ppassword,$pdatabase);               // Connect to DB

    /* check connection */                                              // check for connection error
    if (mysqli_connect_errno()) {
        printf("Connect failed: %s\n", mysqli_connect_error());
        exit();
    }

    if ($result = $mysqli->query($query)) {


        echo "<table border='1' style='word-wrap:break-word'>";         // New table
        /* Column Title */
        echo "<tr>";                                                    // New Row for the titles

        foreach($columns as $c) {                                       // For each column, create a column
            echo "<td><b>$c</b></td>\r\n";
        }

        echo "</tr>";                                                   // Close the titles' row


        /* DATA RESULTS */
        while ($row = $result->fetch_assoc()) {                         // for each set of rows:
            echo "<tr>\r\n\r\n";                                        // create new row

            foreach($columns as $c) {                                   // for each column in the row:
                                                                        // create a cell 
                echo "
                    <td style='max-width:400px;'>
                        <div style='max-height:300px;overflow-y:auto;'>
                            $row[$c]
                        </div>
                    </td>";
            }

            echo "</tr>";                                               // end of that row

        }                                                               // end foreach results
        echo "</table>";                                                // closing of the table

        /* free result set */
        $result->free(); 
    } else {
        echo "query failed.<hr/>";
    }
    /* close connection */
    $mysqli->close();
} elseif (isset($_POST['columns']) || isset($_POST['table'])) {         // end of !empty columns,table
    echo "<b>MISSING IMPORTANT INFORMATION.<br/>
    For column, you entered: <u> ".$_POST['columns']." </u><br/>
    For table you entered: <u> ".$_POST['table']." </u>";
}
?>

</span>
    </center>
</body>