通过PHP连接到Sharepoint数据库

时间:2011-10-16 05:56:23

标签: php database sharepoint connection

我不熟悉Sharepoint。我想使用PHP查询或读取Sharepoint数据库。

我有办法做到吗?

先谢谢你。非常感谢任何帮助。

6 个答案:

答案 0 :(得分:6)

我强烈建议使用SharePoint WebServices ...除非有正当理由(即性能),否则我不会触及数据库。 Quote from this answer:

  
      
  1. 您同意的EULA完全不支持   安装了SharePoint。
  2.   
  3. 您的查询无法保证可以使用   自Microsoft以来将任何修补程序或Service Pack应用于SharePoint   可以随时更改数据库架构。
  4.   
  5. 直接查询数据库会给服务器带来额外的负担,从而提高性能   的问题。
  6.   
  7. 针对数据库的直接SELECT语句采用共享   读取默认事务级别的锁定,以便进行自定义查询   可能会导致死锁,从而导致稳定性问题。
  8.   
  9. 你的习惯   查询可能会导致检索到错误的数据。
  10.   

如果您想了解更多关于不应该查询数据库的原因,here是一篇非常好的文章

Query A SharePoint WebService with PHP

答案 1 :(得分:5)

您应该考虑使用Camelot PHP Tools for SharePoint,它是专门为SharePoint列表构建的Camelot XML格式的详细文档php框架。

文档和下载

您还需要Camelot SharePoint集成工具包,http://camelottoolkit.codeplex.com/和Camelot .NET Connector(http://www.bendsoft.com/net-sharepoint-connector/)。

在可以访问SharePoint服务器的盒子上安装Connector,这可能是与SharePoint服务器相同的服务器,然后将Integration Toolkit安装在与Connector相同的服务器上。设置集成工具包中包含的集成服务(按照说明进行操作),然后就完成了。网站上也有一些说明视频。

使用它的好处是,您可以使用常见的SQL查询通过API与SharePoint列表和库进行通信,从不使用底层的mssql数据库。

使用SQL从SharePoint中选择数据

$SharePointQuery = new SharePointQuery(array(
    'sql' => "SELECT * FROM Tasks WHERE ID > 10",
    'connection_name' => 'SharePointConnection1'
));

按列表和视图名称从SharePoint中选择数据

$SharePointQuery = new SharePointQuery(
    array(
        'listName' => 'Tasks',
        'viewName' => 'All Tasks',
        'includeAttachements' => false,
        'connection_name' => 'SharePointConnection1',
        'columns' => ''
    )
);

使用SQL和SharePointNonQuery在SharePoint中插入数据

$SharePointNonQuery = new SharePointNonQuery(array(
    'sql' => "INSERT INTO Tasks (Title,AssignedTo,Status,Priority,DueDate,PercentComplete) VALUES ('Test task from PHP',1,'In Progress','(1) High', '".  date('Y-m-d H:i:s') ."',0.95)",
    'method' => 'ExecuteNonQuery',
    'connection_name' => 'SharePointConnection1'
));

还有一些存储过程可以帮助您完成某些操作,例如文档库的高级处理

下载文件

$download = new CamelotDownloadFile(array(
    "file" => $_GET["file"],
    "listName" => 'Shared Documents',
    "connection_name" => 'SharePointConnection1'
));

$download->download_file();

上传文件

$args = array(  
    "file" => $_FILES,
    "listName" => 'Shared Documents',
    "folder" => 'Folder/',
    "connection_name" => 'SharePointConnection2'
); 

$UploadFile = new CamelotUploadFile($args);

答案 2 :(得分:1)

它只是一个数据库 - 只要您拥有服务器/数据库的名称和适当的权限,就没有任何东西可以阻止您。 然而 - 架构非常复杂,因此从中找出你需要的东西可能会很棘手 - 取决于你真正想做什么,你可能最好使用Web服务来访问Sharepoint OM

如果您想直接到数据库 - 请不要。没有实际的方法可以做到这一点,而不会让自己陷入更深层次的麻烦,支持将无法帮助你。

答案 3 :(得分:0)

Sharepoint数据库只不过是MS SQL Server。如果您知道服务器名称,则可以连接到它,就像从PHP连接到MSSQL服务器一样。

答案 4 :(得分:0)

从PHP获取SharePoint数据的最简单方法可能是REST API

答案 5 :(得分:0)

我在API中使用它将我的PHP Web应用程序与SharePoint连接并将数据从PHP传输到SharePoint,它对我来说是100%的工作:

使用说明

<强>安装

下载要与之交互的SharePoint列表的WSDL文件。这通常可以在sharepoint.url/subsite/_vti_bin/Lists.asmx?WSDL

获得

如果您正在使用作曲家,只需将thybag / php-sharepoint-lists-api添加到您的composer.json并运行作曲家。

    {
    "require": {
        "thybag/php-sharepoint-lists-api": "dev-master"
    }
    }

如果您不使用composer,则可以手动下载SharePoint API文件的副本,并在项目中包含顶级“SharePointAPI.php”类。

创建SharePointAPI对象

要使用PHP SharePoint Lists API,您需要一个具有所需列表权限的有效用户/服务帐户。

对于大多数SharePoint安装,您可以使用以下方法创建API的新实例:

    use Thybag\SharePointAPI;
            $sp = new SharePointAPI('', '', '');

如果您的安装需要NTLM身份验证,则可以使用:

    use Thybag\SharePointAPI;
    $sp = new SharePointAPI('', '', '', 'NTLM');

SharePoint Online用户必须使用:

    use Thybag\SharePointAPI;
    $sp = new SharePointAPI('', '', '', 'SPONLINE');

默认情况下,所有方法都返回一个数组。 SetReturnType可用于指定结果应作为对象返回。

从列表中读取。

要从列表中返回所有项目,请使用

    $sp->read('');
or
    $sp->query('')->get();

要仅返回列表中的前10个项目,请使用:

    $sp->read('', 10);

    $sp->query('')->limit(10)->get();

要返回姓氏为史密斯使用的列表中的所有项目:

    $sp->read('', NULL, array('surname'=>'smith'));

    $sp->query('')->where('surname', '=', 'smith')->get();

查询列表

当您需要指定要使用read方法轻松定义的复杂查询时,可以使用查询方法。查询是使用许多(希望有表现力的)伪SQL方法构建的。

例如,如果您想查询宠物清单并返回所有5岁以下的狗(按年龄排序),您可以使用。


    $sp->query('list of pets')->where('type','=','dog')->and_where('age','sort('age','ASC')->get();

如果您想获得前10只宠物猫或仓鼠,您可以使用:

    $sp->query('list of pets')->where('type','=','cat')->or_where('type','=','hamster')->limit(10)->get();

如果您需要返回5个项目,但包括列表中包含的所有字段,则可以使用。 (将false传递给all_fields以包含隐藏字段)。

    $sp->query('list of pets')->all_fields()->get();

如果您有一组想要运行的特定高级查询的CAML,可以使用以下命令将其传递给查询对象:

    $sp->query('list of pets')->raw_where('Hello World')->limit(10)->get();

添加到列表

要将新项目添加到列表,您可以使用“write”,“add”或“insert”方法(所有功能相同)。在列表中创建包含姓名,姓氏,年龄和电话的新记录可能如下所示:

    $sp->write('', array('forename'=>'Bob','surname' =>'Smith', 'age'=>40, 'phone'=>'(00000) 000000' ));

您还可以使用以下命令一起运行多个写入操作:

    $sp->writeMultiple('', array(array('forename' => 'James'),array('forename' => 'Steve')));

编辑行

要编辑行,您需要拥有其ID。假设上面的行有ID 5,我们可以将Bob的名字改为James:

    $sp->update('','5', array('forename'=>'James'));/code>

As with the write method you can also run multiple update operations together by using:

    $sp->updateMultiple('', array(    array('ID'=>5,'job'=>'Intern'),array('ID'=>6,'job'=>'Intern')));

When using updateMultiple every item MUST have an ID.

Deleting Rows

In order to delete a row, an ID, as well as list name, is required. To remove the record for James with the ID 5 you would use:

    $sp->delete('', '5');

If you wished to delete a number of records at once, an array of ID's can also be passed to the delete multiple methods

    $sp->deleteMultiple('', array('6','7','8'));

Helper methods

The PHP SharePoint API contains a number of helper methods to make it easier to ensure certain values are in the correct format for some of SharePoint special data types.

dateTime The DateTime method can either be passed a text-based date

    $date = \Thybag\SharepointApi::dateTime("2012-12-21");

Or a unix timestamp

    $date = \Thybag\SharepointApi::dateTime(time(), true);

Troubleshooting

Unable to find the wrapper "https"

If you are getting this error it normally means that php_openssl (needed to curl https URLs) is not enabled on your web server. With many local web servers (such as XAMPP) you can simply open your php.ini file and uncomment the php_openssl line (ie. remove the; before it).

Note: If you are using SharePoint Online and having SSL errors, please pull the latest version which has changed from SSL v3 to TLS for SharePoint online connections.

Add this line to your composer.json file

    $sp->updateMultiple('', array(    array('ID'=>5,'job'=>'Intern'),array('ID'=>6,'job'=>'Intern')));

您可以使用上述SharePoint API执行CRUD(创建/读取/更新/删除)操作。

参考网址链接:https://github.com/thybag/PHP-SharePoint-Lists-API