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

mi7gmzs6  于 2023-06-28  发布在  PHP
关注(0)|答案(1)|浏览(93)

我有严重的问题连接Oracle(v 12 c)数据库与php(pdo).我有IIS与PHP 7.2版本(x64)。它运行.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 = new PDOConnection();
$dbh->select($select_sql);$dbh->insert($insert_sql);

but5z9lq

but5z9lq1#

PDOphp_oci8.12.dll无关. OCI8是一个完全不同的扩展。请注意,无论是否启用,您都可能在php.ini中拥有这两个:

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

在撰写本文时,OCI8扩展和用于PDO的Oracle驱动程序都是由Oracle公司(source)正式维护的,因此使用任何一个都可以。在过去,PDO驱动程序是社区驱动的,它是未完成的和被遗弃的。来自The Underground PHP and Oracle Manual(PDF from 2012):
Oracle不提供PDO_OCI。
PHP社区让PDO项目萎靡不振,Oracle建议尽可能使用OCI8,因为它具有更好的功能集,性能,可靠性和稳定性。不建议将PDO_OCI用于通用应用程序。然而,PDO被一些框架和更高级别的软件包使用,比如内容管理系统,所以你可能需要使用它。
在OCI8之上还有third-party libraries,它带有PDO兼容驱动程序的纯PHP实现,但我没有任何第一手经验。

相关问题