![](/img/trans.png)
[英]Select * from table_name where column_nameِ = 'value'
[英]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
請不要,不要這樣做。 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.