SQL注释与数组元素PHP

时间:2013-09-10 11:56:45

标签: php sql

这是我在这个网站上的第一个问题,希望有人能在这里帮助我。

我有一个包含一些字段的投资者表和一个包含一些文件的项目表

Project table
---------------------
project_investor_id     1,26,29,30,39,48

数据存储为,分隔值 因此,在我的投资者管理区域,我希望显示针对logedin投资者的特定项目 我正在使用这个功能。

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;
    }

但它不与项目合作有多个投资者。 请让我知道如何重新编码?

谢谢

2 个答案:

答案 0 :(得分:2)

如果我理解你,你的主要问题是你的数据库设计。

你不应该以逗号分隔多个投资者,而应该建立一个:m-relation(如果投资者可以投资许多项目,许多项目可以有很多投资者)从项目到投资者(带有“联合表”) )。这样,这样的查询就很容易了。

查看引用“数据库规范化”的文章,了解有关良好数据库设计的更多信息。之后,联接和子查询将帮助您找到正确的方法。

另外,查看有关sql注入的文章(如果你不能绝对确定$ uid是一个数字)

答案 1 :(得分:-1)

通常,您应该有另一个映射表来处理这类事情。并使用联接进行搜索。

如果你想让你的方法有效,你应该改变你的sql请求:

 $rs = mysql_query("select * from  project_table WHERE project_investor_id LIKE '%$uid%'  ORDER BY project_id DESC"); 

查看%之前和之后添加的$uid个符号。它应该可以正常工作。

另外,请记住sql注入!你必须逃避你的意见。使用mysql_ *你可以这样做:

 $rs = mysql_query("select * from  project_table WHERE project_investor_id LIKE '%".mysql_real_escape_string($uid) . "%'  ORDER BY project_id DESC"); 

逃脱的功能:mysql_real_escape_string。另外,请仔细阅读链接页面的警告部分中显示的内容。

但是,您最好将项目投资者名单列入不同的表格。应该是这个谎言:

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");

将采取一些投资者的所有项目