繁体   English   中英

“ where”子句中的未知列“”

[英]Unknown column ' ' in 'where clause

我一直在搜索堆栈溢出站点,并尝试过询问/回答过的大多数类似问题,但不幸的是,到目前为止,没有一种解决方案对我有用。 我正在尝试获取一个由sql数据库填充的列表(正在运行),然后选择该项目后,单击“生成”按钮,然后从表中获取数据,仅将所选数据发布到表中。 以前,我有一个问题,其中的表中填充了武器列表中的所有数据。 经过一些努力之后,我现在在where子句107(我假设是我的行号)中收到错误消息“ Unknown列(我选择的武器名称)”。有什么建议吗?

这是从数据库中填充列表到尝试从列表中选择武器的完整表格。

<form action="#" method="post">
    <table class="table">
        <thead>
            Martial Weapon Name
        </thead>
        <tr>
            <th>
                <select name="Choosen">
                    <?php 
                    echo'<option>Select Weapon</option>';
                    //Check if at least one row is found
                    if($result->num_rows >0){
                        //Loop through results
                        while($row = $result->fetch_assoc()){
                            //Display weapon info
                            $output = $row['weapon_name'];
                            echo '<option>'.$output.'</option>';
                        }
                    }
                    ?>
                </select>
            </th>
        </tr>
    </table>
    <input class="btn btn-default" type="submit" name="submit" value="Generate">
    <h3>
        Weapon
    </h3>
    <table class="table table-striped">
        <tr>
            <th>
                Weapon Name
            </th>
            <th>
                Weapon Type
            </th>
            <th>
                Damage
            </th>
        </tr>
        <?php
        if (isset($_POST['submit'])) {
            $selected_weapon = $_POST['Choosen'];
            $choose = "SELECT
            weapon_types_martial.id,
            weapon_types_martial.weapon_name,
            weapon_types_martial.weapon_type,
            weapon_types_martial.weapon_damage 
            FROM weapon_types_martial WHERE weapon_types_martial.weapon_name = " . $selected_weapon;
            $result = $mysqli->query($choose) or die($mysqli->error . __LINE__);
            foreach ($result->fetch_assoc() as $item) {
                //Display weapon
                $show = '<tr>';
                $show .= '<td>' . $item['weapon_name'] . '</td>';
                $show .= '<td>' . $item['weapon_type'] . '</td>';
                $show .= '<td>' . $item['weapon_damage'] . '</td>';
                $show .= '</tr>';
                //Echo output
                echo $show;
            }
        }
        ?>
    </table>
</form>

最后是我得到的屏幕截图

条款错误

您需要在SQL查询中放置引号。
尝试:

$choose = "SELECT
  weapon_types_martial.id,
  weapon_types_martial.weapon_name,
  weapon_types_martial.weapon_type,
  weapon_types_martial.weapon_damage 
  FROM weapon_types_martial WHERE weapon_types_martial.weapon_name = '" . $selected_weapon . "'";

忠告,此查询非常不安全。 我建议使用框架或库进行数据库查询。

1)您不会在$ _POST ['choosen']中获取数据,因为您没有在下拉列表中传递值(选择)

2)在您的数据库表中,字段field字段的weapon_name为varchar,因此您必须将其传递给单引号。

如下更改代码:

<form action="#" method="post">
    <table class="table">
        <thead>
            Martial Weapon Name
        </thead>
        <tr>
            <th>
                <select name="Choosen">
                    <?php 
                    echo '<option>Select Weapon</option>';
                    //Check if at least one row is found
                    if($result->num_rows >0){
                        //Loop through results
                        while($row = $result->fetch_assoc()){
                            //Display weapon info
                            $output = $row['weapon_name'];
                            echo '<option value="'.$output.'">'.$output.'</option>';  //<--------------change here
                        }
                    }
                    ?>
                </select>
            </th>
        </tr>
    </table>
    <input class="btn btn-default" type="submit" name="submit" value="Generate">
    <h3>
        Weapon
    </h3>
    <table class="table table-striped">
        <tr>
            <th>
                Weapon Name
            </th>
            <th>
                Weapon Type
            </th>
            <th>
                Damage
            </th>
        </tr>
        <?php
        if (isset($_POST['submit'])) {
            $selected_weapon = $_POST['Choosen'];
            $choose = "SELECT
            id,
            weapon_name,
            weapon_type,
            weapon_damage 
            FROM weapon_types_martial WHERE weapon_name = '$selected_weapon'"; //<--------------change here
            $result = $mysqli->query($choose) or die($mysqli->error . __LINE__);
            if ($result->num_rows > 0) {
            while($item = $result->fetch_assoc()) {
                //Display weapon
                $show = '<tr>';
                $show .= '<td>' . $item['weapon_name'] . '</td>';
                $show .= '<td>' . $item['weapon_type'] . '</td>';
                $show .= '<td>' . $item['weapon_damage'] . '</td>';
                $show .= '</tr>';
                //Echo output
                echo $show;
            }
           }
           else
          {
             echo "No data found";
          }
        }
        ?>
    </table>
</form>

您需要在单引号内给出值,

$choose = "SELECT
  weapon_types_martial.id,
  weapon_types_martial.weapon_name,
  weapon_types_martial.weapon_type,
  weapon_types_martial.weapon_damage 
  FROM weapon_types_martial
  WHERE weapon_types_martial.weapon_name = '" . $selected_weapon ."'";
$choose = "SELECT id, weapon_name, weapon_type, weapon_damage FROM weapon_types_martial WHERE weapon_name = '".$selected_weapon."'";

要么

$choose = "SELECT weapon_types_martial.id, weapon_types_martial.weapon_name, weapon_types_martial.weapon_type, weapon_types_martial.weapon_damage  FROM weapon_types_martial as weapon_types_martial WHERE weapon_types_martial.weapon_name = '" . $selected_weapon ."'";

select元素中的options没有value=..属性,这意味着查询中不存在任何内容。

所以, $_POST['Choosen']将= ''

更不用说您要传递字符串,因此您的查询将需要用'包裹:

$choose = "SELECT id, weapon_name, weapon_type, weapon_damage FROM weapon_types_martial WHERE weapon_name = '".$selected_weapon."'";

暂无
暂无

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

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