Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.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 普适SQL驱动程序_Php_Ubuntu_Odbc_Pervasive - Fatal编程技术网

Php 普适SQL驱动程序

Php 普适SQL驱动程序,php,ubuntu,odbc,pervasive,Php,Ubuntu,Odbc,Pervasive,更新:应按建议位于服务器故障上。新职位: 我很难使用普及的SQL驱动程序让PHP与ODBC连接 我有一台Ubuntu服务器12.04,并在这里安装了64位PSQL客户端驱动程序: 我已将带有DSN的ODBC.ini设置到我的数据库中,我可以愉快地连接并运行查询: isql Exchequer 当我使用PHP时,odbc_connect看起来不错,并给了我一个资源,但odbc_exec(调用驱动程序的点)随后完全失败(SEG fault): 我做错了什么 更新: 这是gdb的输出 (gdb)

更新:应按建议位于服务器故障上。新职位:

我很难使用普及的SQL驱动程序让PHP与ODBC连接

我有一台Ubuntu服务器12.04,并在这里安装了64位PSQL客户端驱动程序:

我已将带有DSN的ODBC.ini设置到我的数据库中,我可以愉快地连接并运行查询:

isql Exchequer
当我使用PHP时,odbc_connect看起来不错,并给了我一个资源,但odbc_exec(调用驱动程序的点)随后完全失败(SEG fault):

我做错了什么

更新:

这是gdb的输出

(gdb) run /var/www/default/scripts/stock/index.php
Starting program: /usr/bin/php5 /var/www/default/scripts/stock/index.php
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[New Thread 0x7fffecc89700 (LWP 14514)]
[Thread 0x7fffecc89700 (LWP 14514) exited]
Halt[Inferior 1 (process 14513) exited normally]
(gdb) bt
No stack.
以及PHP error.log条目

[Fri Aug 10 15:24:53 2012] [notice] child pid 14510 exit signal Segmentation fault (11)
我还添加了Trace/TraceFile,但似乎没有将任何输出保存到日志文件中

更新2:

这是我正在运行的简化脚本:

如果(!$odbc=odbc\U连接(“国库”、“用户名”、“密码”)){ die(“与财政部的连接失败”); } $rows=odbc\u exec($odbc,'SELECT sl.slStockCode,sl.slQtyInStock,sl.slQtyAllocated,sl.slLocCode FROM StockLocation sl WHERE sl.slLocCode IN(\'DIG\','WOO\','MEN\')); 回显“.print_r($rows,true)”


odbc_connect可以工作(不会死掉),但我一直在浏览器中看到错误342,在apache日志文件中看到“退出信号分段错误”。

这可能只是您正在使用的某个组件中的一个错误,但我最好的猜测是您的组件在编译时与SQLLEN/SQLULEN的大小不匹配。您可以在unixODBC中启用登录,它可能会给我们一个提示。编辑odbcinst.ini文件并将以下内容添加到顶部:

[ODBC]
Trace=yes
TraceFile=/tmp/unixodbc.log
如果您不知道需要编辑哪个odbcinst.ini文件,请运行odbcinst-j,它会告诉您。现在运行PHP脚本,上面的文件应该包含日志

或者,您可以在调试器(gdb)下运行php,看看它在哪里。为此,您需要找到php可执行文件的位置,并运行如下操作:

gdb /path/to/php
然后键入“run/path/to/my/php/script”,当它落在上面时,键入“bt”以获得一个返回跟踪,它将告诉我们它落在哪里

但是,如果是SQLLEN/SQLULEN不匹配,则可能正在发生损坏,这可能意味着它会在与问题所在完全不同的地方出现故障。您需要验证PHP的ODBC模块、unixODBC和ODBC驱动程序都是使用相同大小的SQLLEN和SQLULEN构建的。我猜如果你从Ubuntu安装了unixODBC和PHP,那么它们会匹配,所以你需要问他们的是,这个奇怪的驱动程序是普及的

odbcinst-j输出unixODBC使用的SQLLEN/SQLULEN的大小


您可以在

上找到更多关于这一点的信息,这可能只是您正在使用的某个组件中的一个错误,但我的最佳猜测是,您的组件在编译时与SQLLEN/SQLULEN的大小不匹配。您可以在unixODBC中启用登录,它可能会给我们一个提示。编辑odbcinst.ini文件并将以下内容添加到顶部:

[ODBC]
Trace=yes
TraceFile=/tmp/unixodbc.log
如果您不知道需要编辑哪个odbcinst.ini文件,请运行odbcinst-j,它会告诉您。现在运行PHP脚本,上面的文件应该包含日志

或者,您可以在调试器(gdb)下运行php,看看它在哪里。为此,您需要找到php可执行文件的位置,并运行如下操作:

gdb /path/to/php
然后键入“run/path/to/my/php/script”,当它落在上面时,键入“bt”以获得一个返回跟踪,它将告诉我们它落在哪里

但是,如果是SQLLEN/SQLULEN不匹配,则可能正在发生损坏,这可能意味着它会在与问题所在完全不同的地方出现故障。您需要验证PHP的ODBC模块、unixODBC和ODBC驱动程序都是使用相同大小的SQLLEN和SQLULEN构建的。我猜如果你从Ubuntu安装了unixODBC和PHP,那么它们会匹配,所以你需要问他们的是,这个奇怪的驱动程序是普及的

odbcinst-j输出unixODBC使用的SQLLEN/SQLULEN的大小


您可以在

上找到更多关于此问题的信息。此问题是否应在serverfault上?此问题是否应在serverfault上?谢谢您的全面回答。odbcinst-j的输出将大小指定为8:root@hub:/var/www/default/scripts/stock#odbcinst-j unixODBC 2.2.14驱动程序…………:/etc/odbcinst.ini系统数据源:/etc/odbc.ini文件数据源……:/etc/ODBCDataSources用户数据源……:/root/.odbc.ini SQLULEN大小……:8 SQLLEN大小……:8 SQLSETPOSIROW大小:8I尝试安装gdb包时出现错误:apt-get:/usr/local/psql/lib64/libstdc++.so.6:version
GLIBCXX_3.4.9'未找到(apt-get所需)apt-get:/usr/local/psql/lib64/libstdc++.so.6:version
GLIBCXX_3.4.15'未找到(apt-get所需)apt get:/usr/local/psql/lib64/libstdc++.so.6:version
GLIBCXX_3.4.11'未找到(apt get要求)apt get:/usr/local/psql/lib64/libstdc++.so.6:version
GLIBCXX_3.4.11'未找到(由/usr/lib/x86_64-linux-gnu/libapt pkg.so.4.12要求)`GLIBCXX_3.4.15'未找到(由/usr/lib/lib/x86_-linux.12要求)因此,如果ODBC驱动程序是以4字节的大小构建的,则可能会损坏。这并不罕见。您应该能够与我们联系。但您可能仍然希望尝试跟踪和gdb,因为它可能是其他东西。gdb给我:(gdb)运行/var/www/default/scripts/stock/index.php启动程序:/usr/bin/php5/var/www/default/scripts/stock/index.php[使用libthread\u db启用的线程调试]使用主机libthread\u db库“/lib/x86\u 64-linux-gnu/libthread\u db.so.1”。[新线程0x7fffecc89700(LWP 14312)][线程0x7fffecc89700(LWP 14312)退出]暂停[低级1(进程14311)正常退出]您是否可以编辑您的帖子并在那里添加gdb输出,因为在评论中很难阅读。但是,它看起来好像正常退出,因此您确定它正在执行与故障时相同的操作吗?也许你最好提取d