phpinfo()和pecl搜索mongo显示了不同版本的mongodb

时间:2018-05-31 10:39:30

标签: php mongodb

我在本地电脑上安装 MongoDB ,请参阅以下网站

http://linuxforever.info/2017/04/13/how-to-install-mongodb-3-4-in-linux-mint-18-ubuntu-16-04/

我做了一个MongoDB的简单演示,当我运行项目时,我得到了一个像

这样的错误
  

致命错误:调用未定义的方法   的MongoDB \驱动\ WriteConcern :: ISDEFAULT()

我已经检查了两侧的MongoDB版本(phpinfo.php和终端),它们有所不同。

终端=> private void Hyperlink_RequestNavigate(object sender, RequestNavigateEventArgs e) { Process.Start(e.Uri.AbsoluteUri); e.Handled = true; } private void component_ComboBox_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e) { string selectedComponent = box_ComboBox.SelectedItem.ToString(); LinkToQuery.Text = string.Format("Selected: {0} ", box_ComboBox.SelectedItem.ToString()); URLQuery.NavigateUri = new System.Uri(LinkQuery[selectedComponent],System.UriKind.Absolute); } 命令

pecl search mongo

Phpinfo =>

Matched packages, channel pecl.php.net: Package Stable/(Latest) Local mongo 1.6.16 (stable) MongoDB database driver mongodb 1.4.3 (stable) 1.4.3 MongoDB driver for PHP

请帮我解决这个问题。

提前致谢

5 个答案:

答案 0 :(得分:0)

尝试使用以下命令进行安装:

  pecl install mongodb 

在末尾为php.ini文件添加扩展

extension = mongodb.so

重新安装你的php和apache服务器

使用composer加载mongo db软件包

composer require mongodb/mongodb 

在上述过程

之后运行以下代码
    <?php  
require 'vendor/autoload.php';  
// Creating Connection  
$con = new MongoDB\Client("mongodb://localhost:27017");  
// Creating Database  
$db = $con->yourdbname;  
// Creating Document  
$collection = $db->employee;  
// Insering Record  
$collection->insertOne( [ 'name' =>'Peter', 'email' =>'peter@abc.com' ] );  
// Fetching Record  
$record = $collection->find( [ 'name' =>'Peter'] );  
foreach ($record as $employe) {  
echo $employe['name'], ': ', $employe['email']."<br>";  
} 

答案 1 :(得分:0)

ext-mongodb 1.3

中引入了

MongoDB\Driver\WriteConcern::isDefault()

您共享MongoDB extension version 1.2.9的输出时已phpinfo()

您需要更新扩展程序。

<强>更新

您可以从以下链接下载最新的扩展程序

https://pecl.php.net/package/mongodb

Linux Mint 是基于Debian的,您可以在其上安装以下软件包进行升级 https://ubuntu.pkgs.org/18.04/ubuntu-universe-amd64/php-mongodb_1.3.4-1build1_amd64.deb.html

答案 2 :(得分:0)

<?php
require_once './vendor/autoload.php';
$con = new MongoDB\Client("mongodb://localhost:27017");

// Creating Database
$db = $con->yourdbname;
// Creating Document
$collection = $db->employee;
// Insering Record
$collection->insertOne( [ 'name' =>'Peter', 'email' =>'peter@abc.com'] );
// Fetching Record
$record = $collection->find( [ 'name' =>'Peter'] );
foreach ($record as $employe) {
   echo $employe['name'], ': ', $employe['email']."<br>";
}

?>

答案 3 :(得分:0)

enter image description here

请查看此屏幕

答案 4 :(得分:0)

我有一个类似的问题,几个小时后我解决了。希望这可以节省其他人的时间。我在macOS Sierra上。

背景

我运行了sudo pecl install mongodb以更新mongo驱动程序。我不需要将扩展​​名添加到php.ini中,因为它是旧版本中的扩展名。

PHP拒绝识别更新的mongo驱动程序。我还会收到致命错误:尝试执行查询时,调用undefined ... isDefault()错误。

修复

步骤1

找到 new mongodb驱动程序扩展的完整路径。

有几种方法可以做到这一点。

更新驱动程序(即sudo pecl install mongodb)将输出以下内容:

  

安装   '/usr/local/Cellar/php71/7.1.2_13/lib/php/extensions/no-debug-non-zts-20160303/mongodb.so'

或者,您也可以搜索它:在Mac或Linux上为find / -name "mongodb.so"

步骤2

找到您的php.ini文件。 同样,有几种不同的方法。 在php中回显phpinfo()会告诉您它在哪里。 或者,您可以运行find / -name php.ini

我的位于/usr/local/etc/php/7.1/php.ini

步骤3

编辑您的php.ini文件,然后替换

  

extension =“ mongodb.so”

以及新扩展名的路径:

  

extension =“ / usr / local / Cellar / php71 / 7.1.2_13 / lib / php / extensions / no-debug-non-zts-20160303 / mongodb.so”

步骤4

保存并重试查询。

更多信息

就我而言,php.ini实际上包含/usr/local/etc/php/7.1/conf.d/ext-mongodb.ini中的mongo扩展名,因此这是我编辑的文件。但是,我成功地测试了这两种解决方案。