我目前在使用odbc_connect在CentOS服务器上运行时遇到问题。我已经安装了Easysoft ODBC-SQL-Server驱动程序,目的是连接到Microsoft SQL Server 2012。
我收到错误:
PHP致命错误:调用未定义的函数odbc_connect()
使用odbc_connect()
。
> ls /etc/php.d
> curl.ini json.ini pdo.ini pdo_sqlite.ini sqlite3.ini
> fileinfo.ini odbc.ini pdo_odbc.ini phar.ini zip.ini
> cat pdo_odbc.ini ;
> Enable pdo_odbc
> extension module extension=pdo_odbc.so
我已经安装了php-odbc软件包并重新启动了我的服务器,我还需要做些什么来确保PHP能够访问odbc方法吗?
更新
php --ini
指向
/usr/local/lib/php.ini
哪个没有提及ODBC。
运行命令"
php -i |grep ini
给出:
Configuration File (php.ini) Path => /usr/local/lib
Loaded Configuration File => /usr/local/lib/php.ini
Scan this dir for additional .ini files => (none)
Additional .ini files parsed => (none)
user_ini.cache_ttl => 300 => 300
user_ini.filename => .user.ini => .user.ini
init_command_executed_count => 0
init_command_failed_count => 0
com_init_db => 0
Classes => AppendIterator, ArrayIterator, ArrayObject, BadFunctionCallException, BadMethodCallException, CachingIterator, CallbackFilterIterator, DirectoryIterator, DomainException, EmptyIterator, FilesystemIterator, FilterIterator, GlobIterator, InfiniteIterator, InvalidArgumentException, IteratorIterator, LengthException, LimitIterator, LogicException, MultipleIterator, NoRewindIterator, OutOfBoundsException, OutOfRangeException, OverflowException, ParentIterator, RangeException, RecursiveArrayIterator, RecursiveCachingIterator, RecursiveCallbackFilterIterator, RecursiveDirectoryIterator, RecursiveFilterIterator, RecursiveIteratorIterator, RecursiveRegexIterator, RecursiveTreeIterator, RegexIterator, RuntimeException, SplDoublyLinkedList, SplFileInfo, SplFileObject, SplFixedArray, SplHeap, SplMinHeap, SplMaxHeap, SplObjectStorage, SplPriorityQueue, SplQueue, SplStack, SplTempFileObject, UnderflowException, UnexpectedValueException
open sourced by => Epinions.com
命令
nm /usr/local/bin/php |grep odbc
没有输出。
答案 0 :(得分:7)
确保您正在使用正确的php配置。
运行以下命令以了解正确的odbc ini文件
cast(date_format('20141014123456789', 'yyyyMMddHHmmssSSS') as timestamp)
答案 1 :(得分:3)
仔细检查SELECT [MembershipCount], Count(1) FROM
(
SELECT count(membership.memberid) as MembershipCount from Membership, Package
WHERE membership.PackageId = Package.Id
AND membership.DiscountPercentage != 100
AND Package.PackageTypeId != 1
AND membership.MembershipStateId != 5
AND Membership.LocationId = 1
group by memberid
)
order by Count(1) Desc
中是否有ini文件。它看起来应该是/etc/php.d
,应该指向20-odbc.ini
文件
答案 2 :(得分:3)
确保php.d目录是正确的。如果你运行这个
php -i|grep php.d
一切都指向/etc/php.d
或是否有另一个php
配置位置。在Centos 6上,通常会看到已安装的PHP版本替换捆绑它的版本,因为它已经过时,新版本可以安装在任何地方,通常在/opt/rh/php[version num here]
中。使用Yum安装的任何其他软件包可能不会引用新的PHP,如果这是在命令行上引用的。
如果没有显示任何输出,那么显示...
php -i |grep ini
这应该为您提供它正在使用的php.ini文件的位置。如果它不在
中/etc/php.ini
有人在本地安装了php。您还应该看到像
这样的行Scan this dir for additional .ini files => /usr/local/etc/php/5.5/conf.d
这将显示你正在寻找像odbc这样的东西。找到PHP二进制文件即
which php
然后在它上面运行
nm /usr/local/bin/php |grep odbc
如果这给你带来了很多带有odbc符号的符号,那么php是用odbc支持编译的,如果没有,则PHP二进制文件不支持odbc。