Oci8_12.dll错误“未找到驱动程序”

时间:2018-07-19 16:30:25

标签: php oracle

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

我知道问题了,我的问题是Instantclient_12_2 ...我下载了几次,我从Environment构建路径,它不起作用。我删除了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 = new PDOConnection();

$ dbh-> select($ select_sql); $ dbh-> insert($ insert_sql);

1 个答案:

答案 0 :(得分:3)

PDOphp_oci8.12.dll无关。 OCI8是一个完全不同的扩展名。如果要在Oracle上使用PDO,则需要使用community-driven driver。上次我检查它未完成并被遗弃了,尽管情况可能已经发生了变化。请注意,您可能在php.ini中都拥有这两个名称:

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

摘自The Underground PHP and Oracle Manual(PDF):

  

Oracle对PDO_OCI没有贡献。

     

PHP社区让PDO项目陷入困境,Oracle建议使用OCI8   而是因为它具有更好的功能集,性能,可靠性和   稳定性。将PDO_OCI用于通用应用程序是   不    推荐的。但是PDO   由某些框架和更高级别的软件包(例如内容管理)使用   系统,因此您可能需要使用它。

在OCI8之上,还有third-party libraries的PDO兼容驱动程序的纯PHP实现,但是我没有任何亲身经历。