0

0

使用PHP与Notion API进行数据库查询:正确实现过滤功能

心靈之曲

心靈之曲

发布时间:2025-10-09 08:18:02

|

845人浏览过

|

来源于php中文网

原创

使用PHP与Notion API进行数据库查询:正确实现过滤功能

本文详细介绍了如何使用PHP通过cURL正确地查询Notion数据库并实现数据过滤。核心问题在于,Notion API的数据库查询请求中,过滤条件必须被封装在一个名为filter的顶级键下,否则API将忽略过滤参数并返回所有数据。教程提供了正确的代码示例和关键注意事项,帮助开发者有效利用Notion API的过滤功能。

深入理解Notion API数据库查询过滤

在使用php与notion api交互,特别是进行数据库查询(post /databases/{database_id}/query)时,开发者常会遇到一个常见问题:即使在请求体中包含了过滤条件,api却似乎忽略了这些条件,并返回了数据库中的所有数据。这通常不是连接问题,也不是认证问题,而是请求体(payload)结构不符合notion api规范所致。

Notion API的官方文档明确指出,对于数据库查询请求,任何过滤条件都必须嵌套在一个名为filter的顶级JSON键之下。如果过滤条件直接作为请求体的根元素,API将无法正确解析这些条件,从而导致过滤无效。

常见错误示例

以下是一个典型的错误请求体结构,它将导致过滤失败:

 "DataElement", // 试图直接指定属性和过滤条件
  "title" => ["equals" => "bigHouse"]
];

$data = json_encode($data_array);

// ... cURL请求设置省略 ...

// 此时,Notion API会返回数据库中所有条目,而不是只包含"bigHouse"的条目。
?>

在上述代码中,"property"和"title"直接作为$data_array的根键。虽然从JSON语法上看是合法的,但Notion API要求这些过滤逻辑必须包裹在"filter"键内。

立即学习PHP免费学习笔记(深入)”;

正确实现Notion API数据库过滤

要正确地向Notion API发送带有过滤条件的数据库查询请求,关键在于将所有过滤逻辑封装在一个名为filter的键中。

正确的过滤数据结构

Figma
Figma

Figma 是一款基于云端的 UI 设计工具,可以在线进行产品原型、设计、评审、交付等工作。

下载

根据Notion API文档,正确的请求体结构应如下所示:

{
  "filter": {
    "property": "Landmark",
    "text": {
      "contains": "Bridge"
    }
  }
}

将其转换为PHP数组,并用于cURL请求时,应这样构造$data_array:

 [ // 所有的过滤条件都必须嵌套在'filter'键下
    "property" => "DataElement",
    "title" => ["equals" => "bigHouse"] // 过滤条件:Title类型属性等于"bigHouse"
  ]
];

$data = json_encode($data_array);

// ... cURL请求设置省略 ...
?>

这个修正确保了Notion API能够识别并应用你提供的过滤条件。

完整的PHP数据库查询示例

下面是一个完整的PHP代码示例,演示如何使用cURL向Notion API发送带有正确过滤条件的数据库查询请求:

 [
    "property" => "DataElement", // Notion数据库中的属性名称
    "title" => ["equals" => "bigHouse"] // 过滤条件:Title类型属性等于"bigHouse"
  ]
  // 可以添加其他参数,例如 "sorts", "start_cursor", "page_size" 等
];

$data = json_encode($data_array); // 将PHP数组编码为JSON字符串

// 3. 初始化cURL会话
$ch = curl_init();

// 4. 设置cURL选项
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 返回响应内容而不是直接输出
curl_setopt($ch, CURLOPT_POST, true); // 设置为POST请求
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); // 设置POST请求体

// 设置HTTP头,包括认证令牌和Notion API版本
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  'Authorization: Bearer ' . $token,
  'Notion-Version: ' . $version,
  'Content-Type: application/json' // 明确指定请求体类型为JSON
));

// 针对开发环境,可以禁用SSL验证(不推荐在生产环境使用)
// curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
// curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

// 5. 执行cURL请求
$resp = curl_exec($ch);

// 6. 错误处理与结果解析
if ($e = curl_error($ch)) {
    echo "cURL Error: " . $e;
} else {
    $decoded = json_decode($resp, true);
    // 打印或处理API响应数据
    echo "
";
    var_dump($decoded);
    echo "
"; // 可以将结果保存到文件 // file_put_contents('notion_query_results.json', json_encode($decoded, JSON_PRETTY_PRINT)); } // 7. 关闭cURL会话 curl_close($ch); ?>

注意事项与最佳实践

  1. filter 键的必要性:始终记住,所有的过滤条件都必须封装在请求体的顶级 filter 键中。这是Notion API的特定要求。
  2. Notion-Version 头:在HTTP请求头中指定 Notion-Version 是非常重要的。它确保你的请求与特定版本的API行为保持一致,避免因API更新导致的不兼容问题。建议使用官方文档中推荐的最新稳定版本。
  3. Content-Type 头:虽然cURL有时会自动设置,但明确指定 Content-Type: application/json 是一个良好的实践,它告知服务器请求体是JSON格式。
  4. 错误处理:务必使用 curl_error($ch) 来检查cURL执行过程中是否发生错误。这对于调试网络请求问题至关重要。
  5. 安全性:你的Notion集成令牌($token)和数据库ID($databaseId)是敏感信息。在生产环境中,切勿将其硬编码在公开可访问的代码中,应通过环境变量或其他安全配置方式进行管理。
  6. 过滤条件匹配:确保 property 的名称与Notion数据库中实际的属性名称完全匹配,并且其内部的过滤类型(如 title, text, number, checkbox 等)及其操作符(如 equals, contains, greater_than 等)与该属性的数据类型兼容。详细的过滤选项请参考Notion API官方文档。
  7. Notion API文档:Notion API功能强大且不断更新。遇到任何疑问时,查阅官方文档(https://www.php.cn/link/8becabfd3781cac86c0988f11d76e690)是解决问题的最佳途径。

总结

通过本文的详细讲解和示例代码,我们明确了使用PHP与Notion API进行数据库查询时,正确实现数据过滤的关键在于将过滤条件封装在请求体中的 filter 顶级键下。遵循这一规范,并结合适当的cURL设置和错误处理,开发者可以有效地利用Notion API的强大过滤功能,精确地获取所需数据。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

418

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

535

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

311

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

77

2025.09.10

数据类型有哪几种
数据类型有哪几种

数据类型有整型、浮点型、字符型、字符串型、布尔型、数组、结构体和枚举等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

309

2023.10.31

php数据类型
php数据类型

本专题整合了php数据类型相关内容,阅读专题下面的文章了解更多详细内容。

222

2025.10.31

curl_exec
curl_exec

curl_exec函数是PHP cURL函数列表中的一种,它的功能是执行一个cURL会话。给大家总结了一下php curl_exec函数的一些用法实例,这个函数应该在初始化一个cURL会话并且全部的选项都被设置后被调用。他的返回值成功时返回TRUE, 或者在失败时返回FALSE。

440

2023.06.14

linux常见下载安装工具
linux常见下载安装工具

linux常见下载安装工具有APT、YUM、DNF、Snapcraft、Flatpak、AppImage、Wget、Curl等。想了解更多linux常见下载安装工具相关内容,可以阅读本专题下面的文章。

177

2023.10.30

php中文乱码如何解决
php中文乱码如何解决

本文整理了php中文乱码如何解决及解决方法,阅读节专题下面的文章了解更多详细内容。

1

2026.01.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 9.8万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.2万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号