是否可以在 SQL 中 SELECT * FROM a table WHERE column 1 = something 而不是 column_name = something
Posted
技术标签:
【中文标题】是否可以在 SQL 中 SELECT * FROM a table WHERE column 1 = something 而不是 column_name = something【英文标题】:Is it possible in SQL to SELECT * FROM a table WHERE the column 1 = something and not the column_name = something 【发布时间】:2012-06-07 08:57:50 【问题描述】:我想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
的行中选取数据
$sql = "SELECT * FROM ".$_POST['table']." WHERE ".$col."=".$_GET['idRow']."";
$result1=mysql_query($sql);
【问题讨论】:
目前尚不清楚您要完成什么以及您是如何失败的。考虑改写你的问题。 如果您对 T-SQL 不感兴趣 - 什么您对数据库和 SQL 方言感兴趣!?!? 奇怪的是您知道表的名称,而不是其 PK 的名称。通过合理的命名约定,它甚至可以被推断出来。 你不能在一个语句中做SELECT * FROM every table
,当你有多个语句时,你也可以在它们中指定不同的列名。
只是指出这里的声明...$query="SELECT * FROM ".$_POST['table']."";
...让您宽对各种 SQL 注入开放。
【参考方案1】:
如果你知道有多少列,你可以在这里使用这个小技巧:
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注入注意事项
请不要,不要这样做。永远:
$query="SELECT * FROM ".$_POST['table']."";
I've recently written an article about SQL injection。每一个像你这样的漏洞都会允许任何脚本小子转储你的数据库,或者更糟。
解决方案是首先清理您的输入。理想情况下,您将维护一个允许的表字符串目录,将您的 $_POST
变量与那些比较,然后将预定义的表字符串连接到您的 SQL 语句中,不是用户输入。 p>
【讨论】:
【参考方案2】:我认为您可以使用SHOW CREATE TABLE table_name
来获取表的架构。在那之后,你应该已经知道每一列了。
【讨论】:
【参考方案3】:在 PHP 中,您可以执行以下操作:
$col = 'users';
mysql_query("SELECT * FROM table WHERE $col = $something");
【讨论】:
是的,但我不知道列名。 你的变量中没有这个未知的列名吗? 好的,我有个主意,我可以做一个 $fields = mysql_num_fields($result);在此之后 $query = "SELECT * FROM $mytable WHERE $fields[0] = $var "; 你可以在MySQL中找到这样的列名:***.com/questions/64894/…以上是关于是否可以在 SQL 中 SELECT * FROM a table WHERE column 1 = something 而不是 column_name = something的主要内容,如果未能解决你的问题,请参考以下文章
在sql中select from where 的where的条件是否一定要是表里面的字段