SQLPHP获取主键只对一个表有效[关闭] 。

问题描述 投票:0回答:1

首先

一些背景。我有一个项目,需要用php来完成,我想做一个从数据库中删除的功能,我想做的方式是让用户选择他想删除的表,然后,向他展示该表中所有主键的值,他可以从那里删除。由于我不想让他输入任何表名或不存在的主键,所以我使用一个下拉列表来实现这两个功能。下一步是得到每个表的主键,并在下拉列表中显示出来供用户选择。

这里的问题是。 获取其中一个表的主键可以正常工作,但其他表就不行了。

    echo $_SESSION['table'];

    $sql = "SHOW KEYS FROM " . $_SESSION['table'];

    $result = mysqli_query($conn, $sql);

    $keys = mysqli_fetch_assoc($result);

    print_r($keys);

这个工作正常,它得到了我在前一页中按下的表的名称。

echo $_SESSION['table'];

不过

print_r($keys);

印花

Array ( [Table] => KATI [Non_unique] => 0 [Key_name] => PRIMARY [Seq_in_index] => 1 [Column_name] => NAME [整理] => A [Cardinality] => 4 [Sub_part] => [Packed] => [Null] => [Index_type] => BTREE [Comment] => [Index_comment] => )

就像我希望它对一个名为KATI的表一样,但对其他表没有任何作用。

EDIT:

以下是我用来选择我想选择的表的下拉列表的代码。PHP(忽略动作变量,它与问题无关)


include('connection.php');

$sql = "show tables";

$result = mysqli_query($conn, $sql);

$tables = mysqli_fetch_all($result, MYSQLI_ASSOC);

mysqli_free_result($result);

mysqli_close($conn);


if (isset($_SESSION['action'])) {
    if (isset($_POST['submit'])) {
        $location = $_SESSION['action'] . ".php";
        echo $location;
        $_SESSION['table'] = $_POST['table'];
        header("Location: $location");
    }
}

HTML (&php)

<select name="table" class="browser-default waves-effect waves-light btn">
    <option value="" disabled="" selected="">Choose a table</option>
         <?php foreach ($tables as $table) { ?>
             <option value=<?php echo $table['Tables_in_SuperMarket'] ?>>
                 <?php echo $table['Tables_in_SuperMarket'] ?>
             </option>
         <?php } ?>
</select>
php sql primary-key
1个回答
1
投票

可能是其他的表有特殊的名字或保留的名字。

试着把它们的名字放在背标中。

 $sql = "SHOW KEYS FROM `{$_SESSION['table']}`";

另外,请验证你的输入 - 你不希望随机的人能够肆意删除。

© www.soinside.com 2019 - 2024. All rights reserved.