Fatal Error: "key does not exist on the server"
Fatal Error: "key does not exist on the server"
为什么 php 的 couchbase 客户端抛出致命错误
Fatal error: Uncaught exception 'CouchbaseException' with message 'The key does not exist on the server' in [CouchbaseNative]/CouchbaseBucket.class.php on line 196
此外,没有检查沙发底座上是否存在钥匙的规定。
我正在编写用于访问沙发底座的包装器。我已经完成了一半,只是为了从 couchbase 读取数据。但是我发现了这个问题;当我试图访问一个不存在的密钥时,它会抛出致命错误和代码崩溃(不会进一步执行)。
下面是代码(文件'couchbaseWrapper.php'):
<?php namespace CouchBaseWrapper;
use \CouchbaseCluster;
class CouchDB {
private $couchClient;
private $couchBucket;
private function openConection(){
try{
$this->couchClient = new CouchbaseCluster(<COUCH_HOST>);
$this->couchBucket = $this->couchClient->openBucket(<COUCH_BUCKET>);
}
catch (Exception $e) {
echo $e;
}
return true;
}
function getKey($k) {
try{
if(!$this->openConection()) { return false; }
$res = $this->couchBucket->get($k);
$data_rcvd = $res->value;
}
catch(Exception $e){
echo $e;
}
echo "Outter Code";
return $data_rcvd;
}
}
?>
要求和用法:
<?php namespace CouchBaseWrapper
ini_set("display_errors", true);
require_once('couchbaseWrapper.php');
$cb = new CouchDB();
$result = $cb->getKey("non-existing-key"); // <== Error
//$result = $cb->getKey("existing-key"); // <== Existing key No error
var_dump($result);
?>
如果现有密钥没有问题。它打印数据 received/fetched 并打印 Outter Code
。但是如果请求是针对不存在的密钥,那么它会崩溃并且不会打印 Outter Code
.
我试过exists功能。以下是代码(在文件 'couchbaseWrapper.php' 中):
public function exists($key) {
if(!$this->openConection()) { return false; }
return $this->couchBucket->get($key) == NULL
&& $this->couchBucket->getResultCode() == COUCHBASE_KEY_ENOENT;
}
没有从中得到任何东西。我正在使用 Couchbase Version 2.0.7
。非常感谢任何形式的帮助。
P.S:已阅读下面提到的解决方案; none 他们工作了
- Get function when doc id not found crashes the code
- How do I check if key exists in Couchbase?
- How to check whether a document exists or not
从技术上讲,您不会捕获 任何 异常。
此代码:
try{
// ...
}
catch(Exception $e){
echo $e;
}
永远不会捕获任何异常,因为它在 CouchBaseWrapper 下命名空间。本质上,它相当于写:
try{
// ...
}
catch(\CouchBaseWrapper\Exception $e){
echo $e;
}
我假设不存在。
虽然这会起作用:
try{
// ...
}
catch(\Exception $e){
echo $e;
}
(注意开头的 \
,它会将您带到定义异常的顶级命名空间)。
那应该开始捕获并回显异常...
然后我猜你想捕获 CouchbaseException
(同样,使用正确的命名空间前缀),我猜这是抛出的 - 设计 - 当键不存在时......或者你可以在获取其值之前检查密钥是否存在(如果不存在,则 return 可能为 null)。
还要注意,如果你想捕获多个异常类型,你应该总是捕获 \Exception 最后,因为它们都继承自它,它会超过捕获继承的异常类型。
最后说明:如果您不想为所有异常添加前缀,您可以 "import" 使用例如use \Exception;
就像你对 CouchbaseCluster
所做的一样
为什么 php 的 couchbase 客户端抛出致命错误
Fatal error: Uncaught exception 'CouchbaseException' with message 'The key does not exist on the server' in [CouchbaseNative]/CouchbaseBucket.class.php on line 196
此外,没有检查沙发底座上是否存在钥匙的规定。
我正在编写用于访问沙发底座的包装器。我已经完成了一半,只是为了从 couchbase 读取数据。但是我发现了这个问题;当我试图访问一个不存在的密钥时,它会抛出致命错误和代码崩溃(不会进一步执行)。
下面是代码(文件'couchbaseWrapper.php'):
<?php namespace CouchBaseWrapper;
use \CouchbaseCluster;
class CouchDB {
private $couchClient;
private $couchBucket;
private function openConection(){
try{
$this->couchClient = new CouchbaseCluster(<COUCH_HOST>);
$this->couchBucket = $this->couchClient->openBucket(<COUCH_BUCKET>);
}
catch (Exception $e) {
echo $e;
}
return true;
}
function getKey($k) {
try{
if(!$this->openConection()) { return false; }
$res = $this->couchBucket->get($k);
$data_rcvd = $res->value;
}
catch(Exception $e){
echo $e;
}
echo "Outter Code";
return $data_rcvd;
}
}
?>
要求和用法:
<?php namespace CouchBaseWrapper
ini_set("display_errors", true);
require_once('couchbaseWrapper.php');
$cb = new CouchDB();
$result = $cb->getKey("non-existing-key"); // <== Error
//$result = $cb->getKey("existing-key"); // <== Existing key No error
var_dump($result);
?>
如果现有密钥没有问题。它打印数据 received/fetched 并打印 Outter Code
。但是如果请求是针对不存在的密钥,那么它会崩溃并且不会打印 Outter Code
.
我试过exists功能。以下是代码(在文件 'couchbaseWrapper.php' 中):
public function exists($key) {
if(!$this->openConection()) { return false; }
return $this->couchBucket->get($key) == NULL
&& $this->couchBucket->getResultCode() == COUCHBASE_KEY_ENOENT;
}
没有从中得到任何东西。我正在使用 Couchbase Version 2.0.7
。非常感谢任何形式的帮助。
P.S:已阅读下面提到的解决方案; none 他们工作了
- Get function when doc id not found crashes the code
- How do I check if key exists in Couchbase?
- How to check whether a document exists or not
从技术上讲,您不会捕获 任何 异常。
此代码:
try{
// ...
}
catch(Exception $e){
echo $e;
}
永远不会捕获任何异常,因为它在 CouchBaseWrapper 下命名空间。本质上,它相当于写:
try{
// ...
}
catch(\CouchBaseWrapper\Exception $e){
echo $e;
}
我假设不存在。
虽然这会起作用:
try{
// ...
}
catch(\Exception $e){
echo $e;
}
(注意开头的 \
,它会将您带到定义异常的顶级命名空间)。
那应该开始捕获并回显异常...
然后我猜你想捕获 CouchbaseException
(同样,使用正确的命名空间前缀),我猜这是抛出的 - 设计 - 当键不存在时......或者你可以在获取其值之前检查密钥是否存在(如果不存在,则 return 可能为 null)。
还要注意,如果你想捕获多个异常类型,你应该总是捕获 \Exception 最后,因为它们都继承自它,它会超过捕获继承的异常类型。
最后说明:如果您不想为所有异常添加前缀,您可以 "import" 使用例如use \Exception;
就像你对 CouchbaseCluster