我有严重的问题连接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);
1条答案
按热度按时间but5z9lq1#
PDO与
php_oci8.12.dll
无关. OCI8是一个完全不同的扩展。请注意,无论是否启用,您都可能在php.ini
中拥有这两个:在撰写本文时,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实现,但我没有任何第一手经验。