首页 > 解决方案 > Oci8_12.dll 错误“未找到驱动程序”

问题描述

我在将 Oracle (v 12c) 数据库与 php (pdo) 连接时遇到严重问题。我有 PHP 7.2 版本(x64)的 IIS。它运行 .php 扩展名,没有问题。当我从我的班级创建实例时,我收到“未找到驱动程序”错误。我想我的问题不是我的代码,但是如果您想查看,我的代码将在我的帖子下方。

我知道问题,我的问题是instantclient_12_2 ...我下载了几次,我从环境构建路径,它不起作用。我删除了 PHP 7.2 (x64) 并安装了 PHP 7.2 (x86),我下载了 instantclient_12_2(x32) 然后我再次构建路径......但我从未成功。

是的,我已将 php_oci8.12.dll 添加到我的 php.ini 文件中,是的,我重新启动了我的 IIS 几次,但它从来没有工作过!我总是得到同样的错误。

PHP 代码

class PDOConnection {

private $dbh;

function __construct() {
    try {

        $server         = "193.255.1.98"; //remote
        $db_username    = "SYSTEM";
        $db_password    = "Oracle_1";
        $service_name   = "ORCL";
        $sid            = "ORCL";
        $port           = 1521;
        $dbtns          = "(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = $server)(PORT = $port)) (CONNECT_DATA = (SERVICE_NAME = $service_name) (SID = $sid)))";

        //$this->dbh = new PDO("mysql:host=".$server.";dbname=".dbname, $db_username, $db_password);

        $this->dbh = new PDO("oci:dbname=" . $dbtns . ";charset=utf8", $db_username, $db_password, array(
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_EMULATE_PREPARES => false,
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC));

    } catch (PDOException $e) {
        echo $e->getMessage();
    }
}

public function select($sql) {
    $sql_stmt = $this->dbh->prepare($sql);
    $sql_stmt->execute();
    $result = $sql_stmt->fetchAll(PDO::FETCH_ASSOC);
    return $result;
}

public function insert($sql) {
    $sql_stmt = $this->dbh->prepare($sql);
    try {
        $result = $sql_stmt->execute();
    } catch (PDOException $e) {
        trigger_error('Error occured while trying to insert into the DB:' . $e->getMessage(), E_USER_ERROR);
    }
    if ($result) {
        return $sql_stmt->rowCount();
    }
}

function __destruct() {
    $this->dbh = NULL;
}

}

$dbh = 新 PDOConnection();

$dbh->select($select_sql); $dbh->插入($insert_sql);

标签: phporacle

解决方案


PDOphp_oci8.12.dll. OCI8是一个完全不同的扩展。如果您想在 Oracle 中使用 PDO,您需要使用社区驱动的驱动程序。上次我检查它是未完成和放弃虽然事情可能已经改变。请注意,您可能同时拥有php.ini

;extension=oci8_12c  ; Use with Oracle Database 12c Instant Client
;extension=pdo_oci

来自Underground PHP 和 Oracle 手册(PDF):

Oracle 不参与 PDO_OCI。

PHP 社区已经让 PDO 项目萎靡不振,Oracle 建议尽可能使用 OCI8,因为它具有更好的功能集、性能、可靠性和稳定性。不建议将 PDO_OCI 用于通用应用程序。但是,某些框架和更高级别的包(例如内容管理系统)使用 PDO,因此您可能需要使用它。

还有一些第三方库在 OCI8 之上具有 PDO 兼容驱动程序的纯 PHP 实现,但我没有任何第一手经验。


推荐阅读