Maison > Questions et réponses > le corps du texte
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.COLUMNS
tables 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.