【问题标题】:Query is working well in mysql but not in PHP查询在 mysql 中运行良好,但在 PHP 中运行良好
【发布时间】:2015-03-24 09:45:29
【问题描述】:

查询在 mysql 中运行良好,但在 php 中运行良好。 在 php 中实现内部联接后,我只得到了星期二的值。周一和周二有两张桌子。从星期一选择lab1,从星期二选择lab1,只显示星期二的lab1。

附:查询在 mysql 中运行。

<form action="lab.php" method="POST">
    Check routine for : <select name="new">
        <option name="lab1">LAB1</option>
        <option name="lab2">LAB2</option>
        <option name="lab3">LAB3</option>
        <option name="lab4">LAB4</option>
    </select>&nbsp&nbsp
    <input type="submit" value="Submit">
</form>


<?php
require 'conn.php';
if(isset($_POST['new'])&& !empty($_POST['new']))
{
        $lab=$_POST['new'];
        $lab=strtolower($lab);
        $result = mysql_query("select  monday.time,
        monday.$lab,tuesday.$lab from monday inner join 
        tuesday where monday.time=tuesday.time");

        echo "<table BORDER='1' width='50%' cellpadding='3'>
        <tr> 
            <th colspan='7'><h2>$lab</h2></th> 
        </tr>

        <tr> 
            <th>TIME</th>
            <th>MONDAY</th>
            <th>TUESDAY</th>

        </tr>";

        while($row = mysql_fetch_array($result))
        {   echo "<tr>";

                    echo "<td>" .$row['time']. "</td>";
                    echo "<td>" .$row[$lab]. "</td>";
                    echo "<td>" .$row[$lab]. "</td>";

            echo "</tr>";
        }
    echo "</table>";


}

?>

【问题讨论】:

  • 您遇到了 sql 注入问题,使用未过滤/未列入白名单的用户输入作为列名非常危险。
  • 我可以稍后处理sql注入,但是你能告诉我为什么查询在php中不起作用吗?
  • 抛开你代码中的SQL注入漏洞,echo "select monday.time, monday.$lab,tuesday.$lab from monday inner join tuesday where monday.time=tuesday.time" 的输出是什么?
  • 输出仅来自周二的能力,周二的列重复周一的列。您可以在此处查看输出表。 postimg.org/image/jp9t85roz
  • 重复是因为您的迭代中有 $row[$lab] 而不是 $row['columnname']

标签: php mysql inner-join


【解决方案1】:

试试这个吧。

 <?php
    require 'conn.php';
    if(isset($_POST['new'])&& !empty($_POST['new']))
    {
            $lab=$_POST['new']; 
            $lab=strtolower($lab);
            $result = mysql_query("select  monday.time,
            monday.$lab,tuesday.$lab as labval from monday inner join 
            tuesday where monday.time=tuesday.time") or die(mysql_error());

            echo "<table BORDER='1' width='50%' cellpadding='3'>
            <tr> 
                <th colspan='7'><h2>$lab</h2></th> 
            </tr>

            <tr> 
                <th>TIME</th>
                <th>MONDAY</th>
                <th>TUESDAY</th>

            </tr>";

            while($row = mysql_fetch_array($result))
            {   echo "<tr>";

                        echo "<td>" .$row['time']. "</td>";
                        echo "<td>" .$row[$lab]. "</td>";
                        echo "<td>" .$row['labval']. "</td>";

                echo "</tr>";
            }
        echo "</table>";


    }

    ?>

【讨论】:

  • 哦!谢谢纳夫约特·辛格。这是工作。这很棒!非常感谢。
  • 应该注意并在答案中添加,OP 在选择的选项中使用名称属性。只有 select 有 name 属性,没有 option。对于所有 &lt;option&gt; 标签,它必须是 value= 而不是 name=
猜你喜欢
  • 1970-01-01
  • 2019-03-16
  • 1970-01-01
  • 1970-01-01
  • 2020-02-25
  • 1970-01-01
  • 2014-12-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多