84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
我正在使用 PHP 和 HTML 并创建了一个数据库。我已连接到数据库。我想知道是否有一种方法可以通过要求用户输入整个 SQL 语句来从数据库中检索数据。我真的很感兴趣如何在不说 $row['id']
为了论证,他们将知道列和 ID 以及有关数据库的所有信息。
我所看到的一切都是,您必须知道正在查询哪些列,然后才能访问数据。
如果您的用户要提供要使用的 SQL 语句,他们必须知道他们想要的表和列的名称。
您可以查询information_schema.COLUMNS表来查找表和列的名称和数据类型。
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 语句,您还必须相信他们不会破坏或损坏您的数据。如果您的系统向全球互联网开放,您将丢失数据。有时问我怎么知道这一点。
如果您的用户要提供要使用的 SQL 语句,他们必须知道他们想要的表和列的名称。
您可以查询
information_schema.COLUMNS
表来查找表和列的名称和数据类型。或者,执行查询后,您可以获得列元数据。对于 PDO,请使用$stmt->getColumMeta($columnNumber);。使用 mysqli 使用->result_metadata()类似这(未调试)。
这使用->fetch_field()获取有关结果集中每一列的大量有用信息。
但是让用户向您提供 SQL 语句是一个很大的安全风险。如果您信任用户向您提供 SQL 语句,您还必须相信他们不会破坏或损坏您的数据。如果您的系统向全球互联网开放,您将丢失数据。有时问我怎么知道这一点。