gpt4 book ai didi

php - 在一个mysql查询中查询两个表

转载 作者:行者123 更新时间:2023-11-29 09:22:33 25 4
gpt4 key购买 nike

我无法从两个单独的表获取数据

到目前为止我有这个

<? 
include('config.php');
$xid = $_GET['xid'];

$result = mysql_query("SELECT * FROM `config`") or trigger_error(mysql_error());
while($row = mysql_fetch_array($result)){
foreach($row AS $key => $value) { $row[$key] = stripslashes($value); }

$result = mysql_query("SELECT * FROM `utinfo` WHERE `xid` = $xid") or trigger_error(mysql_error());
while($row2 = mysql_fetch_array($result)){
foreach($row2 AS $key => $value) { $row2[$key] = stripslashes($value); }
$un = urldecode($row2['un']);
};

switch ($row['module'])
{
case 1:
echo "Function 1 for user $uid on account $un";
break;
case 2:
echo "Function 2 for user $uid on account $un";
break;
case 3:
echo "Function 3 for user $uid on account $un";
break;
default:
echo "No module defined.";

};
};
?>

配置表配置有名为模块的行,它由 2 个条目填充,其中一个是 1,另一个是 3。所以我应该看到情况 1,然后是情况 3。但我得到的只是默认的回显.

最佳答案

(这不是OP的答案,而是你真正应该关心的事情,所以我认为值得写它)

您的代码中似乎存在大量 SQL 注入(inject)。

调用页面的正常方法是在 URL 中使用类似“xid=5”的内容,以获取用户 #5 的信息。

现在,假设有人给出“xid=5 or 1=1”。结果查询将是:

SELECT * FROM `utinfo` WHERE `xid` = 5 or 1=1

条件始终为真;当您迭代结果集时,您将获得所有用户的信息作为输出。

另一种可能性:“xid=5;从utinfo中删除;”;这将给出这个查询:

SELECT * FROM `utinfo` WHERE `xid` = 5; delete from utinfo;

这会清空你的 table :-(


在将数据放入 SQL 查询之前,您必须始终转义/检查/清理/任何数据,特别是(但不仅限于)如果它们来自应用程序的用户。

对于字符串,请参阅mysql_real_escape_string功能。
对于应该是整数的数据,您可以使用 intval (最坏的情况,如果数据无效,您将得到 0,这可能不会从数据库中得到任何结果,但至少不会破坏它^^)

另一种解决方案是使用准备好的语句;但这些不适用于 mysql_* 函数:您必须切换到

无论如何,对于新应用程序,您不应该使用 mysql_* :它很旧,并且没有获得 mysqli 和 PDO 所获得的新功能/改进...

关于php - 在一个mysql查询中查询两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1216061/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com