Maison  >  Questions et réponses  >  le corps du texte

Récupérer les métadonnées du jeu de résultats de la base de données sans connaître l'instruction SQL

<p>J'utilise PHP et HTML et j'ai créé une base de données. Je suis connecté à la base de données. Je me demande s'il existe un moyen de récupérer des données d'une base de données en demandant à l'utilisateur de saisir l'intégralité de l'instruction SQL. Je suis vraiment intéressé par la façon d'obtenir les données sans dire $row['id']</p> <p>Pour les besoins de l'argumentation, ils connaîtront les colonnes et les identifiants ainsi que tout ce qui concerne la base de données. </p> <p>Tout ce que j'ai vu, c'est que vous devez savoir quelles colonnes sont interrogées avant de pouvoir accéder aux données. </p>
P粉506963842P粉506963842434 Il y a quelques jours525

répondre à tous(1)je répondrai

  • P粉674757114

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

    Si vos utilisateurs doivent fournir des instructions SQL à utiliser, ils doivent connaître les noms des tables et des colonnes qu'ils souhaitent.

    Vous pouvez interroger information_schema.COLUMNStables pour trouver les noms de tables et de colonnes ainsi que les types de données.

    Alternativement, après avoir exécuté la requête, vous pouvez obtenir les métadonnées de la colonne. Pour PDO, utilisez $stmt->getColumMeta($columnNumber);. En utilisant mysqli, utilisez ->result_metadata() comme ceci (non débogué).

    $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();
    

    Cela utilise ->fetch_field() pour obtenir de nombreuses informations utiles sur chaque colonne de l'ensemble de résultats.

    Mais demander aux utilisateurs de vous fournir des instructions SQL représente un gros risque de sécurité. Si vous faites confiance aux utilisateurs pour vous fournir des instructions SQL, vous devez également leur faire confiance pour ne pas corrompre ou corrompre vos données. Si votre système est ouvert à l’Internet mondial, vous perdrez des données. Parfois, les gens me demandent comment je sais cela.

    répondre
    0
  • Annulerrépondre