首页  >  问答  >  正文

在不知道 SQL 语句的情况下从数据库检索结果集元数据

<p>我正在使用 PHP 和 HTML 并创建了一个数据库。我已连接到数据库。我想知道是否有一种方法可以通过要求用户输入整个 SQL 语句来从数据库中检索数据。我真的很感兴趣如何在不说 $row['id']</p> 的情况下获取数据 <p>为了论证,他们将知道列和 ID 以及有关数据库的所有信息。</p> <p>我所看到的一切都是,您必须知道正在查询哪些列,然后才能访问数据。</p>
P粉506963842P粉506963842384 天前484

全部回复(1)我来回复

  • P粉674757114

    P粉6747571142023-09-05 11:18:10

    如果您的用户要提供要使用的 SQL 语句,他们必须知道他们想要的表和列的名称。

    您可以查询information_schema.COLUMNS表来查找表和列的名称和数据类型。

    或者,执行查询后,您可以获得列元数据。对于 PDO,请使用 $stmt->getColumMeta($columnNumber);。使用 mysqli 使用 ->result_metadata() 类似这(未调试)。

    $stmt = $mysqli->prepare("SELECT what,ever,else FROM table");
    $stmt->execute();
    $metadata = $stmt->result_metadata();
    $column_count = $mysqli->field_count();
    $column_names = [];
    for ($colnum = 0; $colnum < $column_count; $colnum++) {
        $field = $metadata->fetch_field();
        $column_names [] = $field->name;
    }
    $metadata->close();
    

    这使用->fetch_field()获取有关结果集中每一列的大量有用信息。

    但是让用户向您提供 SQL 语句是一个很大的安全风险。如果您信任用户向您提供 SQL 语句,您还必须相信他们不会破坏或损坏您的数据。如果您的系统向全球互联网开放,您将丢失数据。有时问我怎么知道这一点。

    回复
    0
  • 取消回复