我安装了XAMPP for Windows 1.7.3.
我正在使用Zend Framework,需要使用pdo_oci8扩展.我已启用扩展 - 但现在得到错误,它无法找到oci.dll文件.
我从oracle下载了instantclient_11_2 zip文件.拉开拉链.它包含一堆dll文件.
如何在Windows上安装它?我是否需要运行cmd提示符或将其移至xampp下的特定文件夹?
我正在尝试从Oracle包调用一个函数,我收到此错误:
PHP致命错误:只能通过引用传递变量
这是我的代码:
$connection = $this->getConnection();
if (!$connection){
return null;
}
$s = oci_parse($connection, "begin my_package.my_function(
:param1
); end;");
//getting the error in this following line:
oci_bind_by_name($s, ":param1", "13")
if($result = oci_execute($s)){
....
}
...
Run Code Online (Sandbox Code Playgroud)
我一直在查看其他帖子,但这些错误完全相同,但似乎没有一个与此问题相关.
我在Windows 7机器上使用PHP 5.5.6而不是IIS 7.5.
这是我的pacakage功能的定义:
FUNCTION my_function(param1 IN VARCHAR2) RETURN CLOB IS
BEGIN
-- etc...
-- etc...
END;
Run Code Online (Sandbox Code Playgroud) 我使用的是 Windows 7 和 php5.6。
php_oci8_12c.dll存在,但我找不到它。其他模块正常。
错误日志:
PHP 警告:PHP 启动:无法加载动态库 'C:/Server/bin/ext\php_oci8_12c.dll' - 找不到指定的模块。\r\n 在第 0 行的未知中
我在Ubuntu Server 17.04上经历了下载Oracle即时客户端、SDK等的全过程。然后用alien将rpm包转换为deb,安装,设置路径,下载pecl oci8,编译安装(无错误)等,然后添加一行:
扩展名=/usr/lib/php/20151012/oci8.so
并重新启动。当我检查 /var/log/apache2/error.log 时,我看到:
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/20151012/oci8.so' - libmql1.so: cannot open shared object file: No such file or directory in Unknown on line 0
[Thu Jul 20 10:46:44.352631 2017] [mpm_prefork:notice] [pid 23450] AH00163: Apache/2.4.25 (Ubuntu) configured -- resuming normal operations
[Thu Jul 20 10:46:44.352717 2017] [core:notice] [pid 23450] AH00094: Command line: '/usr/sbin/apache2'
Run Code Online (Sandbox Code Playgroud)
有谁知道我能做些什么来使它工作?我想我没有启用 selinux 或者是权限问题?
谢谢
我可以通过构造命令的SQL命令在C程序中通过OCI调用ORACLE存储过程,这里是我的代码的简短片段:
/* build sql statement calling stored procedure */
strcpy ( sql_stmt, "call get_tab_info(:x)" );
rc = OCIStmtPrepare(p_sql, p_err, sql_stmt,
(ub4) strlen (sql_stmt), (ub4) OCI_NTV_SYNTAX, (ub4) OCI_DEFAULT);
Run Code Online (Sandbox Code Playgroud)
但是如何使用以下签名构建对ORACLE函数的调用(在我的C程序中):
CREATE OR REPLACE FUNCTION get_seq_number (p_table_name IN VARCHAR2, p_seq_type IN VARCHAR2)
RETURN NUMBER IS
Run Code Online (Sandbox Code Playgroud)
要在PL/SQL中调用该函数,我会使用例如:
v_seq := get_seq_number(v_tabname, v_seqtype);
Run Code Online (Sandbox Code Playgroud)
如何构造SQL字符数组(sql_stmt)来调用我的C程序中的ORACLE函数?
Oracle 说有一些 OCI 的演示/示例程序。
就我而言,我想找到使用 OCIConnectionPoolCreate() 的示例。cdemocp.c根据文档,应该有一个名为的文件:http :
//download.oracle.com/docs/cd/B19306_01/appdev.102/b14250/ociabdem.htm
但它远不清楚我应该安装什么来获取这些文件?我希望我可以从 Oracle 自己的网站下载它们。似乎没有。当然没有来自上述页面的方便链接。
我试过安装(到 Windows 上):
基本上,没有运气找到它们。
如果我用谷歌搜索,cdemocp.c我只会发现:
(我发现使用oracle的文档就像指环王,与现实的联系很模糊,而且可能字数太多。我不喜欢它。)
<?php
echo "hello";
$db='(DESCRIPTION = ADDRESS = (PROTOCOL = TCP)(HOST = some_ip)(PORT = some_port))(CONNECT_DATA = (SID = xxx.yyy)))';
$conn=oci_connect('user','pass','$db');
if (!$conn){
echo "No connection";
}
else{
echo "Connected!";
}
?>
Run Code Online (Sandbox Code Playgroud)
我得到了上面的代码.它显示你好,但其他任何东西,我不知道为什么,因为即使连接失败,它应显示" 无连接 ",不应该吗?
我有一个简单的php脚本:
<?php
$DB = '//10.11.201.170:1521/XE';
$DB_USER = 'BIOTPL';
$DB_PASS = 'biotpl';
$DB_CHAR = 'AL32UTF8';
$conn = oci_connect($DB_USER, $DB_PASS, $DB, $DB_CHAR);
if($conn)
{
echo "Successfully connected to Oracle.\n";
OCILogoff($c);
//$statement = oci_parse($conn, 'select 1 from dual');
//oci_execute($statement);
//$row = oci_fetch_array($statement, OCI_ASSOC+OCI_RETURN_NULLS);
}
else
{
$err = OCIError();
echo "Connection failed." . $err[text];
}
?>
Run Code Online (Sandbox Code Playgroud)
当我运行它(从浏览器或命令行)时,出现错误:
Call to undefined function oci_connect
Run Code Online (Sandbox Code Playgroud)
我正在使用php 5.6.24。我已经将php_oci8.dll和php_oci8_11g.dll复制到/ ext文件夹中。我有
extension=php_oci8.dll
extension=php_oci8_11g.dll
Run Code Online (Sandbox Code Playgroud)
在我的php.ini中,我已经安装了即时client_11_2-尝试了32位版本。我有ORACLE_HOME和TNS_ADMIN环境变量指向即时客户端文件夹(C:\ instantclient_11_2)。
我花了数小时的时间来尝试不同的事情,但无济于事。
我已经安装了Microsoft Visual C ++ 2010运行时(x86)。OCI8扩展需要此功能。我已经安装了Microsoft Visual C ++ 2012 Runtime(x86)。PHP需要此功能。
当我尝试以下命令时:
php --ri …Run Code Online (Sandbox Code Playgroud) 当我尝试从表中访问任何内容时,我收到错误"表或视图不存在".我通过PHP使用PDO和OCI驱动程序.我一直很难找到通过PHP使用oracle的帮助.
$dbh = new PDO("oci:dbname=listst", DB_USER, DB_PASS);
Run Code Online (Sandbox Code Playgroud)
当我尝试时,select * from entriedLevels我什么也得不回来(即使entriedLevels存在且用户具有select访问权限).
当我尝试时,select OBJECT_NAME from user_objects where object_type = 'TABLE'我什么也得不回来.
当我尝试时,select TABLE_NAME from all_tables我终于可以看到所有的表格了.
我为我糟糕的写作道歉,这是一个星期五漫长的一天结束......有点脑死了.
此请求按预期工作:
select dit_in.id data_item_in, dit_out.id data_item_out, alg.id algo_id
from algorithm_run arun
join algorithm_run_of arof on
arof.algorithm_run_id = arun.id
join algorithm_run_input arin on
arin.algorithm_run_id = arun.id
join data_item dit_in on
dit_in.id = arin.data_item_id
join algorithm alg on
alg.id = arof.algorithm_id
join algorithm_run_output arout on
arout.algorithm_run_id = arun.id
join data_item dit_out on
dit_out.id = arout.data_item_id
where alg.id in (182,183,143,162,125,222)
Run Code Online (Sandbox Code Playgroud)
不幸的是,当我在最后添加时出现错误:
and arun.start_time >= to_date(’01/jun/2011’,’dd/mm/yyyy’)
and arun.start_time < to_date(’01/jul/2011’,’dd/mm/yyyy')
Run Code Online (Sandbox Code Playgroud)
我正在使用Web界面,错误消息是:
警告:oci_execute()[function.oci-execute]:ORA-00911:第117行/opt/csw/apache2/share/htdocs/DAE/sites/default/modules/data_repository/data_repository.inc中的无效字符.
警告:oci_fetch_row()[function.oci-fetch-row]:ORA-24374:在获取或执行之前未完成定义并在/ opt/csw/apache2/share/htdocs/DAE/sites/default/modules/daedatabase /中获取第852行的daedatabase_db.inc.