【问题标题】:Rewrite query depending on GET parameters根据 GET 参数重写查询
【发布时间】:2012-12-12 17:39:49
【问题描述】:

我正在开发我网站上的搜索引擎。用户可以添加在 URL 中使用GET 提交的条件。

当用户选择例如 1 个条件时,它看起来像这样:

localhost/search.php?course=1&price=&name=

他们有 3 个标准可供选择,所以你看到他只选择了 COURSE。

现在我必须根据条件从数据库中进行选择,所以我的代码如下所示:

if ($_GET['price'] > 0 && $_GET['name'])
{
    $search_price = $_GET['price'];
    $search_name = $_GET['name'];

    $result2 = mysql_query("SELECT id, name, price, views, userid, type, anonymous FROM files WHERE course='$course_id' AND price < $search_price AND name LIKE '%$search_name%'");
}
elseif ($_GET['price'] > 0)
{
    $search_price = $_GET['price'];

    $result2 = mysql_query("SELECT id, name, price, views, userid, type, anonymous FROM files WHERE course='$course_id' AND price < $search_price");
} 
elseif ($_GET['name'])
{
    $search_name = $_GET['name'];

    $result2 = mysql_query("SELECT id, name, price, views, userid, type, anonymous FROM files WHERE course='$course_id' AND name LIKE '%$search_name%'");
}
else 
{
    $result2 = mysql_query("SELECT id, name, price, views, userid, type, anonymous FROM files WHERE course='$course_id'");
}

while ($row2 = mysql_fetch_assoc($result2))
                                        {
.....

但这不可能是正确的方法,因为如果最终用户可以选择 10 个标准,这将是一个很长的代码

我该如何解决这个问题?

【问题讨论】:

  • sql injection + deprecated mysql_* 函数....建议,用准备好的语句学习 PDO。

标签: php get criteria


【解决方案1】:

我要做的是动态创建 sql 查询,然后在最后执行它。所以像这样的

$query_string = "SELECT blahblah, blahblah, blah blah from blahx where 1=1 ";
$where = "";

if(isset($_GET['somecriteria']))
{
    $where .= " AND blahblah = $_GET['somecriteia'] ";
}
if(isset($_GET['someOTHERcriteria']))
{
    $where .= " AND blahblah=$_GET['someOTHERcritera'] ";
}
mysql_query($query_string . $where);

等等。 请注意,这只是为了向您展示如何实现您的目标。这显然容易受到 SQL 注入攻击,您必须清理这些东西。

【讨论】:

  • 应该是.= 而不是+=
【解决方案2】:

使用 $_post 向 php 脚本发送大量信息。使用 get 时,您应该创建 url 以仅在填充 get 调用时包含它们。因此,如果未选择价格,则 url 不应包含“price=”。这将导致您的接收脚本出现问题。

您的数据库脚本可以通过仅包含选定条件的一次调用完成。

Myqsl 已经折旧,需要查看 Myqsli 或 PDO

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-12
    • 1970-01-01
    • 1970-01-01
    • 2014-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多