在Yii2中执行此代码的正确方法是什么。我得到oci_new_cursor() expects parameter 1 to be resource, object given
。
// get DB instance
$connection = Yii::$app->db;
// set cursor
$refcur = oci_new_cursor($connection);
$q = "BEGIN :RC := REPORT_CARDS.GET_DATA(:I_YEAR); END;";
...
答案 0 :(得分:1)
要记住一些重要事实:
您可以使用\Yii::$app->db->pdo
获取Yii使用的PDO实例,但是根据上面的第2点,这对您尝试在示例中使用的OCI8函数没有帮助。根据第3点,将资源用于学习使用PDO来代替OCI8似乎并不是一个好主意。
尽管如此,如果你想为那些仍然可以解决的问题提供另一种“Yii方式”,你可以试着看看yii\db\Command到底有多远。您在评论中引用的oci_bind_by_name()
的PDO副本PDOStatement::bindParam基本上由yii\db\Command::bindParam代理。因此,定制SQL查询的一个非常基本的用法示例就像是
// $var1 and $var2 somewhere
$command = \Yii::$app->db->createCommand('some query with :bound :values');
$command->bindParam(':bound', $var1, \PDO::PARAM_STR);
$command->bindParam(':values', $var2, \PDO::PARAM_STR || \PDO::PARAM_INPUT_OUTPUT);
$command->execute();
我无法用你的具体例子进行测试,根据我所读到的内容,如果你自己尝试,我不能保证成功,但我祝你好运。如果它没有成功,那么我看不到一个简单的方法;您只需使用自己的单独连接,手动初始化为oci_connect
或其他任何连接,然后通过OCI8照常操作。