【发布时间】:2016-08-24 12:34:20
【问题描述】:
我正在编写一个 PHP 脚本,它接受一个 JSON 请求,其中包含一个名为 bookTypeID 的参数。
此bookTypeID 参数可以具有整数值(例如 1、2、3、4)或字符串值“all”。
我将此参数用作 SQL 查询的 WHERE 子句的输入。
我希望我的查询说SELECT name FROM books WHERE $bookTypeID,如果$bookTypeID 是一个整数,这将正常工作,但我不知道在JSON 参数具有的情况下传递给WHERE 子句的正确值值“全部”。我想要一些基本上说“忽略 WHERE 子句”的东西。
我希望这是有道理的。我在下面发布了我的代码的简化版本:
<?php
include 'db_conf.php';
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_errno) {
printf("Connect failed: %s\n", $conn->connect_error);
exit();
}
$content = file_get_contents('php://input');
$json = json_decode($content, true);
$bookTypeIDString = $json["bookTypeID"];
$bookTypeID;
switch($bookTypeIDString){
case "all":
$bookTypeID = "all"; // IS THERE A VALUE HERE THAT I CAN PASS TO AN SQL QUERY TO RETURN EVERYTHING? i.e. IGNORE THE WHERE CLAUSE COMPLETELY?
break;
default:
$bookTypeID = $bookTypeIDString;
}
$query = "SELECT name FROM books WHERE booktype = $bookTypeID";
$result = $conn->query($query);
$data = array();
while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
$data[] = $row;
}
echo json_encode($data);
$conn->close();
?>
更新:这是一个简化的示例,目的是问我的问题。在实践中,我通过 JSON 传递了大约 50 个参数,因此我想避免使用条件 PHP 构建 SQL 语句。我希望有一个我可以传递的 SQL 值,它将返回所有内容。
【问题讨论】:
-
嗯,去掉where子句?您确实意识到 PHP 是一种动态语言,并且您可以动态构建该查询。如果您不想要 where 子句,那么就不要添加一个。
-
您可以在 default: 情况下附加您的 where 子句在您的 switch 和 case "all" 情况下,您的 $bookTypeID 值应为空。
-
"SELECT name FROM books WHERE booktype = $bookTypeID OR $bookTypeID = 'all'";(当然假设booktype是字符串,但如果不是,可以使用类似的逻辑) -
WHERE 1=1并仅在需要时添加其他语句 -
case "all": $bookTypeID = "booktype"。结果:where booktype=booktype始终为真(如果 booktype 不为空):)