前言
odbc在connect的時候會返回資源句柄
,但是如果返回false
就矇蔽了。如果有記錄php錯誤日誌,會得到下面的內容
odbc_connect(): SQL error: [unixODBC][Cloudera][ODBC] (11560) Unable to locate SQLGetPrivateProfileString function., SQL state S1000 in SQLConnect
google一下發現和動態庫有點關係,只好看下系統調用情況
strace php 進程
找到下面的信息,看來是這個庫libiodbcinst.so
缺失了
open("/home/.odbcinst.ini", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY) = 7
fstat(7, {st_mode=S_IFREG|0644, st_size=31742, ...}) = 0
mmap(NULL, 31742, PROT_READ, MAP_PRIVATE, 7, 0) = 0x7f779b219000
close(7) = 0
open("/lib64/tls/libiodbcinst.so", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/lib64/libiodbcinst.so", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib64/tls/libiodbcinst.so", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib64/libiodbcinst.so", O_RDONLY) = -1 ENOENT (No such file or directory)
munmap(0x7f779b219000, 31742) = 0
open("/data/logs/php/php_error.log", O_WRONLY|O_CREAT|O_APPEND, 0644) = 7
write(7, "[26-Sep-2019 10:52:47 Asia/Shang"..., 304) = 304
close(7) = 0
安裝庫文件
rpm -ivh https://rpmfind.net/linux/epel/6/x86_64/Packages/l/libiodbc-3.52.7-1.el6.x86_64.rpm
ln -sv /usr/lib64/libiodbcinst.so.2 /usr/lib64/libiodbcinst.so