2017-06-01 80 views
0

执行Oracle过程我都在打电话尔康框架Oracle过程。有谁知道如何在phalcon模型中调用它。如何尔康

我都试过,但它不工作。

请帮忙!

回答

1

有执行此任务的两种方式和他们都不是尔康相关。

要调用存储过程,您将需要使用PDO预处理语句。由于Phalcon实施PDO,您将可以使用db服务而不是模型来完成此操作。如何做到这一点的信息是在这里:

http://php.net/manual/en/pdo.prepared-statements.php

这也取决于你是否已经安装了oci PDO相关的扩展。

第二种方法是使用Oracle提供的方法,如:

oci_connect 
oci_parse (sql statement here) 
oci_bind_by_name(bind each parameter to a php variable) 
oci_execute 
oci_free_statement 

你可能会创建自己的模式,将封装以上,并调用相关的存储过程。在接收到数据后,您可以实例化一个结果集对象并用返回的数据填充它。

这将提供正常的结果集回到您的应用程序,但您将无法使用它做很多,因为您依赖存储过程而不是直接模型 - >表关系。

对于为什么应该或不应该使用存储过程,以及为什么应该使用或不应该使用Oracle,有很多讨论,有时是激烈的讨论。有一点很清楚,存储过程的所有好处确实给开发人员提供了一定程度的复杂性和限制。在甲骨文公司和臭名昭着的游标中,这些限制更为尖锐。

要注意的最后一件事是,如果您创建自己的模型(与Phalcon无关),则可以将存储过程变量作为每个模型中的属性。这样,你就可以将它们设置,使您的存储过程调用(见上oci_*功能),在该模型中说call()功能,然后从存储过程返回的变量再次更新对象的属性。这model将能够与基本的CRUD操作为您服务通过调用相关的存储过程,这将允许该CRUD,但暴露的是有点友好的方法对你说insert()get()delete()

+1

谢谢,这样一来它的工作! $ dbh = $ this-> getDi() - > getShared('dataSource'); //与输出PARAM $语句= $ dbh->制备( “CALL PROCEDURE_NAME(:RESULT)”);$ stmt-> bindParam(1,$ value,\ PDO :: PARAM_STR | \ PDO :: PARAM_INPUT_OUTPUT,4000); $ stmt-> execute(); –