Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP调用oci_execute()会导致核心转储_Php_Sql_Oracle - Fatal编程技术网

PHP调用oci_execute()会导致核心转储

PHP调用oci_execute()会导致核心转储,php,sql,oracle,Php,Sql,Oracle,我写了一个脚本,做了一些非常简单的事情: 1) 连接到Oracle 10数据库。 2) 检查tmp表是否存在。 3) 如果!存在,创建tmp表(现有表的副本) 4) 我对tmp表进行了一些数据操作(以模拟生产中将发生的情况) 5) 执行查询以获得两个表之间的差异,这就是我遇到问题的地方。下面是有问题的代码块,具体函数前后都有星号 printf(" Finding difference between current and previous data ......."); $sCmd = sp

我写了一个脚本,做了一些非常简单的事情:

1) 连接到Oracle 10数据库。
2) 检查tmp表是否存在。
3) 如果!存在,创建tmp表(现有表的副本)
4) 我对tmp表进行了一些数据操作(以模拟生产中将发生的情况)
5) 执行查询以获得两个表之间的差异,这就是我遇到问题的地方。下面是有问题的代码块,具体函数前后都有星号

printf("  Finding difference between current and previous data .......");
$sCmd = sprintf("SELECT * FROM hrms_mview_previous WHERE cstatus='A' MINUS SELECT * FROM hrms_mview_current");
if (!($hDB_Results = oci_parse($hDB, $sCmd)))
{
  fprintf(STDERR, "ERROR\n  Error in MINUS query.\n\n");
  exit(1);
}
else
{
  **oci_execute($hDB_Results);**
  $iRows = oci_fetch_all($hDB_Results, $aRes);
  print_r($aRes);
  printf("done\n");
}

oci_free_statement($hDB_Results);
如果我删除对oci_execute()的调用,代码将执行良好,并返回一个空数组。如果在Oracle CLI中运行与传递给oci_execute()的查询相同的查询,则查询工作正常,并返回预期的数据

这是脚本输出:

Segmentation fault (core dumped)

我正在Solaris机器上使用PHP 5.2.13版。以前是否有人在调用oci_execute()时经历过类似的行为?这件事让我有点不知所措。

多亏了gdb,在我重重地撞了一下头之后,我才发现了问题所在。在我运行的系统上,这个来自PHP的脚本是针对不同的Oracle库构建的,而不是它链接到的库,因此存在不匹配,这导致了核心转储。当它基于10g构建时,它正在链接到oracle 9库

以下是gdb的输出:[gdb/opt/bin/php-core]

Core was generated by `/opt/bin/php ./dbupdate_wfterm.php'.
Program terminated with signal 11, Segmentation fault.
#0  0xff050938 in memcpy () from /platform/SUNW,Sun-Fire-V490/lib/libc_psr.so.1
(gdb) backtrace
#0  0xff050938 in memcpy () from /platform/SUNW,Sun-Fire-V490/lib/libc_psr.so.1
#1  0xfdf5feac in nioqrc () from /opt/oracle/9.2.0/9.2.0/lib/libclntsh.so.9.0
#2  0xfe0ee0d0 in ttcdrv () from /opt/oracle/9.2.0/9.2.0/lib/libclntsh.so.9.0
#3  0xfdf6975c in nioqwa () from /opt/oracle/9.2.0/9.2.0/lib/libclntsh.so.9.0
#4  0xfdd61c40 in upirtrc () from /opt/oracle/9.2.0/9.2.0/lib/libclntsh.so.9.0
#5  0xfdd61c40 in upirtrc () from /opt/oracle/9.2.0/9.2.0/lib/libclntsh.so.9.0
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
正如您所看到的,当它应该使用10g libs时,它引用了9.2.0库

无论如何,一切都很好,脚本正在按预期运行