从SELECT * FROM $表中排除字段

时间:2016-04-21 15:03:16

标签: php mysql sql

我需要排除字段'密码'来自SELECT * FROM $table;,其中$table是PHP变量。

四个无效表中只有一个有密码'字段。

这就是我所拥有的:

function myData($table)
{
  include "conf.php";
  $con   = mysqli_connect($host, $user, $password, $db);
  $sql   = "SELECT * FROM $table;";
  $resul = mysqli_query($con, $sql);
  return $resul;
}

有什么想法吗?

编辑:这是我处理返回数据的方式:

$resulFields    =   myFields($table);
$resulData      =   myData($table);

while ($fields = mysqli_fetch_array($resulFields, MYSQLI_ASSOC)) {
    $field      =   $fields['Field'];
    $header  .=   "<th>$field</th>";

    while ($data_array = mysqli_fetch_array($resulData, MYSQLI_ASSOC) ) {
        $body .=  "<tr id='$data_array[id]'>";
        foreach ($data_array as $data){
            $body .= "<td>$data</td>";
        }
    }
}

对不起,如果它有点乱,我就开始学习编程了。

5 个答案:

答案 0 :(得分:2)

我知道您希望拥有一个能够返回给定表中所有结果的PHP函数。也许不是返回$resul变量并在返回后解析数据,而是应该在返回之前将其解析为关联数组。你可以尝试这样的事情:

function myData($table) {
    include "conf.php";
    $con =   mysqli_connect($host, $user, $password, $db);
    $sql =   "SELECT * FROM {$table}";

    $resul =  mysqli_query($con, $sql);
    $row = $resul->fetch_assoc();
    unset( $row['password'] );

    return $resul;
}

虽然我觉得重要的是要注意,为了正确的编码实践和单一责任,您应该为要运行的每个查询提供特定的数据访问功能。我不建议使用只返回表中所有内容的单个函数。还应该命名函数,以便您知道它们正在做什么。 “myData”非常不具描述性,因此对于数据访问功能来说是一个非常糟糕的名称。

此外,如果您要命名变量$resul,请继续输入“t”并将其命名为$result FFS。

答案 1 :(得分:1)

在foreach循环中,从数组中获取数据。 (当前代码仅 数据。)

在foreach循环中,对key的值进行条件测试。

如果密钥的值与&#34;密码&#34;匹配,则跳过输出该数组元素的任何内容。如果它不匹配键,则输出它(就像当前代码正在做的那样。)

查看foreach的替代语法:

参考文献:http://php.net/manual/en/control-structures.foreach.php

对于简单的条件测试

参考:http://php.net/manual/en/control-structures.if.php

考虑是否要匹配&#34;密码&#34;,&#34; PASSWORD&#34;,&#34;密码&#34;等。您可能需要不区分大小写的匹配。

答案 2 :(得分:0)

也许你可以这样做:

function myData($table) {
    include "conf.php";
    $con =   mysqli_connect($host, $user, $password, $db);
    $sql =   "SELECT field1, field2";

    if ($table == "TABLE_WITH_PASSWORD") {
        $sql.=",password";
    }
    $sql.=" FROM $table;";

    $resul =  mysqli_query($con, $sql);
    return $resul;
}

答案 3 :(得分:0)

显然,最好的选择是选择你想要的东西:

SELECT id, name, whatever FROM $table

希望我不会走错路,但除了查询字段和删除密码之外,还有一种方法:

$columns['tableA'] = array('id', 'name', 'whatever');
$columns['tableB'] = array('id', 'user', 'something');

然后做:

$select = implode(',', $columns[$table]);
$sql = "SELECT $select FROM $table";

答案 4 :(得分:0)

IMO我认为在这种情况下最简单的方法是使用special case用于php

function myData($table) {
    include "conf.php";
    $con  =   mysqli_connect($host, $user, $password, $db);
    if($table == "special_case_table"){
        $sql    =   "SELECT col1, col2, col3 FROM special_case_table;"; //except "password" column
    }
    else  $sql    =   "SELECT * FROM $table;";
    $resul  =   mysqli_query($con, $sql);
    return $resul;

无需更多功能或在数据库的INFORMATION_SCHEMA中搜索以查找列密码。