我想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);
答案 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
请不要,不要这样做。 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
来获取表格的架构。之后,您应该已经知道每一列。