php - 如何使用 WHERE = 'all' 编写 SQL 查询?

标签 php mysql sql

我正在编写一个 PHP 脚本,该脚本接受一个包含名为 bookTypeID 的参数的 JSON 请求。

bookTypeID 参数可以是整数值(例如 1,2,3,4)或字符串值“all”。

我将此参数用作 SQL 查询的 WHERE 子句的输入。

我希望我的查询说 SELECT name FROM books WHERE $bookTypeID,如果 $bookTypeID 是一个整数,它会工作正常,但我不知道正确的值在 JSON 参数值为“all”的情况下传递给 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();
?> 

更新:这是一个简化的例子,目的是问我的问题。实际上,我有大约 50 个参数通过 JSON 传递,因此我想避免使用条件 PHP 构建 SQL 语句。我希望我可以传递一个 SQL 值,它将返回所有内容。

最佳答案

您可以根据 $bookTypeID 的输入/类型更改您的 SQL 查询。因此,如果需要,只需附加 where 子句即可。

这样,您不必更改数据库字段并保持此时的工作流程一致。

if($bookTypeID == 'all') {
    $query = "SELECT name FROM books";
} else {
    $query = "SELECT name FROM books WHERE booktype = $bookTypeID";
}

关于php - 如何使用 WHERE = 'all' 编写 SQL 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39123482/

相关文章:

php - 如何统计数据库中的条目总数

mysql - 如何从字符串中选择由逗号 (",") 分隔的随机子字符串

sql - 选择使用来自 oracle 的 2 个字段删除重复条目

SQL 服务器 : verbose error messages?

sql - 如何在 postgres 中强制执行自动增量?

javascript - PHP:获取远程站点的最终渲染 HTML

php - laravel 用另一个字段更新一个字段

Php递归目录创建

php - 使用 PHP 对下拉表中的 SQL 查询进行排序

php - 带有 form_helper 输入的 Codeigniter 下拉表单是索引/键而不是所选的值