我尝试在我的一个Web服务器上执行PDO OCI SQL查询时收到以下错误:
SQLSTATE[HY000]: OCISessionBegin: ORA-21561: OID generation failed
Run Code Online (Sandbox Code Playgroud)
我已经确认可以从机器访问Oracle服务器并且网络配置看起来很好.谷歌的回报非常少,而且效果不是很有帮助.
有没有其他人遇到这个,或有任何关于如何解决的建议?
我有一个简单的PHP脚本:
<?php
$db_user = 'myusername';
$db_pass = 'mypassword';
$db_sid = 'mysid';
$conn = oci_connect( $db_user, $db_pass, $db_sid );
?>
Run Code Online (Sandbox Code Playgroud)
当我运行它(从浏览器或从命令行),我得到错误:
Call to undefined function oci_connect
Run Code Online (Sandbox Code Playgroud)
我正在使用PHP 5.6.6,它已经附带了php_oci8_12c.dll.
我有extension=php_oci8_12c.dll我的php.ini
我已经安装了即时客户端(12.1) - 尝试过32位版本和64位版本
我有ORACLE_HOME和TNS_ADMIN环境变量指向即时客户端文件夹(C:\ instantclient_12_1).
我的路径中也有C:\ instantclient_12_1
我在同一个文件夹中有一个tnsnames.ora,其中包含相关条目:
MYSID =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = myhost.net)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = MYSERVICE)
)
)
Run Code Online (Sandbox Code Playgroud)
我还从http://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/index.html下载了SQLDeveloper .
SQLDeveloper工作,识别上面提到的tnsnames.ora并连接并成功运行我的php脚本试图访问的同一数据库上的查询.
几天后我花了几个小时尝试不同的事情无济于事.
我正在使用:
php 5.6.6
windows 8.1
IIS (so no answers involving apache please)
cmd …Run Code Online (Sandbox Code Playgroud) OTN线程:Oracle是否为OCCI/OCI提供公共符号文件(PDB)?
在Windows(使用Visual Studio或WinDBG)下调试使用OC [C]的应用程序时,如果有Oracle OCI/OCCI库的符号文件(PDB文件),通常会很方便.(公共符号文件,就像Microsoft为所有系统库提供的那样)
Oracle是否提供这些?
注意:这些公共符号文件对于Oracle库特别受欢迎,因为我们确实有一些崩溃,其中调用堆栈位于oci/occi库中,并且看起来似乎用于生成这些DLL的(可能是优化)设置有效地防止Visual Studio在这些库中显示用户转储的任何可用调用堆栈.
作为对前一段的进一步澄清:这并不意味着OCCI库中的崩溃.它只是意味着如果一个线程恰好位于OCCI调用内并且生成了用户转储(无论出于何种原因 - 可以根据需要为任何正在运行的应用程序生成),该线程的调用堆栈(至少是半)搞砸了.因此,公共符号文件将非常方便.
我有以下内容:
$ARTIFACT_NAME = $_POST['ArtifactName'];
$ARTIFACT_TYPE = $_POST['ArtifactType'];
$ARTIFACT_LOCATION = $_POST['ArtifactLocation'];
$ARTIFACT_DOMAIN = $_POST['ArtifactDomain'];
$ARTIFACT_AUTHOR = $_POST['ArtifactAuthor'];
$ARTIFACT_LABEL = 'DB_'.$ARTIFACT_LOCATION.'_'.$ARTIFACT_DOMAIN.'_'.$ARTIFACT_NAME;
$AUDIT_CONSTRAINTS = $_POST['AuditConstraints'];
$SECURITY_CONSTRAINTS = $_POST['SecurityConstraints'];
$REGISTERED_EMAIL = $_SERVER['HTTP_REMOTE_USER'];
$REGISTERED_TIMESTAMP = "to_date('15-08-2011 14:32:37', 'DD-MM-YYYY HH24:MI:SS')";
$query = "INSERT INTO ".$db_schema.".ARTIFACTS (ARTIFACT_ID, ARTIFACT_NAME, ARTIFACT_TYPE, ARTIFACT_LOCATION, ARTIFACT_DOMAIN, ARTIFACT_AUTHOR, ARTIFACT_LABEL, AUDIT_CONSTRAINTS, SECURITY_CONSTRAINTS, REGISTERED_EMAIL, REGISTERED_TIMESTAMP)
VALUES (:bind1, :bind2, :bind3, :bind4, :bind5, :bind6, :bind7, :bind8, :bind9, :bind10, :bind11)";
$statement = oci_parse($connection, $query);
oci_bind_by_name($statement, ":bind1", $ARTIFACT_ID);
oci_bind_by_name($statement, ":bind2", $ARTIFACT_NAME);
oci_bind_by_name($statement, ":bind3", $ARTIFACT_TYPE);
oci_bind_by_name($statement, ":bind4", $ARTIFACT_LOCATION);
oci_bind_by_name($statement, ":bind5", …Run Code Online (Sandbox Code Playgroud) 我有下一行未注释(在我的php.ini中):
extension=php_oracle.dll
extension=php_oci8.dll
Run Code Online (Sandbox Code Playgroud)
我下载了这个文件instantclient-basiclite-nt-11.2.0.2.0.zip并解压缩并将其放在驱动器D上...
我使用的是Windows XP
我像这样设置环境变量:
LD_LIBRARY_PATH C:\instantclient_11_2:$LD_LIBRARY_PATH
ORACLE_HOME C:\instantclient_11_2
Run Code Online (Sandbox Code Playgroud)
但是当我执行oci_connect()函数时,我看到了这个错误:
致命错误:在...中调用未定义的函数oci_connect()
我在erroeLog文件中发现了这个警告:
[29-Dec-2011 00:36:39] PHP警告:PHP启动:无法加载动态库'c:\ php\ext\php_oci8.dll' - 找不到指定的模块.在第0行的未知中
[29-Dec-2011 00:36:39] PHP警告:PHP启动:无法加载动态库'c:\ php\ext\php_oracle.dll' - 找不到指定的模块.
我很难连接到Oracle DB,已经阅读了很多东西,但没有结果的帮助.
我有远程Oracle DB,我使用DBVisualizer设置连接连接到它,如下所示:
DB Type : Oracle
Driver (jdbc) : Oracle thin
Database URL: jdbc:oracle:thin:@10.10.100.10:1521/VVV.LOCALDOMAIN
UserIdf: SomeUser
Pass: SomePass
Run Code Online (Sandbox Code Playgroud)
连接正常.
我在Ruby中做的是:
require 'oci8'
require 'dbi'
...
conn = OCI8.new('SomeUser','SomePass','//10.10.100.10:1521/VVV.LOCALDOMAIN')
...
Run Code Online (Sandbox Code Playgroud)
我得到的是:
ORA-12545: Connect failed because target host or object does not exist
oci8.c:360:in oci8lib.so
Run Code Online (Sandbox Code Playgroud) 我需要在我的PHP代码中连接到Oracle DB.
我使用的是Windows Server 2012,带有PHP Manager的IIS 8和PHP 5.5.11版.我打开IIS PHP管理器,然后转到PHP Extensions,然后我启用了"php_oci8.dll"扩展.
extension=php_oci8.dll
;extension=php_oci8_11g.dll
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试连接到Oracle DB时,我收到以下PHP错误:
PHP Fatal error: Call to undefined function oci_connect()
Run Code Online (Sandbox Code Playgroud)
我刚刚使用IIS管理器重新启动IIS,但没有完成计算机重启.我需要重启吗?
我是否还需要下载"instantclient-basic-windows.x64-12.1.0.1.0.zip"?我试图提取它并将目录放在"Path"环境变量中,但仍然无法正常工作.
PHPInfo的配置命令:
cscript /nologo configure.js "--enable-snapshot-build" "--enable-debug-pack"
"--disable-zts" "--disable-isapi" "--disable-nsapi" "--without-mssql"
"--without-pdo-mssql" "--without-pi3web" "--with-pdo-oci=C:\php-sdk\oracle\x86\instantclient10\sdk,shared"
"--with-oci8=C:\php-sdk\oracle\x86\instantclient10\sdk,shared"
"--with-oci8-11g=C:\php-sdk\oracle\x86\instantclient11\sdk,shared"
"--with-enchant=shared" "--enable-object-out-dir=../obj/"
"--enable-com-dotnet=shared" "--with-mcrypt=static"
"--disable-static-analyze" "--with-pgo"
Run Code Online (Sandbox Code Playgroud)
非常感谢你提前.
我有一台计算机充当Oracle数据库11g企业版的服务器.我想使用另一台计算机,一台运行Windows XP SP3的PC作为此服务器的客户端.
所以我决定在客户端PC上安装Oracle Instant Client 11.2.0.4.0.我从Oracle OTN下载了压缩文件并将其解压缩到文件夹中c:\oracle\instantclient11.2.0.4.0.然后我将此路径添加到系统路径变量,并创建了另一个名为TNS_ADMIN变量名的系统变量,其中Oracle Instant Client具有相同的路径c:\oracle\instantclient11.2.0.4.0.
最后我从服务器pc复制了tnsnames.ora.
所以我想尝试从cmd.exe运行sqlplus,但错误是:
The procedure entry point OCIBindByName2 could not be located in the dynamic link library OCI.dll .
Run Code Online (Sandbox Code Playgroud)
有谁能够帮我?
我正在尝试使用 PHP OCI Oracle 函数做两件事:
我能够使用 Oracle 提供的 SQL Developer 软件成功地做到这一点。我的查询非常基本,如下所示:
BEGIN
PKG_KTY_SEARCH.PR_PRICE_LIST();
END;
/
SELECT * FROM kty_web.KTY_PROD_PRICE_TEMP;
Run Code Online (Sandbox Code Playgroud)
上面的代码运行良好,我在 SQL Developer 中得到了完整的结果表。
我正在尝试使用 OCI 在 PHP 中做同样的事情。我的代码可以在下面看到:
<?php
// Load up the system.
require('../../system/init.php');
global $config;
$oracleDb = oci_new_connect($config['oracleDb']['username'], $config['oracleDb']['password'], $config['oracleDb']['connectionString']);
$firstStid = oci_parse($oracleDb, "BEGIN PKG_KTY_SEARCH.PR_PRICE_LIST(); END;");
oci_execute($firstStid);
$secondStid = oci_parse($oracleDb, "SELECT * FROM kty_web.KTY_PROD_PRICE_TEMP");
oci_execute($secondStid);
oci_fetch_all($secondStid, $result);
echo json_encode($result);
echo "<br />Import complete!";
?>
Run Code Online (Sandbox Code Playgroud)
然而,这不会返回错误,并且返回一个空的结果集。我不明白为什么。有人在这里看到我遗漏的任何明显的东西吗?
PHP 返回的结果集
{"PRODUCT_ID":[],"CUST_ROLE":[],"MIN_QTY":[],"MAX_QTY":[],"PRICE":[]}
Run Code Online (Sandbox Code Playgroud)
我的连接字符串如下:
$config['oracleDb']['connectionString'] = "(DESCRIPTION=(ADDRESS_LIST = (ADDRESS …Run Code Online (Sandbox Code Playgroud)