MongoDB 检查 id 是否是有效的 BSON PHP [英] MongoDB check if id is a valid BSON PHP

查看:65
本文介绍了MongoDB 检查 id 是否是有效的 BSON PHP的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何检查 MongoDB id 是否是有效的 BSON?

How do I check if a MongoDB id is a valid BSON?

这就是我目前拥有的

public function findOne($id=""){
  if($BSON_id = new \MongoDB\BSON\ObjectId($id)){
    $user = $this->collection->findOne([
     '_id'=> new \MongoDB\BSON\ObjectId($id)
   ]);
   if(!$user){ return false; }
   return $user;
  }
}

(new User)->findOne("invalidBson123")

然而,上面抛出了一个致命错误:

However, the above throws an fatal error:

未捕获的 MongoDB\Driver\Exception\InvalidArgumentException:错误解析 ObjectId 字符串

Uncaught MongoDB\Driver\Exception\InvalidArgumentException: Error parsing ObjectId string

推荐答案

http://php.net/manual/en/mongodb-bson-objectid.construct.php 内容:

id(字符串)

一个 24 个字符的十六进制字符串.如果未提供,驱动程序将生成一个 ObjectId.

A 24-character hexadecimal string. If not provided, the driver will generate an ObjectId.

所以检查可以是一个简单的正则表达式:

So the check can be a simple regex:

if(preg_match('/^[0-9a-f]{24}$/i', $id) === 1) {
.....

或者,如果您更喜欢坚持使用 ObjectId 构造函数并使其面向未来,请使用 try-catch:

Or if you prefer to stick to ObjectId constructor and make it future-proof, do it with try-catch:

try {
    $user = $this->collection->findOne([
     '_id'=> new \MongoDB\BSON\ObjectId($id)
   ]);
   if(!$user){ return false; }
   return $user;
} catch() {}

这篇关于MongoDB 检查 id 是否是有效的 BSON PHP的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆