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 語句,您還必須相信他們不會破壞或損壞您的資料。如果您的系統向全球互聯網開放,您將丟失資料。有時問我怎麼知道這一點。