Heim  >  Fragen und Antworten  >  Hauptteil

Rufen Sie Ergebnissatz-Metadaten aus der Datenbank ab, ohne die SQL-Anweisung zu kennen

<p>Ich verwende PHP und HTML und habe eine Datenbank erstellt. Ich bin mit der Datenbank verbunden. Ich frage mich, ob es eine Möglichkeit gibt, Daten aus einer Datenbank abzurufen, indem man den Benutzer auffordert, die gesamte SQL-Anweisung einzugeben. Ich bin wirklich daran interessiert, wie ich an die Daten komme, ohne $row['id']</p> zu sagen. <p>Der Argumentation halber: Sie kennen die Spalten und IDs und alles über die Datenbank. </p> <p>Alles, was ich gesehen habe, ist, dass Sie wissen müssen, welche Spalten abgefragt werden, bevor Sie auf die Daten zugreifen können. </p>
P粉506963842P粉506963842384 Tage vor485

Antworte allen(1)Ich werde antworten

  • 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 语句,您还必须相信他们不会破坏或损坏您的数据。如果您的系统向全球互联网开放,您将丢失数据。有时问我怎么知道这一点。

    Antwort
    0
  • StornierenAntwort