odbc connect return false

前言

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章