php - 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);
解决方案
PDO与php_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 实现,但我没有任何第一手经验。
推荐阅读
- javascript - 遍历 JSON 并呈现表格元素不会产生任何结果
- java - 二维数组:在二维数组中追加值
- html - 为什么不在 laravel 5.6 中显示验证错误消息
- java - 在 Java 11 中的打印机上打印文本、图像或报告时遇到问题
- node.js - Uncaught (in promise) TypeError: Cannot read property 'red' of null
- laravel - Laravel 5.8 验证 - 始终遵守任何规则
- xcode - 如何重新生成“不要问我”警告警报
- java - 字符串的 Java 集合排序方法不适用于区分大小写和特殊字符
- java - 如何在 Spring 中异步运行函数
- sql - 发生错误时从选择语句继续插入