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

时间:2012-06-07 08:57:50

标签: mysql sql select

我想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++;
    }

第三:我从行<{p>}的表where $col = id中选择了数据

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

3 个答案:

答案 0 :(得分: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注入的说明

请不要,不要这样做。 EVER:

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

I've recently written an article about SQL injection。像你这样的每个漏洞都会允许任何脚本小子转储你的数据库,或者更糟。

解决方案是首先清理您的输入。理想情况下,您将维护一个允许的表字符串目录,将$_POST变量与那些变量进行比较,然后将预定义的表字符串连接到SQL语句中, NOT 用户输入。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

我认为您可以使用SHOW CREATE TABLE table_name来获取表格的架构。之后,您应该已经知道每一列。