繁体   English   中英

如何用PHP重构这些MySQL查询?

[英]How to refactor these MySQL queries with PHP?

我是许多人认为是业余程序员的人,但是我正试图着手过渡到更专业的程序员。 为此,我正在实习的公司要求我重构一些MySQL查询,这样我就不必每次将新的不同字段添加到数据库时都进行复制,粘贴和编辑,从而允许网站将唯一的数据引入数据库时​​动态更新。 我建立了各种仪表板,以显示有关特定项目的信息。 在每个项目视图中,都有特定于位置的JQuery手风琴。 到目前为止,尽管站点(位置)是数据库中的一列,但我不得不针对每个位置复制,粘贴和编辑新查询。 我想重构这些查询,以便只写两个查询:一个查询将所有不同的位置存储到一个数组中,第二个查询(最有可能在PHP循环中-我在想foreach)选择要查询的数据每个位置的需求,将数据存储到变量中,然后可用于为特定位置的所有行生成单独的手风琴。

这是我现在拥有的MySQL查询的样子:

    SELECT project, participant, reel, machine, qc_gsr, qc_hr, qc_acz, qc_bre FROM rtcdb.session WHERE site = 'CHI001'

当位置(站点)是Chicago(CHI001)时,这将选择我需要的数据列。 如果要在表中查找不同的站点,可以编写如下内容:

    SELECT DISTINCT site FROM rtcdb.session;

我想将每个位置的查询结果放在单独的手风琴中,我也不确定最终将如何做。 这些手风琴的HTML格式如下:

    <h3><i><b>Chicago</b></i></h3>
        <div>
            <div id = "accordion">
                <h4 id="green"><b>Data</b></h4>

                <div>
                    <table>
                        <thead>
                            <tr>
                                <th>Project ID</th>
                                <th>Participant ID</th>
                                <th>SEM</th>
                                <th>Kiosk #</th>
                                <th>GSR</th>
                                <th>Heart Rate</th>
                                <th>ACZ</th>
                                <th>ABB</th>
                            </tr>
                        </thead>

                        <tbody>
                            <?php
                                while ($row = mysql_fetch_assoc($chi_results)) {
                                    echo '
                                        <tr>
                                            <td>'.$row["project"].'</td>
                                            <td>'.$row["participant"].'</td>
                                            <td>'.$row["reel"].'</td>
                                            <td>'.$row["machine"].'</td>
                                            <td><img class = "circle" src="'.$row["qc_gsr"].'_circle.png"></td>
                                            <td><img class = "circle" src="'.$row["qc_hr"].'_circle.png"></td>
                                            <td><img class = "circle" src="'.$row["qc_acz"].'_circle.png"></td>
                                            <td><img class = "circle" src="'.$row["qc_bre"].'_circle.png"></td>
                                        </tr> ';
                                    }
                                ?>
                        </tbody>
                    </table>
                </div>
                            </div>
                    </div>

请您提供任何输入,我们将不胜感激。 非常感谢您查看此问题,我希望听到一些答案!

  • 杰克

如果要显示所有站点的页面,可以执行以下操作:在链接末尾添加“?site = CHI001”。

在您的脚本中,这将显示为$_GET['site'] (您可以使用任何喜欢的名称)。

用mysql_real_escape_string转换变量-`$ site = mysql_real_escape_string($ _ GET ['site']);'

不要! 尝试直接将变量放入-这会让攻击者运行他们喜欢的任何数据库命令! 请参阅有关SQL注入的php.net文章,或者相信我的话-太糟糕了!

现在,您可以将此值添加到SQL中-用WHERE site = '$site'替换WHERE site = 'CHI001' WHERE site = '$site'

现在,您可以针对不同的站点测试页面。

首先,请确保您编写的任何新代码都使用mysqli_*函数,而不是旧的mysql_*函数。

如果要一次在一个页面上获取所有站点的数据,请执行一次查询并将其分组到php中,如下所示。 如果需要单独的页面,请遵循AMADANON的建议。

查询资料

$conn = mysqli_connect(...);
mysqli_select_db(...);
$result = mysqli_query($conn,"SELECT site,my,other,column,names,");
$site_info = array();
while($row = mysqli_fetch_assoc($result)) {
    $s = $row['site'];
    if(!is_array($site_info[$s])) $site_info[$s] = array();
    $site_info[$s][] = $row;
}

页面内容

<?php
foreach($site_info as $site) {
?>
    <div id="accordion">
        <?php echo $site['my'] . $site['column'] . $site['names']; ?>
    </div>
<?php
}
?>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM