2014-02-27 113 views
-2

嘿,我是PHP和MYSQL的初学者,我陷入了一个基本问题。我怎样才能使从URL我的查询参数从URL GET参数创建MySQL查询

我的网址示例:

www.abs.com/index.php?cat=shoes 

www.abs.com/index.php?cat=shoes&subcat=sports 

www.abs.com/index.php?cat=shoes&subcat=sports&color=blue 

我该如何处理这种URL的在我的查询,这只是我的示例查询,我有一个大集合两个表格的字段。我需要查询WHERE部分的帮助,主要问题是我传递(猫)在我的数据库中的URL(b.category)。

我的查询:

select a.p_id, a.p_name, a.p_prize, b.p_id b.color, b.category, b.subcategory 
FROM products a INNER JOIN details b ON a.p_id=b.p_id 

回答

1

首先,你需要通过指定URL参数PHP变量过程中使用PHP的网址:

$cat = $_GET['cat']; 
$subcat = $_GET['subcat']; 
$color= $_GET['color']; 

然后你可以使用这些变量来创建一个MySQL查询字符串:

$queryString = "SELECT a.p_id, a.p_name, a.p_prize, b.p_id b.color, b.category, b.subcategory 
FROM products a INNER JOIN details b ON a.p_id=b.p_id WHERE b.category = '" . mysql_real_escape_string($cat) . "' AND b.subcategory = '" . mysql_real_escape_string($subcat) . "' AND b.color = '" . mysql_real_escape_string($color) . "' "; 

你然后可以使用此查询sting来查询数据库。

+0

不要把未经协商的用户输入直接放入数据库。 – Styphon

+0

我同意在插入数据库的情况下,虽然上面的查询字符串从数据库中简单选择,因此应该是安全的。尽管最好的做法是使用_mysql_real_escape_string_。回答编辑以显示最佳做法。 – egd

+0

去mysqli或pdo :-) – Olavxxx

2

这是很容易做到:

$cat = $_GET['cat']; 
$query = "SELECT a.p_id, a.p_name, a.p_prize, b.p_id b.color, b.category, b.subcategory 
    FROM products a 
    INNER JOIN details b ON a.p_id=b.p_id 
    WHERE b.category = '" . mysql_real_escape_string(trim($cat)) . "'"; 

请注意两件事情,首先使用mysql_real_escape_string来帮助保护您的数据库。它有助于防止SQL注入,尽管并非完全万无一失。

另请注意,MySQL_ *已折旧。你不应该再去写查询了。你应该看看MySQLiPDO

+0

:)我怎么能当用户选择颜色,类别或品牌在同一时间,真正的问题是我的名字是不一样的我的数据库字段 –

+0

这将取决于您的颜色,类别和品牌在哪里数据库。如果他们在细节上,那么只需使用“AND”将更多的子句添加到查询的末尾。 – Styphon

+0

我在查询中的数据库字段是i.inventory_color,p.product_category,其中我的URL中的值是猫和颜色 –