从SELECT * FROM $table中排除一个字段。

35 浏览
0 Comments

从SELECT * FROM $table中排除一个字段。

我需要从一个SELECT * FROM $table;语句中排除一个名为'password'的字段,其中$table是一个PHP变量。

可能的四个表中只有一个有一个'password'字段。

这是我目前的代码:

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  .=   "$field";
    while ($data_array = mysqli_fetch_array($resulData, MYSQLI_ASSOC) ) {
        $body .=  "";
        foreach ($data_array as $data){
            $body .= "$data";
        }
    }
}

抱歉如果代码有点乱,我刚开始学习编程。

0
0 Comments

问题的原因是在foreach循环中,只获取了数组中的数据,没有获取到键名。解决方法是在foreach循环内部对键名进行条件测试,如果键名的值与"password"相匹配,则跳过输出该元素的任何内容。如果不匹配,则输出它。可以考虑使用foreach的替代语法和简单条件测试来实现。还要考虑是否需要进行大小写不敏感的匹配。下面是一种可能的解决方法:

foreach ($array as $key => $data) {
  if (strtolower($key) == "password") {
    continue;
  }
  // 输出数据
}

参考文档:

- http://php.net/manual/en/control-structures.foreach.php

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

这种方法更加通用,避免了显式地处理每个字段是否为"password"的问题。希望这个解决方法能帮到你。

0
0 Comments

有时候在查询数据库表时,我们希望排除某些字段,但是常规的SELECT语句却无法实现这个功能。下面是一个解决这个问题的例子:

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;
}

在这个例子中,我们定义了一个函数`myData`,它接受一个表名作为参数。函数内部首先包含了数据库配置文件,然后连接到数据库。接下来,我们构建了一个SELECT语句,只包含了字段`field1`和`field2`。然后,通过判断传入的表名是否为`TABLE_WITH_PASSWORD`,决定是否把`password`字段包含在SELECT语句中。最后,执行查询语句并返回结果。

这种方法的原因是,常规的SELECT语句无法在不知道表结构的情况下排除某些字段。通过在代码中动态构建SELECT语句,我们可以根据具体的条件来决定是否包含某个字段。

这个例子中的解决方法是通过判断表名来决定是否包含某个字段。如果表名为`TABLE_WITH_PASSWORD`,则把`password`字段包含在SELECT语句中。如果表名不是`TABLE_WITH_PASSWORD`,则只包含`field1`和`field2`字段。

这种方法的好处是可以根据具体需求来灵活地选择要包含的字段,从而提高查询的效率和性能。同时,这种方法也可以避免在不知道表结构的情况下错误地排除某个字段。

因此,通过在代码中动态构建SELECT语句,我们可以在查询数据库表时排除某些字段,从而满足具体的需求。

0
0 Comments

问题的原因是希望创建一个通用的PHP函数,可以返回给定表中的所有结果。然而,代码中的问题是在返回之前将数据解析为关联数组,而不是在返回后解析。解决方法是在返回之前将数据解析为关联数组,并在返回之前从数组中排除密码字段。

下面是解决方法的代码示例:

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`,最好直接写出完整的单词"result",不要缩写。代码中的这个问题是一种不良的命名习惯。

最后,值得注意的是,如果规范要求有一个通用函数,可以查询任何表(将表名作为参数传递给函数),并且要求显示除了名为"password"的列之外的所有列,那么可以采用上述代码的解决方案。但是,值得质疑规范的合理性。因为下一个规范可能是要求一个通用函数来更新任何表,这是不符合良好编码实践的。

总之,以上是问题产生的原因以及解决方法的整理。在代码中,通过将数据解析为关联数组并排除密码字段,可以实现从表中返回所有结果的通用函数。然而,为了遵循良好的编码实践,建议为每个查询编写特定的数据访问函数,并遵循有描述性的命名规范。

0