簡體   English   中英

是否有可能在SQL中SELECT * FROM表WHERE列1 =某些東西而不是column_name = something

[英]Is it possible in SQL to SELECT * FROM a table WHERE the column 1 = something and not the column_name = something

我想SELECT * FROM table ,其中第一列等於變量。 它以為我不知道列名。

我知道我可以做點什么

SELECT * FROM table WHERE column_id = 1 

但我無法比較數據。

我怎樣才能做到這一點?

我找到了一些使用T-SQL的解決方案,但它對我不感興趣。

為了更准確:

我正在我的網站上開發一個管理面板,“超級”管理員可以直接修改數據庫。 為此我可以選擇一個表並編輯該表。 但要做到這一點,我使用的是一個只顯示所有表的PHP腳本,我們可以選擇一個,腳本顯示所選表中的所有行。 之后,您選擇一行,然后重定向到問題所在的頁面。 此頁面可以接收任何只有一行的表,因此我想SELECT此行中包含的數據。

要了解的圖像:
第一個顯示表格。
第二個顯示所選表的行。
第三個顯示(通常)1行的數據,但在這張圖中我們可以看到許多行的數據。
selecto http://imageshack.us/g/135/selecto.png

我找到了解決方案:

試着解釋一下:首先:我選擇了所有已發布的特定表格

 $query="SELECT * FROM ".$_POST['table']."";
    $result=mysql_query($query);

第二:我把一個變量歸結為列名(我不知道)

while($fields=mysql_fetch_array($result))
    {
        $col =  mysql_field_name($result,0);
        $nb++;
    }

第三:我從表格where $col = id選擇了where $col = id行的數據

$sql = "SELECT * FROM ".$_POST['table']." WHERE ".$col."=".$_GET['idRow']."";
$result1=mysql_query($sql);

如果你知道有多少列,你可以在這里使用這個小技巧:

SELECT *
FROM (
  SELECT null x1, null x2, ..., null xn
  WHERE 1 = 0
  UNION ALL
  SELECT * FROM my_table
) t
WHERE t.x1 = something

在MySQL之外的其他數據庫中,重命名“未知”列會更簡單,例如在PostgreSQL中,您只能重命名第一列,如下所示:

SELECT * FROM my_table t(x) WHERE x = something

如果您對表格一無所知

...您可以先快速查詢information_schema

SELECT column_name
FROM information_schema.columns
WHERE table_name = :my_table
AND ordinal_position = 1

關於SQL注入的注釋

請不要,不要這樣做。 EVER:

$query="SELECT * FROM ".$_POST['table']."";

我最近寫了一篇關於SQL注入的文章 像您這樣的每個漏洞都會允許任何腳本小子轉儲您的數據庫,或者更糟。

解決方案是首先清理您的輸入。 理想情況下,您將維護一個允許的表字符串目錄,比較您的$_POST變量,然后將預定義的表字符串連接到您的SQL語句,而不是用戶輸入。

在PHP中,您可以執行以下操作:

$col = 'users';
mysql_query("SELECT * FROM table WHERE $col = $something");

我認為您可以使用SHOW CREATE TABLE table_name來獲取SHOW CREATE TABLE table_name的架構。 之后,您應該已經知道每一列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM