吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 429|回复: 6
收起左侧

[其他求助] 求助php判断问题!

[复制链接]
人生如首歌 发表于 2024-6-8 18:15
25吾爱币
目前问题是这样的,下面这三种参数传入,仅可以识别第一种的rank查询
其他两种判断 识别不出来,请那位大佬帮我修改一下,万分感谢!

Filter=name字段
ParentId=code字段
Rank=rank字段
下面是客户端传出来的json参数
现在是三种情况要判断
第一种:
{
   "Filter" : null,
   "ParentId" : "",
   "Rank" : 1
}
仅查询rank=$rank
{
   "Filter" : null,
   "ParentId" : "B",
   "Rank" : 2
}
查询code=$ParentId且rank=$rank的数值
{
   "Filter" : "A1",
   "ParentId" : "",
   "Rank" : 1
}
查询name=包含$Filter开头的数据





[PHP] 纯文本查看 复制代码
<?php

// 数据库连接信息
$server = '';
$database = '';
$username = '';
$password = '';

try {
    $conn = new PDO("sqlsrv:Server=$server;Database=$database", $username, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    die("数据库连接失败: " . $e->getMessage());
}

// 读取JSON数据
$jsonData = file_get_contents('php://input');
$data = json_decode($jsonData, true);

// 初始化查询条件数组
$conditions = [];
$queryParams = [];

// 根据传入的JSON数据构建查询条件
if (isset($data['Rank']) && $data['Rank'] !== "") {
    $conditions[] = "rank = ?";
    $queryParams[] = intval($data['Rank']); // 转换为整数
}
if (isset($data['ParentId']) && $data['ParentId'] !== "") {
    $conditions[] = "code = ?";
    $queryParams[] = trim($data['ParentId']); // 去除空格
}
if (isset($data['Filter']) && $data['Filter'] !== null) {
    $conditions[] = "name LIKE ?";
    $queryParams[] = "%" . trim($data['Filter']) . "%"; // 去除空格并添加通配符
}

// 构建完整的查询语句
$where = empty($conditions) ? '1=1' : implode(' AND ', $conditions);
$query = "SELECT code, name, rank FROM tushufenlei WHERE $where";

try {
    $stmt = $conn->prepare($query);
    $stmt->execute($queryParams);
    $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
} catch (PDOException $e) {
    die("查询执行失败: " . $e->getMessage());
}

// 格式化查询结果为期望的JSON结构
$response = [
    "Code" => null,
    "Data" => $results, // 直接使用查询结果作为Data的值
    "ErrorMessageList" => [], // 空数组,或者可以根据需要填充错误信息
    "Ext" => null, // 可以根据需要设置为其他值
    "IsSuccess" => true, // 假设查询总是成功的,或者可以根据实际情况设置
    "LastUpdateReaderTime" => "2024-06-08T12:17:09.3014873+08:00", // 示例时间戳,应替换为动态生成的时间
    "Message" => "", // 空字符串,或者可以根据需要填充消息内容
    "ServerTime" => "2024-06-08T12:17:09.3014873+08:00" // 示例时间戳,应替换为动态生成的时间
];

// 遍历查询结果数组并去除每个字段中的空格
foreach ($response['Data'] as &$row) {
    $row = array_map('trim', $row);
}

// 输出JSON响应
header('Content-Type: application/json');
echo json_encode($response, JSON_UNESCAPED_UNICODE);

// 关闭数据库连接
$conn = null;





发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

stu2162583 发表于 2024-6-8 19:37
简单打印下 data的数据即可,复杂一点用 xdebug
pxhzai 发表于 2024-6-8 21:39
为了处理只有`Rank`字段能被正确识别,而其他两个条件(`ParentId`和`Filter`)不能被正确识别的问题,我们需要细化你在条件判断中的逻辑。以下是调整后的PHP代码,它更准确地处理了三种查询场景:

```php
<?php

// 数据库连接信息
$server = '';          // 替换为你的服务器地址
$database = '';        // 替换为你的数据库名
$username = '';        // 替换为你的用户名
$password = '';        // 替换为你的密码

try {
    $conn = new PDO("sqlsrv:Server=$server;Database=$database", $username, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    die("数据库连接失败:" . $e->getMessage());
}

// 读取JSON数据
$jsonData = file_get_contents('php://input');
$data = json_decode($jsonData, true);

// 初始化查询条件数组
$conditions = [];
$queryParams = [];

// 根据传入的JSON数据构建查询条件
// 如果Rank存在且不为空字符串,则加入查询条件
if (isset($data['Rank']) && !empty($data['Rank'])) {
    $conditions[] = "rank = ?";
    $queryParams[] = intval($data['Rank']); // 转换为整数
}

// 如果ParentId存在且非空,则加入查询条件
if (isset($data['ParentId']) && !empty(trim($data['ParentId']))) {
    $conditions[] = "code = ?";
    $queryParams[] = trim($data['ParentId']); // 去除空格
}

// 如果Filter存在且非null,则加入查询条件
if (isset($data['Filter']) && $data['Filter'] !== null) {
    $conditions[] = "name LIKE ?";
    $queryParams[] = $data['Filter'] . "%"; // 添加通配符只在Filter开头匹配
}

// 构建完整的查询语句
$where = empty($conditions) ? '1=1' : implode(' AND ', $conditions);
$query = "SELECT code, name, rank FROM tushufenlei WHERE $where";

try {
    $stmt = $conn->prepare($query);
    $stmt->execute($queryParams);
    $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
} catch (PDOException $e) {
    die("查询执行失败:" . $e->getMessage());
}

// 格式化查询结果为期望的JSON结构
$response = [
    "Code" => null,
    "Data" => $results, // 直接使用查询结果作为Data的值
    "ErrorMessageList" => [], // 空数组,或者可以根据需要填充错误信息
    "Ext" => null, // 可以根据需要设置为其他值
    "IsSuccess" => true, // 假设查询总是成功的,或者可以根据实际情况设置
    "LastUpdateReaderTime" => date('c'), // 动态生成当前时间
    "Message" => "", // 空字符串,或者可以根据需要填充消息内容
    "ServerTime" => date('c') // 动态生成当前时间
];

// 输出JSON响应
header('Content-Type: application/json');
echo json_encode($response, JSON_UNESCAPED_UNICODE);

// 关闭数据库连接
$conn = null;
```

### 关键更改点:

1. **Rank条件**:检查`Rank`是否存在且非空字符串。
2. **ParentId条件**:检查`ParentId`是否存在且经过修剪后非空。
3. **Filter条件**:检查`Filter`是否存在且不为`null`。注意,这里我们改变了`LIKE`查询的构造方式,只在`Filter`的末尾添加通配符,这样可以确保查询的是以`Filter`开头的`name`。

通过这些更改,你可以更准确地处理三种不同的查询场景。



[PHP] 纯文本查看 复制代码
<?php

// 数据库连接信息
$server = '';          // 替换为你的服务器地址
$database = '';        // 替换为你的数据库名
$username = '';        // 替换为你的用户名
$password = '';        // 替换为你的密码

try {
    $conn = new PDO("sqlsrv:Server=$server;Database=$database", $username, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    die("数据库连接失败:" . $e->getMessage());
}

// 读取JSON数据
$jsonData = file_get_contents('php://input');
$data = json_decode($jsonData, true);

// 初始化查询条件数组
$conditions = [];
$queryParams = [];

// 根据传入的JSON数据构建查询条件
// 如果Rank存在且不为空字符串,则加入查询条件
if (isset($data['Rank']) && !empty($data['Rank'])) {
    $conditions[] = "rank = ?";
    $queryParams[] = intval($data['Rank']); // 转换为整数
}

// 如果ParentId存在且非空,则加入查询条件
if (isset($data['ParentId']) && !empty(trim($data['ParentId']))) {
    $conditions[] = "code = ?";
    $queryParams[] = trim($data['ParentId']); // 去除空格
}

// 如果Filter存在且非null,则加入查询条件
if (isset($data['Filter']) && $data['Filter'] !== null) {
    $conditions[] = "name LIKE ?";
    $queryParams[] = $data['Filter'] . "%"; // 添加通配符只在Filter开头匹配
}

// 构建完整的查询语句
$where = empty($conditions) ? '1=1' : implode(' AND ', $conditions);
$query = "SELECT code, name, rank FROM tushufenlei WHERE $where";

try {
    $stmt = $conn->prepare($query);
    $stmt->execute($queryParams);
    $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
} catch (PDOException $e) {
    die("查询执行失败:" . $e->getMessage());
}

// 格式化查询结果为期望的JSON结构
$response = [
    "Code" => null,
    "Data" => $results, // 直接使用查询结果作为Data的值
    "ErrorMessageList" => [], // 空数组,或者可以根据需要填充错误信息
    "Ext" => null, // 可以根据需要设置为其他值
    "IsSuccess" => true, // 假设查询总是成功的,或者可以根据实际情况设置
    "LastUpdateReaderTime" => date('c'), // 动态生成当前时间
    "Message" => "", // 空字符串,或者可以根据需要填充消息内容
    "ServerTime" => date('c') // 动态生成当前时间
];

// 输出JSON响应
header('Content-Type: application/json');
echo json_encode($response, JSON_UNESCAPED_UNICODE);

// 关闭数据库连接
$conn = null;
pxhzai 发表于 2024-6-8 21:43
上面是国产ai通义千问,这里是gpt
[PHP] 纯文本查看 复制代码
<?php

// 数据库连接信息
$server = '';
$database = '';
$username = '';
$password = '';

try {
    $conn = new PDO("sqlsrv:Server=$server;Database=$database", $username, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    die("数据库连接失败: " . $e->getMessage());
}

// 读取JSON数据
$jsonData = file_get_contents('php://input');
$data = json_decode($jsonData, true);

// 初始化查询条件数组
$conditions = [];
$queryParams = [];

// 根据传入的JSON数据构建查询条件
if (isset($data['Rank']) && $data['Rank'] !== "") {
    $conditions[] = "rank = ?";
    $queryParams[] = intval($data['Rank']); // 转换为整数
}
if (isset($data['ParentId']) && $data['ParentId'] !== "") {
    $conditions[] = "code = ?";
    $queryParams[] = trim($data['ParentId']); // 去除空格
}
if (isset($data['Filter']) && $data['Filter'] !== null && $data['Filter'] !== "") {
    $conditions[] = "name LIKE ?";
    $queryParams[] = "%" . trim($data['Filter']) . "%"; // 去除空格并添加通配符
}

// 构建完整的查询语句
$where = empty($conditions) ? '1=1' : implode(' AND ', $conditions);
$query = "SELECT code, name, rank FROM tushufenlei WHERE $where";

try {
    $stmt = $conn->prepare($query);
    $stmt->execute($queryParams);
    $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
} catch (PDOException $e) {
    die("查询执行失败: " . $e->getMessage());
}

// 格式化查询结果为期望的JSON结构
$response = [
    "Code" => null,
    "Data" => $results, // 直接使用查询结果作为Data的值
    "ErrorMessageList" => [], // 空数组,或者可以根据需要填充错误信息
    "Ext" => null, // 可以根据需要设置为其他值
    "IsSuccess" => true, // 假设查询总是成功的,或者可以根据实际情况设置
    "LastUpdateReaderTime" => date('c'), // 动态生成的时间
    "Message" => "", // 空字符串,或者可以根据需要填充消息内容
    "ServerTime" => date('c') // 动态生成的时间
];

// 遍历查询结果数组并去除每个字段中的空格
foreach ($response['Data'] as &$row) {
    $row = array_map('trim', $row);
}

// 输出JSON响应
header('Content-Type: application/json');
echo json_encode($response, JSON_UNESCAPED_UNICODE);

// 关闭数据库连接
$conn = null;
?>
 楼主| 人生如首歌 发表于 2024-6-9 15:37
pxhzai 发表于 2024-6-8 21:43
上面是国产ai通义千问,这里是gpt

两个都不行,只能请求返回rank的查询,其他两个还是无法匹配查询返回!
stu2162583 发表于 2024-6-9 16:41
人生如首歌 发表于 2024-6-9 15:37
两个都不行,只能请求返回rank的查询,其他两个还是无法匹配查询返回!

听我的,肯定是其他的问题,代码没有什么大问题。就调试就好了,你把接受参数打印出来,就能知道问题所在,比如大小写,比如拼音
a774733519 发表于 2024-6-23 00:54
本帖最后由 a774733519 于 2024-6-23 00:55 编辑

试试
ChatGPT
这个函数 generate_query 可以根据输入参数生成适当的查询语句。它会检查 Filter、ParentId 和 Rank 参数的值,然后构建相应的查询条件:
  • 如果 Filter 有值,那么查询 name 以该值开头的数据。
  • 如果 Filter 为空并且 ParentId 有值,那么查询 code 等于 ParentId 且 rank 等于给定值的数据。
  • 如果 Filter 和 ParentId 都为空,那么仅查询 rank 等于给定值的数据。
可以根据需要修改查询字符串的生成逻辑,以适应特定的数据库和表结构。
[Python] 纯文本查看 复制代码
def generate_query(params):
    filter_value = params.get('Filter')
    parent_id = params.get('ParentId')
    rank = params.get('Rank')

    query = "SELECT * FROM table_name WHERE"

    if filter_value:
        query += f" name LIKE '{filter_value}%'"
    elif parent_id:
        query += f" code = '{parent_id}' AND rank = {rank}"
    else:
        query += f" rank = {rank}"

    return query

# 示例调用
params1 = {
   "Filter": None,
   "ParentId": "",
   "Rank": 1
}
params2 = {
   "Filter": None,
   "ParentId": "B",
   "Rank": 2
}
params3 = {
   "Filter": "A1",
   "ParentId": "",
   "Rank": 1
}

print(generate_query(params1))  # 输出: SELECT * FROM table_name WHERE rank = 1
print(generate_query(params2))  # 输出: SELECT * FROM table_name WHERE code = 'B' AND rank = 2
print(generate_query(params3))  # 输出: SELECT * FROM table_name WHERE name LIKE 'A1%'
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-15 01:47

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表