首頁  >  問答  >  主體

在不知道 SQL 語句的情況下從資料庫檢索結果集元數據

<p>我正在使用 PHP 和 HTML 並建立了一個資料庫。我已連接到資料庫。我想知道是否有一種方法可以透過要求使用者輸入整個 SQL 語句來從資料庫中檢索資料。我真的很感興趣如何在不說 $row['id']</p> 的情況下獲取數據 <p>為了論證,他們將知道列和 ID 以及有關資料庫的所有資訊。 </p> <p>我所看到的一切都是,您必須知道正在查詢哪些列,然後才能存取資料。 </p>
P粉506963842P粉506963842434 天前526

全部回覆(1)我來回復

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

    回覆
    0
  • 取消回覆