0

我正在尝试$_GET用户可能输入的一些变量(忙于制作基本的网络服务器):

$users= strval($_GET['user']);
$price= intval($_GET['price']);
$productID= intval($_GET['productid']);

这是我的查询:

$query = "SELECT * FROM `table` WHERE `user` = '" . $user . "' AND `price` <= " . $price . " AND `productID` = " . $productID; 

(像这样)

鉴于此理论联系:

www.example.com/api.php?price=300

并且不要使用 GET 的其余部分(用户和产品 ID)将自动填充 0 或 ''(int/string)。

所以我想我可以使用一个if声明:

if(price == 0){
   // change the query without the price as WHERE
}

但是,如果我将 price 和 productID 或 productID 和 user 组合为变量呢?

处理这个问题的最佳方法是什么?也许这是一个愚蠢的问题,但我无法弄清楚。

4

3 回答 3

2

如果提供了变量,您可以使用组合的 IF 语句来构建适当的查询(如果没有,则忽略它们)

$query = "SELECT * FROM `table` WHERE 1"; // WHERE 1 means "return all rows from table"

if ( isset( $_GET['price'] ) ){ // Only if price variable is set
    $query .= " AND price <= '{$_GET['price']}'"; // Restrict results by price
}

if ( isset( $_GET['user'] ) ){ // Only if user variable is set
    $query .= " AND user LIKE '{$_GET['user']}'"; // Restrict results by user
}

if ( isset( $_GET['productID'] ) ){ // Only if user variable is set
    $query .= " AND productID = '{$_GET['productID']}'"; // Restrict results by productID
}
于 2012-10-16T22:19:20.910 回答
0

您可以使用三元运算符正确制作查询字符串,在设置价格子句时连接它。

$query = "select * from table where user = $user" . ($price ? " AND price <= $price" : "") . " AND productID = $productID";

你的英语很差,我们是巴西人 o/

于 2012-10-16T22:22:22.950 回答
0
$users = $_GET['user'] || "";
$price = $_GET['price'] || 0;
$productID = $_GET['productid'] || 0;
$query = "SELECT * FROM table WHERE 1";

$query .= (isset($_GET['user'))?"AND user = '{$users}'";
$query .= (isset($_GET['price'))?"AND price <= '{$price}'";
$query .= (isset($_GET['productid'))?"AND productID = '{$productID}'";

如果您想将变量用于其他用途。如果未在数据中设置值,这会将值设置为0或(空字符串)。""$_GET

于 2012-10-16T22:24:36.663 回答