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