带有数组元素PHP的SQL注释
这是我在这个网站上的第一个问题,希望有人能在这里帮助我 我有一个包含一些字段的investor表和一个包含一些文件的project表带有数组元素PHP的SQL注释,php,sql,Php,Sql,这是我在这个网站上的第一个问题,希望有人能在这里帮助我 我有一个包含一些字段的investor表和一个包含一些文件的project表 Project table --------------------- project_investor_id 1,26,29,30,39,48 存储为独立值的数据 所以,在我的投资者管理区,我想展示一个特定的项目,以便在投资者中登录 我正在使用这个函数 public function list_all_projects_by_userid ($uid)
Project table
---------------------
project_investor_id 1,26,29,30,39,48
存储为独立值的数据
所以,在我的投资者管理区,我想展示一个特定的项目,以便在投资者中登录
我正在使用这个函数
public function list_all_projects_by_userid ($uid){
$rs = mysql_query("select * from project_table WHERE project_investor_id LIKE '$uid' ORDER BY project_id DESC");
$i = 0;
while ($row = mysql_fetch_assoc($rs)) {
$result[$i]['project_id'] = $row['project_id'];
$result[$i]['project_investor_id'] = $row['project_investor_id'];
$result[$i]['project_name'] = $row['project_name'];
$result[$i]['project_location'] = $row['project_location'];
$result[$i]['project_location'] = $row['project_location'];
$result[$i]['project_phase'] = $row['project_phase'];
$result[$i]['project_capital'] = $row['project_capital'];
$result[$i]['project_notes'] = $row['project_notes'];
$result[$i]['project_file'] = $row['project_file'];
$i++;
}
return $result;
}
但该项目不涉及多个投资者。
请告诉我如何重新编码
谢谢通常,您应该有另一个映射表来处理这些事情。并使用联接进行搜索 如果您想使您的方法起作用,您应该如下更改sql请求:
$rs = mysql_query("select * from project_table WHERE project_investor_id LIKE '%$uid%' ORDER BY project_id DESC");
$rs = mysql_query("select * from project_table WHERE project_investor_id LIKE '%".mysql_real_escape_string($uid) . "%' ORDER BY project_id DESC");
请参见%
在$uid
前后添加的符号。它应该可以很好地工作
另外,请记住sql注入!你必须逃避你的输入。有了mysql,您可以这样做:
$rs = mysql_query("select * from project_table WHERE project_investor_id LIKE '%$uid%' ORDER BY project_id DESC");
$rs = mysql_query("select * from project_table WHERE project_investor_id LIKE '%".mysql_real_escape_string($uid) . "%' ORDER BY project_id DESC");
要转义的函数:。另外,请仔细阅读链接页面警告部分中显示的内容
不过,你还是应该把项目投资者的名单放在另一张表上。应该是这样的:
Project table
-------------
pr_id pr_name
project investors map table
----------------------------
pr_id investor_id
1 1
1 26
1 29
然后,您的请求将如下所示:
$rs = mysql_query("select * from project_table as pt join project_investor_map as pi on pi.pr_id = pi.investor_id WHERE pi.investor_id = ".mysql_real_escape_string($uid) . " ORDER BY project_id DESC");
这将占用一些投资者的所有项目通常,您应该有另一个此类项目的映射表。并使用联接进行搜索 如果您想使您的方法起作用,您应该如下更改sql请求:
$rs = mysql_query("select * from project_table WHERE project_investor_id LIKE '%$uid%' ORDER BY project_id DESC");
$rs = mysql_query("select * from project_table WHERE project_investor_id LIKE '%".mysql_real_escape_string($uid) . "%' ORDER BY project_id DESC");
请参见%
在$uid
前后添加的符号。它应该可以很好地工作
另外,请记住sql注入!你必须逃避你的输入。有了mysql,您可以这样做:
$rs = mysql_query("select * from project_table WHERE project_investor_id LIKE '%$uid%' ORDER BY project_id DESC");
$rs = mysql_query("select * from project_table WHERE project_investor_id LIKE '%".mysql_real_escape_string($uid) . "%' ORDER BY project_id DESC");
要转义的函数:。另外,请仔细阅读链接页面警告部分中显示的内容
不过,你还是应该把项目投资者的名单放在另一张表上。应该是这样的:
Project table
-------------
pr_id pr_name
project investors map table
----------------------------
pr_id investor_id
1 1
1 26
1 29
然后,您的请求将如下所示:
$rs = mysql_query("select * from project_table as pt join project_investor_map as pi on pi.pr_id = pi.investor_id WHERE pi.investor_id = ".mysql_real_escape_string($uid) . " ORDER BY project_id DESC");
这将占用一些投资者的所有项目如果我理解正确,你的主要问题是你的数据库设计 您不应该将多个投资者以逗号分隔保存,相反,您应该在项目与投资者之间建立n:m关系(如果投资者可以投资多个项目,并且许多项目可以有多个投资者)(使用“联接表”)。那样的话,这样的查询就很容易了 请阅读参考“数据库规范化”的文章,以了解有关良好数据库设计的更多信息。之后,联接和子查询将帮助您找到正确的方法
此外,请查看有关sql注入的文章(如果您不能绝对确定$uid是一个数字)如果我理解正确,您的主要问题是数据库设计 您不应该将多个投资者以逗号分隔保存,相反,您应该在项目与投资者之间建立n:m关系(如果投资者可以投资多个项目,并且许多项目可以有多个投资者)(使用“联接表”)。那样的话,这样的查询就很容易了 请阅读参考“数据库规范化”的文章,以了解有关良好数据库设计的更多信息。之后,联接和子查询将帮助您找到正确的方法
此外,还可以查看有关sql注入的文章(如果您不能绝对确定$uid是一个数字)只是一个提示,您可以将所有代码压缩到:
$result[]=$row$i++代码>。哦,这是非常容易受到SQL注入攻击的。在$uid
中传递的是什么?另外,你不应该在新代码中使用mysql.*
函数,而应该尝试PDO或MySQLiI。我正在传递我当前的日志用户ID。只要一个提示,你就可以将所有代码压缩到:$result[]=$row$i++代码>。哦,这是非常容易受到SQL注入攻击的,$uid
中传递了什么?另外,你不应该在新代码中使用mysql\u*
函数,而应该尝试PDO或MySQLiI。我正在传递我当前的日志用户。你确定这种方法有效吗?假设$uid是“1,30”,因为这两个uid用于查找所有项目。你的方法不会选择问题中的第一行,是吗?编辑刚刚发现$uid只能是一个ID,没有这样理解-抱歉:-)我理解你的问题。这将在他的情况下(当前登录的用户ID)工作,但当然有多个值的问题。您好,请参阅$uid一次只有一个ID。它给出了当前登录的用户id。@FAngel这是一个类的函数。所以我认为这并不容易venerable@FAngel是的,我有另一个表供投资者使用,我正在使用此字段连接该项目的投资者。这种方法有效。非常感谢。你确定这条路行得通吗?假设$uid是“1,30”,因为这两个uid用于查找所有项目。你的方法不会选择问题中的第一行,是吗?编辑刚刚发现$uid只能是一个ID,没有这样理解-抱歉:-)我理解你的问题。这将在他的情况下(当前登录的用户ID)工作,但当然有多个值的问题。您好,请参阅$uid一次只有一个ID。它给出了当前登录的用户id。@FAngel这是一个类的函数。所以我认为这并不容易venerable@FAngel是的,我有另一个表供投资者使用,我正在使用此字段连接该项目的投资者。这种方法有效。非常感谢。谢谢。我将对此做更多的研究;)谢谢你,我会做更多的研究;)