2011-08-23 55 views
0

我创建了一个SQL页面,其中用户可以运行SQL查询。我的问题在于我不知道用户将输入的列。因此我不能显示他所要求的。 就像他的查询是:select emp from emp;我如何知道他输入了哪个列名,并将其显示在结果页面中。 下面是您可以使用并帮助我的确切查询。我在我的代码中使用了大量的IF案例。例如:if(strpos($ query,“id”))然后它显示id列。 请帮帮我。 并提前致谢!帮助显示数据库中的数据

+8

我很想看到查询历史记录以查看各种攻击 –

+2

不知道你正在试图在这里 – swordfish

+0

做通常什么,您应该能够使用'mysql_num_fields'和'mysql_field_name'函数从查询结果中获取列标题列表。 –

回答

2

must是在开玩笑,让用户写这几样在一个WebForm的语句,整个世界可以访问..

这就是说,当你执行一个查询,您可以按行获取结果行成key =>值数组。键将包含字段名称。为此,请使用mysql_fetch_array

但是真的。如果你的代码工作,我可以写

SHOW DATABASES; 
DROP DATABASE <databasename that is on my screen> 

而突然间,你有一个空的服务器。尽快将此脚本脱机。

+1

我不是在开玩笑。 – GolezTrol

+0

这不过是实验而已。没有有用的数据可供用户使用。并不是所有的权利都赋予给用户...... SQL是我们课程的一部分,我认为要尝试... – Atulmaharaj

0

当您从数据库中查询的输出做这样的事情:

$query = mysql_query("YOUR_USERS_QUERY_HERE"); 

if (mysql_affected_rows() > 0) { 
    while ($row = mysql_fetch_assoc($query)) { 
     $keys = array_keys($row); 
     foreach ($keys as $a_key) { 
      echo $a_key . "=" . $row[$a_key] . " <br /> "; 
     } 
     echo "<br />"; 
    } 
} else { 
    echo "No Rows Found"; 
} 

- 编辑 -

要输出的标题,一旦你可以做这样的事情:

$first = true; 
while ($row = mysql_fetch_assoc($query)) { 
    if ($first == true) { 
     //output header code here 
     $first = false; 
    } 
    //output data row code here 
} 
+0

嘿,根据上面的帖子,我确实得到了我想要的东西。谢谢。但你能帮我一点格式?请访问[链接](http://www.atulmaharaj.com/dbms/index_old.html)给出查询 - 选择*从emp;请查看输出并告诉我问题出在哪里..预先感谢... :) – Atulmaharaj

+0

看起来您每循环输出标题行。输出标题行一次。 – Jasper

+0

感谢吨@Jasper ...它为我工作...... :) – Atulmaharaj

1

我跟GolezTrol一起去,这根本就没有保存。

你当然可以用if语句检查用户是否使用过“DROP”或“SHOW”这个词,或者只是允许某些事情,但我不知道这是否保存...

0

mysql_fetch_field可以从结果集中获取列名以及许多关于列(type,max_length等)的其他信息,这些信息对于像这样的程序中显示可能很有用。

+0

嗯....谢谢你会尝试它,让你知道... :) – Atulmaharaj

1

只要他限制与php mysql调用相关的sql用户权限,它就是安全的。只给它选择一个数据库的权限,它真的没关系,如果它在公共网站上(假设你不关心每个人都可以看到数据)。

这将格式化SQL输出到一个像样找表为您提供:

$header = null; 
$colspan = 0; 
while($values = odbc_fetch_array($rs)) 
{ 
    $result .= "<TR>"; 
    if(is_null($header)) 
    { 
     foreach(array_keys($values) as $key) 
     { 
      $header .= "<TH style='border:1px dashed #00FF00;padding:5px 5px 5px 5px;align:left;'>$key</TH>"; 
      $colspan++; 
     } 
    } 

    foreach($values as $value) 
    { 
     $result .= "<TD style='border:1px dashed #00FF00;padding:5px 5px 5px 5px;align:left;'>$value</TD>"; 
    } 
    $result .= "</TR>"; 
} 
} 
$result = "<TABLE style='padding: 1px 1px 1px 1px;border:dash 1px #00FF00;color:#00FF00;'>". 
      "<tr><td colspan='$colspan'>>>" . $sql . "</tr></td>" . 
      $header.$result."</TABLE>"; 
+0

我可以得到的数据显示在一个表格形成。我面临的问题是如何知道用户输入的栏目并显示它。感谢它顺便说一句。 :) – Atulmaharaj

+0

这就是上面代码的标题部分。它采用数组的键并将它们用作列名。 – thaspius